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
- 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才能正确识别响应报文。
- 由于LVS-NAT模式中,请求报文和响应报文都经过了LVS服务器,所以LVS服务器容易成为架构中的瓶颈,这是LVS-NAT模式的缺陷,(请求报文get方式里面不含数据,而响应报文则包含大量数据。)
- 支持端口映射,可以修改请求报文中的目标PORT,从而实现端口映射
- 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中间
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 |
LVS-DR模式的特点:
Director和RS都配置由VIP(对外发布的IP)
-
确保前端路由器将目标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
RS的RIP可以使用私网地址,也可以使用公网地址;RIP和DIP在同一个IP网络;RIP的网关不能指向DIP,这样就可以确保响应报文不经过LVS,避免了LVS成为架构中的瓶颈
RS和LVS服务器要在同一个物理网络
请求报文要经过LVS,但响应报文不经过LVS,而是由RS直接发往CIP(客户端)
不支持端口映射(因为LVS-DR模式是通过为请求报文的首部重新封装源MAC为DIP的MAC地址来实现转发的,因此端口不能修改)
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:网络拓扑:
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