LVS:Linux Virtual Server,负载调度器

LVS:Linux Virtual Server,负载调度器

1:Lvs集群类型中的专业术语

  • VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(LVS虚拟服务器)
  • RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(业务服务器)
  • VIP:Virtual serve IP VS外网的IP(LVS调度器的外网IP)
  • DIP:Director IP VS内网的IP(LVS调度器的内网IP)
  • RIP:Real server IP(业务服务器的IP)
  • CIP:Client IP(客户端)

访问流程:CIP<–>VIP<–>==DIP<—>RIP(LVS工作在报文流入方向的PREROUTING和INPUT中间)

2:LVS的4种工作模式

  • lvs-nat(相当于防火墙的dnat方式)

    修改请求报文的目标IP,多目标IP的DNAT

  • lvs-dr(LVS的默认工作模式)

    操纵封装新的MAC地址

  • lvs-tun(RS的OS操作系统必须支持隧道功能,跟LVS-DR模型类似,但是可以支持跨网络访问,适用大型业务环境)

    在原请求IP报文之外新加一个IP首部

  • lvs-fullnat(Linux内核不支持该模式)

    修改请求报文的源和目标IP

2.1:LVS的NAT模式

LVS-NAT:本质上是多目标的DNAT,通过将请求报文中的目标IP和目标PORT修改成LVS通过调度算法筛选出来的RS的目标IP和目标PORT实现转发,所以LVS-NAT模式可以实现端口映射,区别于防火墙的单一映射,LVS可以实现多目标的DNAT

  1. RIP(业务服务器的IP)和DIP(LVS的内网IP)应在同一个网络,且应使用私有IP地址,RS的网关要指向DIP(LVS的内网IP),如果响应报文不经过LVS,响应报文则无法到达CIP(客户端IP),因为请求报文经过了LVS,目标IP和目标PORT都被LVS替换成了RIP和RIP对应的PORT,在响应报文返回的时候必须经过LVS再替换成VIP(LVS的外网IP),由VIP返回给CIP,这样CIP才能正确识别响应报文。
  2. 由于LVS-NAT模式中,请求报文和响应报文都经过了LVS服务器,所以LVS服务器容易成为架构中的瓶颈,这是LVS-NAT模式的缺陷,(请求报文get方式里面不含数据,而响应报文则包含大量数据。)
  3. 支持端口映射,可以修改请求报文中的目标PORT,从而实现端口映射
  4. LVS必须是Linux,RS可以是任意OS系统
  • LVS-NAT模式的工作原理

    序号 源IP 目标IP 目标端口
    1(客户端发起请求报文) CIP VIP 80
    2(LVS调度并修改报文) CIP RIP 8080
    3(RS返回响应报文) RIP CIP 8080
    4(LVS修改响应报文) VIP CIP 80
    5(客户端接收响应报文) VIP CIP 80

    LVS-NAT模式中,LVS工作在数据流入方向的PREROUTING—LVS—INPUT中间


    image-20210710124113931.png

2.2:LVS的DR模式

LVS-DR模式工作原理

LVS-DR模式解决了LVS-NAT模式中的请求和响应报文都必须经过LVS,从而导致LVS成为系统瓶颈的问题;LVS-DR模式(Direct Routing),直接路由,LVS-DR也是LVS的默认模式,也是LVS中应用最广泛的模式,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是LVS算法挑选的RS的RIP所在接口的MAC地址;源IP和源PORT都保持不变,因此LVS-DR模式不能进行端口映射,LVS-DR模式中目标IP及目标PORT都保持不变。

LVS-DR模式中工作方式如下:(不考虑中间的路由器或交换机的情况)

序号 源IP 目标IP 源MAC 目标MAC
1(客户端发起请求报文) CIP VIP CIP-MAC VIP-MAC
2(LVS修改请求报文) CIP VIP DIP-MAC RIP-MAC
3(RS返回响应报文) VIP CIP RS1(eth0)-MAC CIP-MAC
image-20210710182431408.png
image-20210710182446695.png

