目录
一、准备工作
首先准备三台虚拟机,分别作为DR,RS-1,RS-2
DR:LVS负载均衡节点机,该机器需要手动安装ipvsadm包,yum安装即可。
RS-1:模拟后端服务机1,RealServer-1,配置Nginx服务,使用Nginx作为模拟器。关闭防火墙。
RS-2:模拟后端服务机2,RealServer-2,配置Nginx服务,使用Nginx作为模拟器。关闭防火墙。
虚拟机名称 | IP地址 | 角色 | 虚拟IP配置网卡 |
DR | 192.168.52.133 | IPVS负载均衡 | ens33:192.168.52.10/24 |
RS-1 | 192.168.52.128 | Nginx-1 | lo:192.168.52.10/32 |
RS-2 | 192.168.52.131 | Nginx-2 | lo:192.168.52.10/32 |
二、配置虚拟机
DR虚拟机:
1.添加服务IP到网卡。
ip addr add 192.168.52.10/24 dev ens33
#此处配置VIP,一定要配置到ens网卡上,就是现在正在使用的网卡,并且掩码配置为当前网络同样的。
坑点:这个地方,网上教程说DR服务器要配置32位掩码,这里是错的,要配置和当前IP相同的即可,后端服务机配置的是32位!!!切记!
2.手动新建ipvsadm配置文件
首先启动ipvsadm这个服务,启动时需要手动添加ipvsadm这个文件。不然会提示报错。
ipvsadm --save > /etc/sysconfig/ipvsadm
3.添加虚拟IP
ipvsadm -A -t 192.168.52.10:80 -s rr
-A:添加
-t:使用tcp协议
-s:负载策略,rr为轮询。
4.配置后端服务主机IP
ipvsadm -a -t 192.168.52.10:80 -r 192.168.52.128 -g # RealServer-1
ipvsadm -a -t 192.168.52.10:80 -r 192.168.52.131 -g # RealServer-2
ipvsadm --save > /etc/sysconfig/ipvsadm # 配置完后保存下配置
可使用如下命令进行检查:
ipvsadm -ln --stats
ipvsadm -ln --stats
注:我这里有数据,因为我是后截图补上的,第一次配置应该都是0
DR部分设置完毕!
三、配置RS-1,RS-2 服务器
以RealServer-1为例,RealServer-2做同样步骤。
注:此处Nginx服务配置省略,也可换成其他服务进行试验。
添加虚拟IP至lo网卡
ip addr add 192.168.52.10/32 dev lo
注意:此处IP和DR机设置的VIP一致,掩码一定是32位,网卡一定是lo!
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # ARP屏蔽,忽略ARP,保持ARP静默
echo 1 > /proc/sys/net/ipv4/ip_forward # 开启路由转发
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # 精确IP地址回包,RS直接发送给Client
设置完毕即可!
四、路由测试
打开同一网段内其他主机,注意不能是DR,RS-1,RS-2这三台,一定是单独用另一台主机进行访问。
curl 192.168.52.10
测试没问题。成功!
五、原理解析
该方案为LVS负载均衡中DR模式,采用三角路由方案。三个节点均配置相同VIP,后端RS服务器保持ARP静默,即通过IP请求时只能发现DR服务器的Mac地址做出解析,从而隐层了RS服务器,再由DR服务器进行轮询转发,当RS服务器接到请求后,由于DR服务器改写了IP报头数据,源地址仍然指向用户,可以直接进行返程,绕过了DR。
六、问题汇总
1.配置后可能会出现DR服务器,VIP被无缘无故丢失情况,造成无法路由,需要手动重新添加IP地址即可。