LVS四层架构部署
LVS集群的类型
- lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr: 操纵封装新的MAC地址
- lvs-tun: 在原请求IP报文之外新加一个IP首部
- lvs-fullnat: 修改请求报文的源和目标IP
LVS-NAT
工作流程
可以理解nat模式为在vs上进行了目标IP和端口号的转换过程,
请求访问时将目标IP由VIP转换为RIP 响应访问时将源IP由RIP转为VIP
部署NAT模式集群案例
网络拓扑如下
注:
Client网关:192.168.84.100
RS1、RS2网关:172.25.254.100
基础网络IP配置略
DS配置
安装ipvsadm、设置调度规则
[root@lsv ~]# yum install -y ipvsadm
[root@lsv ~]# ipvsadm -A -t 172.25.254.50:80 -s rr
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.10:80 -m
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.20:80 -m
[root@lsv ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
开启内核路由
[root@lsv ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lsv~]# sysctl --systemctl
RS相关配置:
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd
Client进行测试:
[root@client ~]# for i in {1..10}; do curl 172.25.254.50; done
LVS-DR
工作流程
直接路由,LVS默认模式,应用最广泛,通过为请求报文**重新封装一个MAC首部**进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变
LVS-DR模式的工作特点:
1、DS作为集群访问入口,但不作为网关
2、DS和RS需处于同一网络,RIP的网关不能指向DIP,以确保响应报文无需经过DS
3、为了响应整个集群的访问,DS和RS需配置相同的VIP
4、请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
5、主要基于数据链路层,不支持端口映射
数据传输过程:
1、客户机发出服务请求
源IP:CIP 目IP:VIP 源MAC:CIP-MAC 目MAC:VIP-MAC
2、路由器作为网关接收到了客户机的请求,查看源目IP地址后,对照自身路由表,从与DS相对接的接口发出
源IP:CIP 目IP:VIP 源MAC:路由器MAC 目MAC:VIP-MAC
3、DS接收到数据请求后,查看内核空间(对比源目IP地址),目标IP地址为自己的VIP,随后IPVS对比数据包请求服务是否为集群服务
源IP:CIP 目IP:VIP 源MAC:DIP-MAC 目MAC:RIP-MAC
4、RS接收到数据报文,目MAC为自身,接收数据报文,后做出数据响应,重新封装数据包
源IP:VIP 目IP:CIP 源MAC:RIP-MAC 目MAC:CIP-MAC
注:
问题1:lvs集群中使用相同的vip地址,且在同一局域网内,会产生arp响应冲突
解决方法:只让负载均衡器(DS)进行arp响应,其余节点服务器(RS)不响应
问题2:返回报文时使用VIP作为源IP ,(网关设备原本VIP对应DS的MAC地址,现在要被更新为RS的MAC地址),导致网关设备ARP缓存表紊乱
解决方法:更改节点服务器(RS)内核参数,源IP地址更改为选择发送接口(物理网卡)的IP地址
部署DR模式集群案例
实验拓扑:
基础网络配置跳过
注:
Client的网关为192.168.84.100
DS、RS1、RS2的网关为:172.25.254.100
注:DS、RS1、RS2的VIP地址相同将其配置在lo环回接口上,具体配置如下:
ip address add 172.25.254.50/32 dev lo
RS1、RS2(方便后续实验效果展示)
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd
限制响应和通告
[root@web1 ~]# vim /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
[root@web1 ~]# sysctl -p
DS上操作:安装ipvsadm,并配置ipvsadm调度规则
[root@lsv ~]# yum install -y ipvsadm
[root@lsv ~]# ipvsadm -A -t 172.25.254.50:80 -s wrr
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.10:80 -g -w 2
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.20:80 -g -w 1
[root@lsv ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
router上操作:开启内核路由
[root@router1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@router1 ~]# sysctl --systemctl
client进行测试,效果如下图所示:
[root@client ~]# for i in {1..10}; do curl 172.25.254.50; done