• LVS集群


    负载均衡集群实现的方式:

    软件实现方式:

    • lvs 四层负载 传输层(协议-端口号)
    • haproxy 七层负载 osi模型第7层
    • Nginx 七层负载 osi模型第7层

    LVS 负载均衡有哪些策略?

    LVS一共有三种工作模式: DR,Tunnel,NAT

    lvs:Linux Virtual Server

    l4:四层交换,四层路由:

    根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法)

    netfilter:

    ​ PREROUTING --> INPUT

    ​ PREROUTING --> FORWARD --> POSTROUTING

    ​ OUTPUT --> POSTROUTING

    lvs:

    ipvsadm/ipvs

    ipvsadm:用户空间的命令行工具,用于管理集群服务

    ipvs:工作于内核中netfilter INPUT钩子上

    支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议

    grep -i -A 2 ‘ipvs’ /boot/config-2.6.32-504.el6.x86_64 查看系统对ipvs的支持情况,包括算法

    lvs arch:

    调度器:director,dispatcher,balancer

    RS:Real Server

    Client IP:CIP

    Director Virutal IP:VIP

    Director IP:DIP

    Real Server IP:RIP

    lvs type:

    lvs-nat:masquerade

    在这里插入图片描述

    ​ lvs-nat本质上就是多目标的DNAT(iptables)

    ​ lvs-nat模式通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出来的某RS的RIP地址实现转发

    lvs-nat的特点:

    RS和DIP应该使用私网地址,且RS的网关要指向DIP

    ​ 请求和响应报文都要经由director转发,所以配置时需要将director的转发功能开启,极高负载的场景中,director可能会成为系统性能瓶颈

    ​ 支持端口映射

    ​ RS可以使用任意OS

    ​ RS的RIP和Director的DIP必须在同一IP网络

    lvs-dr(direct routing):lvs的默认模式,gateway

    ​ lvs-dr模式通过修改请求报文的目标MAC地址进行转发

    ​ Director:调度器要配置VIP,DIP

    ​ RSs:所有的Real Server都要配置RIP,VIP

    lvs-dr的特点:

    保证前端路由器将目标IP为VIP的请求报文发送给director,解决方案有以下三种:
       静态绑定
       arptables
      修改RS主机内核的2个参数:
          arp_announce:是否接收并记录别人的通告以及是否通告自己的mac地址给别人。
          arp_announce有三个可选值,0,1,2,其意义如下:
              0(default,默认值为0):通告自己所拥有的所有地址
              1:尽量不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,但是是尽量不通告,有可能还是会通告的
       尽量避免不在该网络接口子网段的本地地址做出arp回应. 
       当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.
       此时会检查来访IP是否为所有接口上的子网段内ip之一.如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
             2:总是不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,绝对不会通告
        对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.
        首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 
        如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
    
    arp_ignore:是否响应arp请求
        arp_ignore有9个可选值,0,1,2,3,4,5,6,7,8,其意义如下:
    
        0(default,默认值为0):回应任何网络接口上对任何本地IP地址的arp查询请求
    
        1:请求报文从哪个接口进入的且请求的目标地址就是此接口配置的地址才予以响应,否则不响应
    
        只回答目标IP地址是来访网络接口本地地址的ARP查询请求
    
        2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
    
        3:不回应该网络接口的arp请求,而只对设置的唯一和连接地址做出回应
    
        4-7:保留未使用
    
        8:不回应所有(本地地址)的arp查询
    
        RS的RIP可以使用私有地址,也可以使用公网地址
    
        RS跟Director必须在同一物理网络中,中间不能有路由器相隔
    
        请求报文经由Director调度,但响应报文一定不能经由Director
    
    不支持端口映射
      RS可以是大多数OS
      RS的网关不能指向DIP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    lvs-tun(ip tunneling):ipip

    ​ lvs-tun模式不修改请求报文的ip首部,而是通过在原有的ip首部(CIP<–>VIP)之外再封装一个ip首部(DIP<–>RIP)

    ​ lvs-tun的特点:

    ​ RIP,DIP,VIP必须是公网地址

    ​ RS的网关不能指向DIP

    ​ 请求报文必须经由director调度,但响应报文必须不能经由director

    ​ 不支持端口映射

    ​ RS的OS必须支持隧道功能

    lvs-fullnat:keepalived

    ​ director通过同时修改请求报文的目标地址和源地址进行转发

    ​ lvs-fullnat的特点:

    ​ VIP是公网地址,RIP和DIP是私网地址,RIP与DIP无须在同一网络中

    ​ RS接收到的请求报文的源地址为DIP,因此要响应给DIP

    ​ 请求报文和响应报文都必须经由Director

    ​ 支持端口映射机制

    ​ RS可以使用任意OS

    lvs scheduler:lvs调度器,即lvs挑选RS的算法

    静态方法:仅根据算法本身进行调度

    ​ RR:round robin,轮调、轮询

    ​ WRR:weighted rr,加权的rr,根据一定的比例进行轮调,比如每次RS1给2个请求,RS2给1个请求

    ​ SH:source hash,源地址hash,实现session保持的机制,将来自于同一个IP的请求始终调度至同一RS,每个服务单独调度

    ​ DH:destination hash,目标地址hash,将对同一个目标(资源)的请求始终发往同一个RS

    动态方法:根据算法及各RS的当前负载状态进行调度,根据指定的算法算出overhead(负载),最终挑选出overhead值最小的则为被选中的RS

    ​ LC:Least Connection,最少连接数,算法如下:

    ​ overhead = Active * 256 + Inactive

    ​ WLC:Weighted LC,加权的LC,算法如下:

    ​ overhead=(Active*256+Inactive)/ weight

    ​ SED:Shortest Expection Delay,最短期望延迟,算法如下:

    ​ overhead = (Active + 1) * 256 / weight

    ​ NQ:Nevel Queue,是SED算法的改进,根据SED算法每台主机第一次至少要均分配一次,然后再按SED算法来挑选

    ​ LBLC:Locality-Based LC,基于本地的最少连接数,即为动态的DH算法

    ​ 正向代理情形下的cache server调度

    ​ LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法

    ipvs的集群服务:
       支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协
    
    • 1
    • 2

    ipvs集群服务的特点:

    ​ 一个ipvs主机可以同时定义多个cluster service

    ​ 定义时指明lvs-type(lvs的模式)以及lvs scheduler(调度器)

    ​ 一个cluster service上至少应该有2个real server

    ipvsadm的用法:

    管理集群服务:

    ​ ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]

    ​ ipvsadm -D -t|u|f service-address

    ```
    
    • 1

    常见的service-address:

    tcp:-t ip:port
    udp:-u ip:port
    fwm:-f mark
    -s scheduler:
    默认为wlc
    -p [timeout]:定义持久连接,timeout不指定时默认为300秒

    管理集群服务中的RS
    ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]

    ```
    
    • 1

    server-address:

    ​ ip[:port]

    ​ lvs-type:

    ​ -g:gateway,dr模式

    ​ -i:ipip,tun模式

    ​ -m:masquerade,nat模式

    -w:设定权重,可为0到正无穷数值,设为0时不会被调度,默认为1

    ​ 权重值越大则表示性能越好,被调度的资源也会更多

    清空和查看:

    ​ ipvsadm -C 清空

    ​ ipvsadm -L|l [options] 查看

    ​ options:

    ​ -n:numeric,基于数字格式显示地址和端口

    ​ -c:connection,显示当前ipvs连接

    ​ --stats:统计数据

    ​ --rate:输出速率信息

    ​ --exact:显示精确值,不做单位换算

    保存和重载:

    ​ ipvsadm -R 重载

    ​ ipvsadm -S [-n] 保存

    置零计数器:

    ​ ipvsadm -Z [-t|u|f service-address]

    lvs-nat配置:director要配置2块网卡

    配置ip地址信息:

    ​ director(dip,vip)

    ​ RS(rip)

    开启director的ip转发功能

    在director上添加并保存规则:

    ​ ipvsadm -A -t vip:port -s rr

    ​ ipvsadm -a -t vip:port -r rip -m

    ​ ipvsadm -S > /etc/sysconfig/ipvsadm

    作业:nat模型实现http和https两种负载均衡集群,注意,各RS都要提供同一个私钥和同一个证书

    lvs-dr配置:director只需要一块网卡,vip配置在lo接口中即可,此处假设dip与rip在同一网段

    配置director的ip地址信息(dip,vip)

    ​ 配置dip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0)

    ​ 配置vip:

    ​ ifconfig eth0:0 vip/32 broadcast vip up

    配置RS的ip地址信息:

    ​ 配置rip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0)

    ​ 修改网卡内核参数:编辑/etc/sysctl.conf文件,添加如下内容:

    ​ net.ipv4.conf.all.arp_ignore = 1

    ​ net.ipv4.conf.all.arp_announce = 2

    ​ 配置vip:

    ​ ifconfig lo:0 vip/32 broadcast vip up

    ​ 注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告

    配置路由信息:在director和所有RS上进行如下配置:

    ​ route add -host vip dev interface:0

    在director上添加并保存规则:

    ​ ipvsadm -A -t vip:port -s wrr

    ​ ipvsadm -a -t vip:port -r rip:port -g

    ​ ipvsadm -S > /etc/sysconfig/ipvsadm

    作业:

    dr模型实现http和https两种负载均衡集群,注意,各RS都要提供同一个私钥和同一个证书

    dr模型实现mysql负载均衡集群

    拓展:规则拓扑实现VIP与RIP不在同一网络中的集群

    通过FWM(FireWalld Mark)定义集群的方式:

    功用:将共享一组RS的集群服务统一进行定义,统一进行调度

    a) 在director上的netfilter的mangle表的PREROUTING链定义用于“打标”的规则:

    ​ iptables -t mangle -A PREROUTING -d $VIP -p $PROTOCOL --dports $PORT -j MARK --set-mark #

    ​ $VIP:VIP地址

    ​ $PROTOCOL:协议,tcp/udp等

    ​ $PORT:端口号

    ​ 最后的#号表示打标的标记号

    b) 基于FWM定义集群服务:

    ​ ipvsadm -A -f # -s scheduler

    ​ ipvsadm -a -f # -t $VIP[:PORT] -r $RIP -g

    session保持的方法有以下三种实现方式:

    session绑定:

    ​ 对某一特定服务:可以使用lvs的sh算法进行session绑定

    ​ 对多个共享同一组RS的服务器,需要统一进行绑定时:可以使用lvs的persistence持久连接来实现

    ​ 功能:无论ipvs使用何种调度方法,其都能实现将来自于同一个Client的请求始终定向至第一次调度时挑选出的RS

    ​ lvs的persistence通过一个持久连接模板来实现持久连接,这个持久连接模板独立于算法之外,模板样式如下:

    ​ sourceip rs timer

    ​ 持久连接的实现方式:

    ​ 每端口持久:PPC,单服务持久调度。无论使用何种算法,可以使用此方式实现sh算法的功能,且能定义持久时长

    ​ 每FWM持久:PFWMC,单FWM持久调度。将多种不同的服务通过iptables打标成同一种标记,然后通过FWM进行统一持久调度

    ​ 每客户端持久:PCC,单客户端持久调度

    ​ director上会将用户的任何请求都识别为集群服务,并向RS进行调度

    ​ tcp:1-65535

    ​ udp:1-65535

    session复制

    session服务器:memcached,redis(key-value,kv store)

    lvs缺点:

    不具备健康状态检查功能,只是一个调度器而已

    准备三台主机

    系统平台IP主机名
    centos8/redhat8192.168.229.148 (dip)
    192.168.171.130 (vip)
    lvs (调度器)
    centos8/redhat8192.168.229.150RS1
    centos8/redhat8192.168.229.151RS2

    注意:三台虚拟机都要关闭防火墙跟SElinux

    案例1:

    NAT 模式

    lvs_nat配置:director要配置2块网卡

    在这里插入图片描述

    lvs

    ## 私网IP  (dip)
    [root@lvs ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens160
    DEVICE=ens160
    ONBOOT=yes
    IPADDR=192.168.229.148
    NETMASK=255.255.255.0
    GATEWAY=192.168.229.2
    DNS1=114.114.114.114
    
     
    ## 公网IP  (vip)
    [root@lvs ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens192
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens192
    DEVICE=ens192
    ONBOOT=yes
    IPADDR=192.168.171.130
    NETMASK=255.255.255.0
     ## 注意在真实情况下公网是需要配置网关的,它要出去访问的,现在环境是在内网,所以我这里就忽略了。
     
     
     
     ## 重启网卡,让其生效
     [root@lvs ~]# systemctl restart NetworkManager
     
     [root@lvs ~]# ip link set ens192 down;ip link set ens192 up
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    RS1

    下载 httpd 测试网页
    [root@RS1 ~]# dnf -y install httpd
    [root@RS1 ~]# systemctl enable --now httpd ## 开机自启
    [root@RS1 ~]# ss -antl
    State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
    LISTEN 0      128          0.0.0.0:22         0.0.0.0:*
    LISTEN 0      128                *:80               *:*
    LISTEN 0      128             [::]:22            [::]:*
    [root@RS1 ~]#
    
    [root@RS1 ~]# cd /var/www/html/
    [root@RS1 html]# echo 'hello world' > index.html
    [root@RS1 html]# cat index.html
    hello world
    [root@RS1 html]# systemctl restart httpd
    
    
    
      ## RIP
    [root@RS1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens160
    DEVICE=ens160
    ONBOOT=yes
    IPADDR=192.168.229.150
    NETMASK=255.255.255.0
    GATEWAY=192.168.229.148  ## 网关要指向DIP
    DNS1=114.114.114.114
    
    
    ## 重启网卡
    [root@RS1 ~]# ip link set ens160 down;ip link set ens160 up
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这里插入图片描述

    RS2

    下载 nginx 测试 网页
    [root@RS2 ~]# dnf -y install nginx
    [root@RS2 ~]# systemctl enable  --now nginx   ## 开机自启
    [root@RS2 ~]# ss -antl
    State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
    LISTEN 0      128          0.0.0.0:22         0.0.0.0:*
    LISTEN 0      128          0.0.0.0:80         0.0.0.0:*
    LISTEN 0      128             [::]:22            [::]:*
    LISTEN 0      128             [::]:80            [::]:*
    
    [root@RS2 ~]# cd /usr/share/nginx/html
    [root@RS2 html]# echo 'hello tom' > index.html
    [root@RS2 html]# systemctl restart nginx
    [root@RS2 html]# cat index.html
    hello tom
    
    
    ## RIP
     
    [root@RS2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens160
    DEVICE=ens160
    ONBOOT=yes
    IPADDR=192.168.229.151
    NETMASK=255.255.255.0
    GATEWAY=192.168.229.148   ## 网关要指向DIP
    DNS1=114.114.114.114
    
    
    [root@RS2 ~]#  systemctl restart NetworkManager
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述

    lvs

     ## 开启director的ip转发功能
     
    [root@lvs ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    [root@lvs ~]# tail -1 /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    
    ## 让其生效
    [root@lvs ~]# sysctl -p
    net.ipv4.ip_forward = 1
    
    
    ## 查询 ipvsadm 命令由哪个包提供
    [root@lvs ~]# dnf provides *bin/ipvsadm
    Last metadata expiration check: 1:08:26 ago on Sun 14 Aug 2022 01:22:37 PM CST.
    ipvsadm-1.31-1.el8.x86_64 : Utility to administer the Linux Virtual
                              : Server
    Repo        : appstream
    Matched from:
    Other       : *bin/ipvsadm
    
    
    [root@lvs ~]# dnf -y install ipvsadm
    
    
    在director上添加并保存规则
    ipvsadm -A -t vip:port -s rr
    ipvsadm -a -t vip:port -r rip -m
    ipvsadm -S > /etc/sysconfig/ipvsadm
    
    [root@lvs ~]# ipvsadm -A -t 192.168.171.130:80 -s rr
    [root@lvs ~]# ipvsadm -a -t 192.168.171.130:80 -r 192.168.229.150 -m
    [root@lvs ~]# ipvsadm -a -t 192.168.171.130:80 -r 192.168.229.151 -m
    
    
    [root@lvs ~]# ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.171.130:80 rr
      -> 192.168.229.150:80           Masq    1      0          0
      -> 192.168.229.151:80           Masq    1      0          0
    [root@lvs ~]#
    
    
    [root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
    [root@lvs ~]# cat /etc/sysconfig/ipvsadm
    -A -t 192.168.171.130:80 -s rr
    -a -t 192.168.171.130:80 -r 192.168.229.150:80 -m -w 1
    -a -t 192.168.171.130:80 -r 192.168.229.151:80 -m -w 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    访问

    在这里插入图片描述

    案例2 :

    准备三台主机

    系统平台IP主机名
    centos8/redhat8192.168.229.148lvs (调度器)
    centos8/redhat8192.168.229.150RS1
    centos8/redhat8192.168.229.151RS2

    DR 模式

    LVS

    ## 下载软件
    [root@lvs ~]# dnf -y install ipvsadm
    
    
    [root@lvs ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens160
    DEVICE=ens160
    ONBOOT=yes
    IPADDR=192.168.229.148
    NETMASK=255.255.255.0
    GATEWAY=192.168.229.2
    DNS1=114.114.114.114
    
    
    ## 重启网卡
    [root@lvs ~]# ip link set ens160 down;ip link set ens160 up
    
    
    ##   配置vip:
    ##   ifconfig eth0:0 vip/32 broadcast vip up
    
    [root@lvs ~]# ifconfig ens160:0 192.168.229.250/32 broadcast 192.168.229.250 up
    [root@lvs ~]# ifconfig
    ens160: flags=4163  mtu 1500
            inet 192.168.229.148  netmask 255.255.255.0  broadcast 192.168.229.255
            inet6 fe80::20c:29ff:fe57:8f93  prefixlen 64  scopeid 0x20
            ether 00:0c:29:57:8f:93  txqueuelen 1000  (Ethernet)
            RX packets 599  bytes 375267 (366.4 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 470  bytes 42616 (41.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens160:0: flags=4163  mtu 1500
            inet 192.168.229.250  netmask 0.0.0.0  broadcast 192.168.229.250
            ether 00:0c:29:57:8f:93  txqueuelen 1000  (Ethernet)
    
    注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告
    配置路由信息:在director和所有RS上进行如下配置:
    route add -host vip dev interface:0
    在director上添加并保存规则:
    ipvsadm -A -t vip:port -s wrr
    ipvsadm -a -t vip:port -r rip:port -g
    ipvsadm -S > /etc/sysconfig/ipvsadm
    
    [root@lvs ~]# route add -host 192.168.229.250 dev ens160:0
    
    
    在director上添加并保存规则:
    [root@lvs ~]# ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    [root@lvs ~]# ipvsadm -A -t 192.168.229.250:80 -s wrr
    [root@lvs ~]# ipvsadm -a -t 192.168.229.250:80 -r 192.168.229.150:80 -g
    [root@lvs ~]# ipvsadm -a -t 192.168.229.250:80 -r 192.168.229.151:80 -g
    [root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
    [root@lvs ~]# cat /etc/sysconfig/ipvsadm
    -A -t 192.168.229.250:80 -s wrr
    -a -t 192.168.229.250:80 -r 192.168.229.150:80 -g -w 1
    -a -t 192.168.229.250:80 -r 192.168.229.151:80 -g -w 1
    [root@lvs ~]# ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.229.250:80 wrr
      -> 192.168.229.150:80           Route   1      0          0
      -> 192.168.229.151:80           Route   1      0          0
      
      
      
      
      
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    RS1

    ## yum下载httpd
    [root@RS1 ~]# dnf -y install httpd
    
    ## 启动,并开机自启
    [root@localhost ~]# systemctl enable --now httpd
    Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
    [root@localhost ~]# echo 'RS1' > /var/www/html/index.html
    [root@localhost ~]# systemctl restart httpd
    
    
    ## 使用母机访问
    C:\Users\admin>curl 192.168.229.150
    RS1
    
    
     ##配置RS的ip地址信息:
    ##  配置rip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0)
    
    [root@RS1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens160
    DEVICE=ens160
    ONBOOT=yes
    IPADDR=192.168.229.150
    NETMASK=255.255.255.0
    GATEWAY=192.168.229.2
    DNS1=114.114.114.114
    
    
    
    ## 重启网卡
    [root@RS1 ~]# ip link set ens160 down;ip link set ens160 up
    
    
    修改网卡内核参数:编辑/etc/sysctl.conf文件,添加如下内容
    [root@RS1 ~]# vi /etc/sysctl.conf
    # sysctl settings are defined through files in
    # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
    #
    # Vendors settings live in /usr/lib/sysctl.d/.
    # To override a whole file, create a new file with the same in
    # /etc/sysctl.d/ and put new settings there. To override
    # only specific settings, add a file with a lexically later
    # name in /etc/sysctl.d/ and put new settings there.
    #
    # For more information, see sysctl.conf(5) and sysctl.d(5).
    net.ipv4.conf.all.arp_ignore = 1  ## 添加
    net.ipv4.conf.all.arp_announce = 2   ## 添加
    
    ## 让其生效
    [root@RS1 ~]# sysctl -p
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    
    
    ## 配置vip:
    ## ifconfig lo:0 vip/32 broadcast vip up
    
    [root@RS1 ~]# ifconfig lo:0 192.168.229.250/32 broadcast 192.168.229.250 up[root@RS1 ~]# ifconfig
    ens160: flags=4163  mtu 1500
            inet 192.168.229.151  netmask 255.255.255.0  broadcast 192.168.229.255
            inet6 fe80::20c:29ff:fe32:af6d  prefixlen 64  scopeid 0x20
            ether 00:0c:29:32:af:6d  txqueuelen 1000  (Ethernet)
            RX packets 249  bytes 20300 (19.8 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 173  bytes 19875 (19.4 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    
    lo:0: flags=73  mtu 65536
            inet 192.168.229.250  netmask 0.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
    
    
    注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告
    配置路由信息:在director和所有RS上进行如下配置:
    route add -host vip dev interface:0
    
    
    [root@RS1 ~]# route add -host 192.168.229.250 dev lo:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    RS2

    ## yum下载httpd
    [root@RS2 ~]# dnf -y install httpd
    
    
    ## 启动,并开机自启
    [root@localhost ~]# systemctl enable --now httpd
    Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
    [root@localhost ~]# echo 'RS2' > /var/www/html/index.html
    [root@localhost ~]# systemctl restart httpd
    
    
    ## 母机访问
    C:\Users\admin>curl 192.168.229.151
    RS2
    
    
    [root@RS2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens160
    DEVICE=ens160
    ONBOOT=yes
    IPADDR=192.168.229.151
    NETMASK=255.255.255.0
    GATEWAY=192.168.229.2
    DNS1=114.114.114.114
    
    
    ## 重启网卡
    [root@RS2 ~]# ip link set ens160 down;ip link set ens160 up
    
    
    修改网卡内核参数:编辑/etc/sysctl.conf文件,添加如下内容
    [root@RS2 ~]# vi /etc/sysctl.conf
    # sysctl settings are defined through files in
    # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
    #
    # Vendors settings live in /usr/lib/sysctl.d/.
    # To override a whole file, create a new file with the same in
    # /etc/sysctl.d/ and put new settings there. To override
    # only specific settings, add a file with a lexically later
    # name in /etc/sysctl.d/ and put new settings there.
    #
    # For more information, see sysctl.conf(5) and sysctl.d(5).
    net.ipv4.conf.all.arp_ignore = 1  ## 添加
    net.ipv4.conf.all.arp_announce = 2   ## 添加
    
    
    ## 让其生效
    [root@RS2 ~]# sysctl -p
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    
    
    
    
    ## 配置vip:
    ## ifconfig lo:0 vip/32 broadcast vip up
    [root@RS2 ~]# ifconfig lo:0 192.168.229.250/32 broadcast 192.168.229.250 up
    
    [root@RS2 ~]# ifconfig
    ens160: flags=4163  mtu 1500
            inet 192.168.229.150  netmask 255.255.255.0  broadcast 192.168.229.255
            inet6 fe80::20c:29ff:fec7:d2c9  prefixlen 64  scopeid 0x20
            ether 00:0c:29:c7:d2:c9  txqueuelen 1000  (Ethernet)
            RX packets 269  bytes 22599 (22.0 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 198  bytes 22066 (21.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            
            
    lo:0: flags=73  mtu 65536
            inet 192.168.229.250  netmask 0.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
    
    注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告
    配置路由信息:在director和所有RS上进行如下配置:
    route add -host vip dev interface:0
    
    
    
    [root@RS2 ~]# route add -host 192.168.229.250 dev lo:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    访问
    在这里插入图片描述

  • 相关阅读:
    第十三章第一节:Java数据结构预备知识之数据结构、Java集合框架概述
    手写小程序摇树工具(四)——遍历wxml、wxss、wxs文件
    [附源码]java毕业设计选课管理系统
    【华为OD机试真题 python】 字符串筛选排序【2022 Q4 | 100分】
    双向RNN和双向LSTM
    ES6 字符串的repeat()方法
    【K8S专栏】Kubernetes有状态应用管理
    ROS OpenCV库 示例
    Java反射工具类
    Vue Inject & Provided
  • 原文地址:https://blog.csdn.net/m0_58805648/article/details/126358079