LVS-DR模式的特点:

  1. Director和RS都配置由VIP(对外发布的IP)

  2. 确保前端路由器将目标IP为VIP的请求报文都发往LVS,以下是确保请求报文发往LVS的方式

    • 在前端网关将VIP和LVS的MAC地址绑定在一起

    • 在RS上使用arptables工具

      arptables -A IN -d $VIP -j DROP
      arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
      
    • 在RS上修改内核参数以限制arp通告及应答级别

      arp_ignore参数常用的取值主要有0,1,2,3~8较少用到:
      0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
      1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
      2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
      3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
      4~7:保留未使用
      8:不回应所有的arp请求
      
      arp_announce参数常用的取值有0,1,2。
      0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。
      1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
      2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
      

      LVS-DR模式中修改的内核参数如下:(通常我们将lo本地回环网卡作为VIP的接口)

      #只回答目标IP地址是来访网络接口本地地址的ARP查询请求,即如果访问目标地址是lo回环网卡,则不响应,只响应目标地址是自己eth0上的报文
      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      
      #哪个网卡发起请求,则源IP就是对应发起请求的那个网卡。
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      
  3. RS的RIP可以使用私网地址,也可以使用公网地址;RIP和DIP在同一个IP网络;RIP的网关不能指向DIP,这样就可以确保响应报文不经过LVS,避免了LVS成为架构中的瓶颈

  4. RS和LVS服务器要在同一个物理网络

  5. 请求报文要经过LVS,但响应报文不经过LVS,而是由RS直接发往CIP(客户端)

  6. 不支持端口映射(因为LVS-DR模式是通过为请求报文的首部重新封装源MAC为DIP的MAC地址来实现转发的,因此端口不能修改)

  7. RS可以使用不同的OS系统

2.3:LVS工作模式总结和比较

NAT TUN DR
server any 服务器必须支持隧道 禁止ARP响应
server network private(私有) LAN/WAN LAN
服务器支持数量 low(1-20) HIGH(100) HIGH(100)
RS服务器网关 load balancer(LVS) own router(相连的路由器) own router(相连的路由器)

LVS-NAT与LVS-FULLNAT

  • 请求和响应报文都经由Director
  • lvs-nat:RIP的网关要指向DIP
  • lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

LVS-DR与LVS-TUN

  • 请求报文要经由Director,但响应报文由RS直接发往Client
  • lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
  • lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

2.4:LVS的调度算法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

分为两种:静态方法和动态方法

2.4.1:静态方法

仅根据算法本身进行调度

1、RR:roundrobin,轮询

2、WRR:Weighted RR,加权轮询

3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

2.4.2:动态算法

主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

1、LC:least connections 适用于长连接应用

Overhead=activeconns*256+inactiveconns  #活动连接*256+非活动连接

2、WLC:Weighted LC,默认调度方法

Overhead=(activeconns*256+inactiveconns)/weight #(活动连接*256+非活动连接)/权重

3、SED:Shortest Expection Delay,初始连接高权重优先

Overhead=(activeconns+1)*256/weight #(活动连接+1)*256/权重

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

7、FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度

8、OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。

一个可用的真实服务器需要同时满足以下条件:

  • 未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
  • 真实服务器当前的活动连接数量小于其权重值
  • 其权重值不为零

3:LVS相关软件

3.1:LVS程序包ipvsadm

  • Unit File: ipvsadm.service

  • 主程序:/usr/sbin/ipvsadm

    规则保存工具:/usr/sbin/ipvsadm-save

    规则重载工具:/usr/sbin/ipvsadm-restore

    配置文件:/etc/sysconfig/ipvsadm-config

    ipvs调度规则文件:/etc/sysconfig/ipvsadm

3.2:ipvsadmin命令用法

#管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] 
[--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address #删除
ipvsadm –C #清空
ipvsadm –R #重载,相当于ipvsadm-restore
ipvsadm -S [-n] #保存,相当于ipvsadm-save
#管理集群中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]  
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]

管理集群服务:增、改、删

增、修改:

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

删除:

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

service-address:

-t|u|f:

  • -t: TCP协议的端口,VIP:TCP_PORT
  • -u: UDP协议的端口,VIP:UDP_PORT
  • -f:firewall MARK,标记,一个数字

[-s scheduler]:指定集群的调度算法,默认为wlc

管理集群上的RS:增、改、删

增、改:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

删除:

ipvsadm -d -t|u|f service-address -r server-address
server-address:
     rip[:port] 如省略port,不作端口映射
选项:
     lvs类型:
         -g: gateway, dr类型,默认
         -i: ipip, tun类型
         -m: masquerade, nat类型        
     -w weight:权重

清空定义的所有内容:

ipvsadm -C

清空计数器:

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

查看:

ipvsadm -L|l [options]
  • --numeric, -n:以数字形式输出地址和端口号
  • --exact:扩展信息,精确值
  • --connection,-c:当前IPVS连接输出
  • --stats:统计信息
  • --rate :输出速率信息

ipvs规则:

/proc/net/ip_vs

ipvs连接:

/proc/net/ip_vs_conn

保存:建议保存至/etc/sysconfig/ipvsadm

ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service  #会自动保存规则至/etc/sysconfig/ipvsadm

重载:

ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
systemctl  start ipvsadm.service  #会自动加载/etc/sysconfig/ipvsadm中规则

