在DR模式的群集中,LVS负载调度器作为群集的访问入口,但不作为网关使用;服务器池中的所有节点都各自接入Internet,发送给客户机的Web响应数据包不需要经过LVS负载调度器。
LVS-DR中的ARP问题分析
在LVS-DR负载均衡集群中,负载均衡与节点服务器都要配置相同的VIP地址,但是在局域网中具有相同的IP地址,势必会造成各服务器ARP广播通信的混乱。
当一个ARP广播发送到LVS-DR 集群时,因为负载均衡和节点服务器都是连接到相同的网络上的,他们都会接收到ARP广播,此时应该只有前端的负载均衡器进行响应,而其他节点服务器不应该相应ARP广播。
解决方法:
对节点服务器进行处理,使其不响应针对VIP的AIP请求,使用虚口lo:0 承载VIP 地址,设置内核参数arp_ignorre=1; 系统只响应目的ip为本地RIP的AIP请求。
先准备三台虚拟机
一个调度器,两个节点服务器
(1) 所有主机关闭防火墙和selinux
systemctl stop firewalld
iptables -F
setenforce 0
(2)配置负载调度器
配置虚拟ip地址(VIP)采用虚拟接口的方式(eno16777728),为网卡eno16777728绑定VIP地址,以便响应群集访问
yum -y install ipvsadm
ifconfig eno16777728:0 192.168.200.254 netmask 255.255.255.0
ifconfig eno16777728:0
(3)配置负载分配策略
ipvsadm -A -t 192.168.200.254:80 -s rr
ipvsadm -a -t 192.168.200.254:80 -r 192.168.200.114:80 -g -w 1
ipvsadm -a -t 192.168.200.254:80 -r 192.168.200.115:80 -g -w 1
ipvsadm -Ln
(4)配置节点服务器(两个节点服务器都安装)
使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突,除此之外,WEB服务的配置与NAT方式类似。
在每个节点服务器,同样需要有VIP地址192.168.200.254,但此地址仅用作发送WEB响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚拟接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地以避免通信混乱
ifconfig lo:0 192.168.200.254 netmask 255.255.255.255
ifconfig lo:0
route add -host 192.168.200.254 dev lo:0
(5)安装httpd,创建测试网页(两个节点服务器都安装)
yum -y install httpd
echo “1111” > /var/www/html/index.html
systemctl start httpd
(6)调整/proc响应参数
vim /etc/sysctl.conf
sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
arp_ignore=1,系统只回答目的本地IP的包,也就是对广播不作响应
arp_announce=2.系统忽略ip包的源地址,而根据主机,选择本地地址
(7)测试LVS群集