一.LVS-DR工作原理
1)LVS-DR数据包流向分析
- 为方便进行原理分析,将CIient与群集机器放在同一网络中,数据包流经的路线为1-2-3-4
1.Client向目标VIP发出请求,Director(负载均衡器)接收
- IP包头及数据帧头信息
2.Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送
- IP包头及数据帧头信息
3.RealServer 1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP),于是处理这个报文。随后重新封装报文,将响应报文通过l0 接口传送给物理网卡然后向外发出。
- IP包头及数据帧头信息
4.Client将收到回复报文。Client认为得到正常的服务而不会知道是哪一台服务器处理的
- 注意:如果跨网段,则报文通过路由器经由Internet返回给用户
2) LVS-DR中的ARP问题
1.在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址
2.对节点服务器进行处理,使其不响应针对VIP的ARP请求
- 使用虚接口lo:0承载VIP地址
- 设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求
3.RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时需要先获取路由器的MAC地址;发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址
- 如:ens33接口
4.路由器收到ARP请求后,将更新ARP表项;原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址
5.解决方法
- 对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
二.LVS-DR部署实验
准备过程:准备四台服务器
作用 | IP地址 |
nfs共享存储存储 | 192.168.86.140 |
web1 | 192.168.86.110 |
web2 | 192.168.86.20 |
调度器 | 192.168.86.100 |
1.初始化操作
systemctl disable --now firewalld
setenforce 0 #关闭防火墙
2.部署nfs共享存储(192.168.86.140)
1)安装rpcbind 和 nfs-utils工具
2)创建共享目录并添加两个节点
3)添加共享配置
vim /etc/exports
4)启动rpcbind 和 nfs服务
3.部署web服务器
- web1 IP地址:192.168.86.110
- web2 IP地址:192.168.86.20
1)启动rpcbind服务,并挂载共享目录(xy101)
2)安装Nginx服务(两台web服务器都需安装)
yum install -y nginx
3)挂载nfs存储文件到web1服务器
4)准备网卡的虚接口文件并修改配置
cd /etc/sysconfig/network-scripts/
vim ifcfg-lo:0
systemctl restart network #修改完配置后重启网卡
systemctl restart nginx #并重启nginx服务
5)修改内核参数
vim /etc/sysctl.conf
6)添加路由
#web2服务器进行web1服务器同样操作(挂载xy102目录)
4.部署调度器(192.168.86.100)
1)安装ipvsadm工具
yum install -y ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm
2)添加 ip_vs模块
modprobe ip_vs
3)物理网卡的虚接口上添加配置
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-ens33:0
vim ifcfg-ens33:0
4)修改内核参数
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
5)添加规则
ipvsadm -A -t 'vip地址':80 -s rr
ipvsadm -a -t 'vip地址':80 -r web1地址:80 -g
ipvsadm -a -t 'vip地址':80 -r web2地址:80 -g
ipvsadm-save -n > /opt/ipvsadm.bak #保存规格