有关于LVS负载均衡群集的相关概念可以参考博文:LVS负载均衡群集详解
LVS负载均衡模式—DR模式:lvs负载调度器作为群集的访问入口,但不作为网关使用,服务器池中的所有节点都各自接入internet,发送给客户机(互联网)的web响应数据包不需要经过lvs负载调度器。
LVS负载均衡模式—DR模式:
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为 超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-DR方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个 Virtual Server能达到1G的吞吐量。甚至更高;
不足:但是,这种方式需要所有的DIR和RIP都在同一广播域;不支持异地容灾。
总结:LVS-DR是三种模式中性能最高的一种模式,比LVS-NAT模式下负载的RS serve更多,通常在100台左右,对网络环境要求更高,也是日常应用的最多的一种工作模式。
由于实验环境,没有必要弄那么大型的拓补图,2个Web节点服务跟10个Web节点服务器意思是一样的,而且配置方法是一样的,所以实验环境就部署两台Web节点服务器。实验拓补图如下:
LVS负载均衡模式—DR模式特点:
- 各Web节点服务器必须与 LVS负载调度器在同一个网络中(相同的广播域);
- LVS负载调度器的 RIP 可以使用私有地址,也可以使用公网地址,以方便配置;
- 不支持支持端口映射;
- LVS负载调度器可以使用必须为uninx操作系统(OS);且LVS负载调度器需要仰制arp,需要在loopback配置vip;
- LVS负载调度器仅负责处理入站请求,响应报文由 Web节点服务器直接发往客户端;
- Web节点服务器不能将网关指向 DIP,而直接使用前端网关响应请求报文;
为什么需要LVS负载调度器的VIP跟Web节点服务器在同一个网段?
答:DR 模式因为LVS负载调度器只修改 package的 MAC地址通过ARP广播的形势找到Web节点服务器,所以 要求LVS负载调度器的VIP 和Web节点服务器的IP 必须在同一个网段内,也就是在挂载VIP 时先确认LVS的工作模式,如果是DR模式需要先确认这个IP 是否能挂在这个LVS下面。
内核重定向:在lvs负载调度器和各节点需要共用VIP地址,并且应该关闭linux内核重定向参数响应。怎么实现?
答:需要路由器向源发送ICMP重定向的情况有两种:
示意图如下:
过程分析如下:
1.server2如果要与internet通讯,首先是要把报文发送给server1的,因为server2的网关指向server1的;
2.server1收到报文并检查它的路由表,发现router是发送改报文的下一跳。当它把报文发送给router时,server1检测到这个报文的发送出去的接口与接收到的接口是相同的,这样ICMP重定向就触发了;
3.server1认为server2应该把默认路由指向router,所以就发送ICMP重定向报文给server2;
在真实的节点服务器上要给lo:0设置vip,并调整内核的arp响应参数以阻止更新VIP的mac地址,避免发生冲突,如何实现?
示意图如下:
在配置LVS负载均衡架构的时候需要在Web节点服务器上抑制ARP,
具体是arp_ignore=1,arp_announce=2
arp_ignore: (回应ARP),选项如下:
0:回应任何网口上收到的对任何本机IP地址的ARP查询请求(默认)
1:只回应Target IP是接收网口的IP的ARP查询请求
2:只回应Target IP是接收网口的IP的ARP查询请求,且Sender IP必须与该网口属于同一网段
4-7:保留未使用
8:不回应所有的arp查询
arp_announce: (宣告ARP),选项如下:
0:使用发送(或转发)的数据包的源IP作为发送ARP请求的Sender IP(默认) ;(可使用ping -I 验证)
1:IP数据包的目的IP属于本地某个接口的网段时,Sender IP则使用IP数据包源IP,不属于则按2处理;
2:忽略数据包的源IP,使用能与目标主机会话的最佳地址来作为发送ARP的Sender IP,优先选择对外接口的主IP;(loopback不是对外接口)
注:ARP表没有网关对应的条目时,在发送IP数据包前会触发 arp_announce;
Sender MAC跟系统无关,Sender MAC=源MAC,源MAC由物理地址决定,网络非法进入除外。
关于lvs-dr模式下一些疑问:
LVS负载均衡群集DR模式如何处理请求报文的,会修改IP包内容吗?
答:DR模式的LVS负载均衡群集本身不会关心IP层以上的信息,即使是端口号也是tcp/ip协议栈去判断是否正确,DR模式的LVS负载均衡群集本身主要做这么几个事:
①接收client的请求,根据你设定的负载均衡算法选取一台Web节点服务器的ip;
②以选取的这个ip对应的mac地址作为目标mac,然后重新将IP包封装成帧转发给这台Web节点服务器;
③在hash table中记录连接信息。
DR模式的LVS负载均衡群集做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少,数据包、数据帧的大致流向是这样的:client –> LVS –> Web 节点服务器 –> client
Web节点服务器为什么要在lo接口上配置VIP?在出口网卡上配置VIP可以吗?
答:既然要让Web节点服务器能够处理目标地址为VIP的IP包,首先必须要让Web节点服务器能接收到这个包。在lo网卡上配置VIP能够完成接收包并将结果返回client。不可以将VIP设置在出口网卡上,否则会响应客户端的ARP request,造成ARP紊乱,以至于整个LVS群集环境都不能正常工作。
Web节点服务器为什么要抑制ARP?
答:对所有的物理网卡设置ARP仰制。对仰制所有的物理网卡设置ARP抑制是为了让客户端发送的请求顺利转交给LVS负载调度器以及防止整个LVS环境ARP混乱,不然容易导致整个lvs不能工作。
DR模式的LVS负载调度器与Web节点服务器为什么要在同一网段中?
答:DR模式的LVS负载调度器是在数据链路层来实现的,即VIP必须能够接受LVS负载调度器的arp请求,如果不在同一网段则会隔离arp,这样arp请求就不能转发到指定的Web节点服务器上,所以LVS负载调度器必须和Web节点服务器在同一网段里面。
为什么LVS负载调度器上ens33接口除了VIP另外还要配一个IP(即VIP)?
答:如果是用了keepalived等工具做HA或者LB,则在健康检查时需要用到VIP。 没有健康检查机制的HA或者LB则没有存在的实际意义。
DR模式的LVS负载调度器路由转发功能需要开启吗?
答:不需要。因为LVS负载调度器跟Web节点服务器是同一个网段,无需开启转发。
LVS负载调度器的VIP的子网掩码一定要是255.255.255.255吗?
DR模式的LVS负载调度器里,LVS负载调度器的VIP的子网掩码没必要设置为255.255.255.255,LVS负载调度器的VIP本来就是要像正常的IP地址一样对外通告的,不要搞得这么特殊。
LVS负载均衡群集的DR模式原理非常复杂,但实现过程还是很简单的。
采用虚接口的方式(ens33:0)为ens33网卡绑定VIP地址,以便响应群集访问。配置如下:
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
自行修改网卡配置文件
[root@localhost ~]# ifconfig ens33
ens33: flags=4163 mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a5f4:262:9bbe:d04 prefixlen 64 scopeid 0x20
ether 00:0c:29:00:11:89 txqueuelen 1000 (Ethernet)
RX packets 2 bytes 501 (501.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35 bytes 4894 (4.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifconfig ens33:0
ens33:0: flags=4163 mtu 1500
inet 192.168.1.254 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:00:11:89 txqueuelen 1000 (Ethernet)
对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应。配置如下:
[root@localhost ~]# vim /etc/sysctl.conf
……………… //省略部分内容,添加以下内容
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# ipvsadm -C
[root@localhost ~]# ipvsadm -A -t 192.168.1.254:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.1.254:80 -r 192.168.1.2 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.1.254:80 -r 192.168.1.3 -g -w 1
[root@localhost ~]# ipvsadm-save
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.1.2:http -g -w 1
-a -t localhost.localdomain:http -r 192.168.1.3:http -g -w 1
使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突。除此之外,Web节点服务器的配置与NAT模式类似。
两台服务器配置内容一样!这里就拿一台Web节点服务器举例。
在每个Web节点服务器,同样需要具有VIP地址192.168.1.254,但此地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口lo:0来承担VIP地址,并为本机添加一条默认路由记录,将访问VIP的数据限制在本地,以避免通信混乱。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.254
NETMASK=255.255.255.255 //掩码必须全为1
ONBOOT=yes
NAME=loopback:0
[root@localhost network-scripts]# ifdown lo;ifup lo
[root@localhost network-scripts]# ifconfig lo:0
lo:0: flags=73 mtu 65536
inet 192.168.1.254 netmask 255.255.255.255
loop txqueuelen 1 (Local Loopback)
[root@localhost ~]# vim /etc/rc.local //永久添加一条路由信息
……………… //省略部分内容,添加以下内容
/sbin/route add -host 192.168.1.254 dev lo:0
[root@localhost ~]# route add -host 192.168.1.254 dev lo:0 //临时添加一条路由信息
[root@localhost ~]# vim /etc/sysctl.conf
……………… //省略部分内容,添加以下内容
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
[root@localhost ~]# 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
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.1.4:/var/www/html /var/www/html
[root@localhost ~]# systemctl start httpd
客户机访问192.168.1.254,在LVS群集服务器上查看效果!
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.254:80 rr
-> 192.168.1.2:80 Route 1 1 0
-> 192.168.1.3:80 Route 1 1 0
效果实现,实验已完成!!!
———————— 本文至此结束,感谢阅读 ————————