-
LVS-DR负载均衡
-
LVS—DR工作模式
-
原理
-
客户端访问调度器的VIP地址,在路由器上应该设置VIP跟调度器的一对一的映射关系,调度器根据调度算法将该请求“调度“到后端真实服务器,真实服务器处理完毕后直接将处理后的应答报文发送给路由器,不经过调度器,这样调度器的压力就降低了一半,可以支持的节点也就增加了。
-
映射关系:访问VIP的请求的下一跳应该是调度器的IP地址。
-
-
产生的问题
-
arp请求出现一个IP对应多个mac地址的问题
-
当网关第一次做arp请求广播寻找VIP所在的mac地址,但是因为调度器和网站都承载了VIP,本应该只有调度器做应答,但是这样都做了应答,那么网关在接收到同一个IP的新的mac地址后,就会更新arp表,这样下次请求,网关就不会将请求转发给调度器,这就不对了。
-
解决办法:
-
在web服务器上把承载VIP的设备,让它忽略arp请求,在内核文件中添加arp_ignore=1
-
arp_ignore=1 :系统只会响应当前网卡的arp请求(系统只会响应哪些接收到arp请求的接口上配置的”本地”IP地址的arp请求,如果一个arp请求是通过eth0接口接收到的,但请求的地址是在eth1上配置的,那么系统就不会做出响应)例本实验中web服务器的网卡ip与lo承载的VIP.
-
当前网卡,实际承载流量传输的IP地址
-
-
-
-
-
路由器arp混乱的问题,也会出现一个IP地址对应多个mac地址。
-
当web服务器出完请求后,需要做应答,应答报文中,源IP地址应该是VIP,经过负载均衡之后每一台web服务器都会通过VIP去做应答,这样对于网关来说同一个IP对应了多个mac地址,这样就造成了路由器arp记录混乱的问题。
-
解决办法
-
arp_announce=2:该参数的目的是为了让承载的VIP不对应答做响应。
-
当设置该参数时,web发送arp请求建立与网关的连接时,总会选择真实承载网卡流量的IP地址作为发送方的IP地址。
-
-
-
-
DR直接路由的目的
-
当web服务器做应答时,必须用vip做为源IP来应答,虽然在web服务器上承载了两个IP,但是如果不添加任何策略,那么将无法决定应答报文中使用VIP作为源IP地址。
-
解决办法
-
route add -host 192.168.10.172 dev lo:0
-
添加路由策略,将去往172的数据包的封装,用lo:0所承载的VIP来做封装。
-
-
-
-
-
-
实验操作
-
拓扑
-
为了方便实验,客户端与群集网络之间应该有一个路由器,路由器上应该配置IP与调度器一对一的映射关系,此拓扑省略了该过程。
-
调度器服务器
-
添加一个子接口作为承载VIP的设备
-
cp ifcfg-ens33 ifcfg-ens33:0
-
-
调整内核参数,该参数是为了不让调度器发送icmp重定向消息,该消息的目的是为了当发现一个更加短,有效的路径后,它会通知数据包的原始发送者,这样更新了路由线路后,就会绕过调度器,这是不被允许的。
-
net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 systctl -p
-
-
安装ipvsadm并添加策略
-
ipvsadm -A -t 192.168.10.172:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1 [root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 1
-
-
关闭内核安全机制与防火墙
-
-
节点服务器(web服务器)
-
关闭内核安全机制与防火墙
-
配置虚拟IP地址
-
在lo网卡上设置子接口
-
cp ifcfg-lo ifcfg-lo:0
-
DEVICE=lo:0 NETMASK=255.255.255.255 IPADDR=192.168.10.172 ONBOOT=yes
-
当一个子网掩码为32后,其广播,网络,主机地址都只有一个,自成一个网段,这样的情况下,即使同一个局域网内有两个相同的32的子网掩码,并且IP也相同也不会出现地址冲突。
-
32的子网掩码通常只用来做封装数据包,或用改地址做为管理,并不会实际参与到通信过程中。
-
-
-
-
-
做DR直接路由
-
route add -host 192.168.10.172 dev lo:0
-
-
调整内核参数
-
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
-
-
之后安装网站软件,创建测试页面进行测试
-
-
-