3.3:防火墙标记

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记

--set-mark value

其中:value 可为0xffff格式,表示十六进制数字

借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度

实现方法:

在Director主机打标记:

iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER

在Director主机基于标记定义集群服务:

ipvsadm -A -f NUMBER [options]

范例:

[root@lvs ~]#iptables -t mangle -A PREROUTING -d 172.16.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10 
[root@lvs ~]#ipvsadm -C
[root@lvs ~]#ipvsadm -A -f 10 -s rr
[root@lvs ~]#ipvsadm -a -f 10 -r 10.0.0.7 -g
[root@lvs ~]#ipvsadm -a -f 10 -r 10.0.0.17 -g
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  10 rr
  -> 10.0.0.7:0                   Route   1      0          0         
  -> 10.0.0.17:0                 Route   1      0          0         
[root@lvs ~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 0000000A rr 
  -> 0A000011:0000     Route   1      0          9         
  -> 0A000007:0000     Route   1      0          9

范例:

[root@lvs ~]#ipvsadm -A -f 10 
[root@lvs ~]#ipvsadm -a -f 10 -r 10.0.0.7 -g
[root@lvs ~]#ipvsadm -a -f 10 -r 10.0.0.17 -g
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  10 wlc
  -> 10.0.0.7:0               Route   1      0          0         
  -> 10.0.0.17:0              Route   1      0          0
[root@LVS ~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP AC14C8C8:0050 rr  
  -> 0A000011:0050     Masq    1      0          0         
  -> 0A000007:0050     Masq    1      0          0 

3.4:LVS持久连接

session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑定,lvs sh算法无法实现

持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS

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

持久连接实现方式:

  • 每端口持久(PPC):每个端口定义为一个集群服务,每集群服务单独调度
  • 每防火墙标记持久(PFWMC):基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity
  • 每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式

范例:

[root@lvs ~]#ipvsadm -E -f 10 -p 
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  10 wlc persistent 360
  -> 10.0.0.7:0               Route   1      0          15        
  -> 10.0.0.17:0             Route   1      0          7         
[root@lvs ~]#ipvsadm -E -f 10 -p 3600
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  10 wlc persistent 3600
  -> 10.0.0.7:0               Route   1      0          79        
  -> 10.0.0.17:0             Route   1      0          7
[root@lvs ~]#cat /proc/net/ip_vs_conn
Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt State       Expires PEName PEData
TCP C0A80006 C816 AC100064 01BB 0A000011 01BB FIN_WAIT         67
TCP C0A80006 C812 AC100064 01BB 0A000011 01BB FIN_WAIT         67
......

[root@lvs ~]#ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual           destination
TCP 00:46 FIN_WAIT    192.168.0.6:51222  172.16.0.100:443   10.0.0.17:443
TCP 00:46 FIN_WAIT    192.168.0.6:51218  172.16.0.100:443   10.0.0.17:443
TCP 00:45 FIN_WAIT    192.168.0.6:39478  172.16.0.100:80    10.0.0.17:80
TCP 00:45 FIN_WAIT    192.168.0.6:51206  172.16.0.100:443   10.0.0.17:443
TCP 00:46 FIN_WAIT    192.168.0.6:39486  172.16.0.100:80    10.0.0.17:80
TCP 00:47 FIN_WAIT    192.168.0.6:51226  172.16.0.100:443   10.0.0.17:443
TCP 00:45 FIN_WAIT    192.168.0.6:51210  172.16.0.100:443   10.0.0.17:443
TCP 00:45 FIN_WAIT    192.168.0.6:39482  172.16.0.100:80    10.0.0.17:80

4:LVS实战案例

4.1:LVS-NAT模式案例

4.1.1:网络拓扑:

image-20210711000116720.png

4.1.2 :环境准备:

internet client 环境配置:

[email protected]:43:55: network-scripts$ cat ifcfg-eth0 
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.6
PREFIX=24
GATEWAY=192.168.0.200
[email protected]:43:57: network-scripts$ hostname -I
192.168.0.6 
[email protected]:44:01: network-scripts$ hostname -i
fe80::20c:29ff:feb7:812e%eth0 192.168.0.6
[email protected]:44:04: network-scripts$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.200   0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

LVS服务器环境:

[email protected]:33:47: network-scripts$ cat ifcfg-eth0
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.8
PREFIX=24
[email protected]:33:54: network-scripts$ cat ifcfg-eth1
NAME=eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
PREFIX=24
[email protected]:33:57: network-scripts$ hostname -I
10.0.0.8 192.168.0.200 
[email protected]:34:02: network-scripts$ hostname -i
fe80::20c:29ff:fea3:f6a4%eth1 10.0.0.8 192.168.0.200
[email protected]:34:06: network-scripts$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     102    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     103    0        0 eth1

RS1环境配置

root@RS1-23:46:37: network-scripts$ cat ifcfg-eth0 
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.9
PREFIX=24
GATEWAY=10.0.0.8
root@RS1-23:46:40: network-scripts$ hostname -I
10.0.0.9 
root@RS1-23:46:50: network-scripts$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.8        0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
root@RS1-23:47:03: network-scripts$ curl 10.0.0.9
10.0.0.9 

RS2环境配置:

[email protected]:33:18: network-scripts$ cat ifcfg-eth0 
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.10
PREFIX=24
GATEWAY=10.0.0.8
[email protected]:47:33: network-scripts$ hostname -I
10.0.0.10 
[email protected]:47:38: network-scripts$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.8        0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
[email protected]:47:42: network-scripts$ curl 10.0.0.10
10.0.0.10 

4.1.3: 配置实现:

LVS服务器配置:

  • 添加LVS规则
#添加集群,使用rr轮询算法
[email protected]:50:25: network-scripts$ ipvsadm -A -t 192.168.0.200:80 -s rr
#添加RS服务器IP地址和端口,指定适用NAT模式
[email protected]:50:43: network-scripts$ ipvsadm -a -t 192.168.0.200:80 -r 10.0.0.9:80 -m -w 1
[email protected]:53:05: network-scripts$ ipvsadm -a -t 192.168.0.200:80 -r 10.0.0.10:80 -m -w 1
  • 保存LVS规则
[email protected]:54:03: network-scripts$ ipvsadm -Sn > /etc/sysconfig/ipvsadm
[email protected]:54:21: network-scripts$ cat /etc/sysconfig/ipvsadm
-A -t 192.168.0.200:80 -s rr
-a -t 192.168.0.200:80 -r 10.0.0.9:80 -m -w 1
-a -t 192.168.0.200:80 -r 10.0.0.10:80 -m -w 1

4.1.4: 验证测试:

[email protected]:57:32: network-scripts$ while true ; do curl http://192.168.0.200/ ; sleep 1;done
10.0.0.10 
10.0.0.9 
10.0.0.10 
10.0.0.9 
10.0.0.10 
10.0.0.9 
........

4.1.5:额外配置:

#开机加载ipvs规则
[root@LVS ~]#ipvsadm -C
[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 ~]#systemctl enable --now ipvsadm.service 
[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  172.20.200.200:80 rr
  -> 10.0.0.7:80                 Masq    1      0          0         
  -> 10.0.0.17:80                Masq    1      0          0
#重新加载规则
[root@LVS ~]#ipvsadm -R < /etc/sysconfig/ipvsadm
[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  172.20.200.200:80 rr
  -> 10.0.0.7:80                 Masq    1      0          0         
  -> 10.0.0.17:80
#保存规则
[root@LVS ~]#ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@LVS ~]#cat /etc/sysconfig/ipvsadm
-A -t 172.20.200.200:80 -s rr
-a -t 172.20.200.200:80 -r 10.0.0.7:80 -m -w 1
-a -t 172.20.200.200:80 -r 10.0.0.17:80 -m -w 1 #清除规则
[root@LVS ~]#ipvsadm -C
[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@RS1-00:04:51: network-scripts$ tail -f /var/log/httpd/access_log 
192.168.0.6 - - [11/Jul/2021:00:04:57 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/7.61.1"
192.168.0.6 - - [11/Jul/2021:00:04:59 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/7.61.1"
192.168.0.6 - - [11/Jul/2021:00:05:01 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/7.61.1"
192.168.0.6 - - [11/Jul/2021:00:05:03 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/7.61.1"
#修改调度算法为 WRR 和后端服务器的端口
[root@LVS ~]#ipvsadm -E -t 172.20.200.200:80 -s wrr
[root@LVS ~]#ipvsadm -d -t 172.20.200.200:80 -r 10.0.0.7
[root@LVS ~]#ipvsadm -a -t 172.20.200.200:80 -r 10.0.0.7:8080 -m -w 3
[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  172.20.200.200:80 wrr
  -> 10.0.0.7:8080               Masq    3      0          0         
  -> 10.0.0.17:80                Masq    1      0          1

4.2:LVS-DR模式单网段案例

4.2.1:网络拓扑

4.2.2 :环境准备:

4.2.3: 配置实现:

4.2.4: 验证测试:

4.3:LVS-DR模式多网段案例

4.3.1:网络拓扑:

4.3.2 :环境准备:

4.3.3: 配置实现:

4.3.4: 验证测试:

你可能感兴趣的:(LVS:Linux Virtual Server,负载调度器)