1.LVS-DR中的ARP问题
1.在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址
当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收ARP广播
只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播
2.对节点服务器进行处理,使其不响应针对VIP的ARP请求
使用虚接口lo:0承载VIP地址
设置内核参数arp_ignore=1:系统只响应目的IP为ARP请求
3.RealServer返回报文(源IP是VIP)经路由转发,重新封装报文时,需要先获取路由器的MAC地址
发送ARP请求时,Linux默认使用IP包的源IP地址(即IPVIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址
如:ens33接口
源IP | VIP |
---|---|
源MAC | RealServer的MAC |
目的IP | 路由器的IP |
目的MAC | ? |
4.路由器收到ARP请求后,将更新ARP表项
原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址
5.问题
路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效
解决方法
对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
2.解决ARP的两个问题的设置方法
修改/etc/sysctl.conf文件
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
3.LVS负载均衡群集(直连路由模式LVS-DR)
LVS:192.168.100.12
web1:192.168.100.13
web2:192.168.100.14
nfs:192.168.100.15
1.配置调度服务器
[root@server1 ~]# modprobe ip_vs //加载ip_vs模块
[root@server1 ~]# cat /proc/net/ip_vs //查看版本信息
IP Virtual Server version 1.2.1 (size=4096)
[root@server1 ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm //安装ipvsadm
[root@server1 ~]# vi dr.sh
#!/bin/bash
#
ifconfig ens33:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up
route add -host 192.168.100.100 dev ens33:0
ipvsadm -C
ipvsadm -A -t 192.168.100.100:80 -s rr
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.13:80 -g
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.14:80 -g
ipvsadm -Ln
[root@server1 ~]# sh dr.sh
2.配置web服务器
web1
[root@server1 ~]# yum -y install httpd
[root@server1 ~]# vi /etc/httpd/conf/httpd.conf
ServerName aa
配置默认主页
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# echo "<h1>serveraa</h1>" > index.html
或者
mount 192.168.100.15:/opt/web1 /var/www/html
vi /etc/fstab
192.168.100.15:/opt/web1/ /var/www/html/ nfs defaults,_netdev 0 0
systemctl restart httpd
windows验证http服务
http://192.168.100.13
vi web.sh
#!/bin/bash
#web1
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up
route add -host 192.168.100.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null
web2
[root@server1 ~]# yum -y install httpd
[root@server1 ~]# vi /etc/httpd/conf/httpd.conf
ServerName ab
配置默认主页
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# echo "<h1>serverab</h1>" > index.html
或者
mount 192.168.100.15:/opt/web1 /var/www/html
vi /etc/fstab
192.168.100.15:/opt/web1/ /var/www/html/ nfs defaults,_netdev 0 0
systemctl restart httpd
windows验证http服务
http://192.168.100.14
vi web.sh
#!/bin/bash
#web1
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up
route add -host 192.168.100.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null
3.配置nfs
[root@server1 ~]# yum -y install nfs-utils rpcbind
[root@server1 ~]# systemctl start nfs-utils
[root@server1 ~]# systemctl start rpcbind
[root@server1 ~]# mkdir /opt/web1 /opt/web2
[root@server1 ~]# echo "this is server1" > /opt/web1/index.html
[root@server1 ~]# echo "this is server2" > /opt/web2/index.html
[root@server1 ~]# vi /etc/exports
/opt/web1 192.168.100.0/24 (rw,sync)
/opt/web2 192.168.100.0/24 (rw,sync)
验证测试:http://192.168.100.100 (多开几个任务)