LVS:Linux Virtual Server,负载调度器,内核集成,工作在传输层

lvs群集的工作模式:

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr:操纵封装新的MAC地址
  • lvs-tun:在原请求IP报文之外新加一个IP首部
  • lvs-fullnat:修改请求报文的源和目标IP

LVS调度算法总结:

静态方法:

  1. RR:roundrobin,轮询,较常用
  2. WRR:Weighted RR,加权轮询,较常用
  3. SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定,缺点负载不均衡
  4. DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

动态方法:

  1. LC:least connections 适用于长连接应用
  2. WLC:Weighted LC,默认调度方法,较常用
  3. ED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
  4. NQ:Never Queue,第一轮均匀分配,后续SED
  5. LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
  6. LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS,,实现Web Cache等

内核版本 4.15 版本后新增调度算法:FO和OVF

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

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

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

LVS的跨网络DR实现

例:

网络拓扑图 alt

#rs1
yum install httpd -y
echo 192.168.88.8 > /var/www/html/index.html
systemctl enable --now httpd
ss -lntup

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.8
PREFIX=24
GATEWAY=192.168.88.254  #指向路由

nmcli c reload ifcfg-ens33
nmcli c up ens33

#限制响应、通告
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

#添加vip
ip a  a 172.16.1.100/32 dev lo


#rs2

yum install httpd -y
echo 192.168.88.18 > /var/www/html/index.html
systemctl enable --now httpd
ss -lntup

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.18
PREFIX=24
GATEWAY=192.168.88.254

nmcli c reload ifcfg-ens33
nmcli c up ens33
ip route

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

ip a  a 172.16.1.100/32 dev lo

#lvs

yum install ipvsadm -y

vim /etc/sysconfig/network-scripts/ifcfg-ens33

nmcli c reload ifcfg-ens33

nmcli c up ens33

ip a  a 172.16.1.100/32 dev lo

#添加lvs规则
ipvsadm -A -t 172.16.1.100:80 -s wrr
ipvsadm -a -t 172.16.1.100:80 -r 192.168.88.8 -g
ipvsadm -a -t 172.16.1.100:80 -r 192.168.88.18 -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
TCP  172.16.1.100:80 wrr
  -> 192.168.88.8:80              Route   1      0          0
  -> 192.168.88.18:80             Route   1      0          0
  
  
#route
nmcli c up ens33
nmcli device reapply ens33
nmcli device connect ens33
nmcli c reload ifcfg-ens33
nmcli c up ens33
#开启转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
ip a  a 172.16.1.254/24 dev ens33 label ens33:1

#client
root@ub18:~# while true ;  do curl 172.16.1.100 ; sleep 1  ;done
192.168.88.18
192.168.88.8
192.168.88.18
192.168.88.8
192.168.88.18
192.168.88.8
192.168.88.18
192.168.88.8
192.168.88.18
192.168.88.8
^C