Lvs群集DR模式处理请求流程为:客户端访问vip发送请求到调度器,调度器根据算法分配到后方节点,然后由后方节点直接吧请求结果反馈给客户。
调度器在收到请求时根据算法发送到后方节点,在发送时调度器只修改目标mac地址,别的不动
那么问题就产生了客户端发送请求时访问的是调度器vip的地址,后方节点怎么能处理呢?
所以要在每个节点的回环接口上设置一个一模一样的vip。(只能设置在回环几口上lo那个接口)
那么问题又来了每个上面都有vip当路由器收到这个请求后到底给谁呢给调度器,还是给后方节点,因为每个上面都有这个ip地址。
所以这就需要我们手动设置一下内核参数,调整arp请求使后方节点不接收针对vip的arp请求,由前端的调度器处理。
当后端节点返回给客户数据时,需要经过路由器转发出去,后方节点使用源ip(vip地址),以及后方节点的mac地址发送到路由以后,路由器看到原来记录的vip地址与mac地址与这次的不一样会更新arp表,更新完以后当再有客户发送来请求时,会根据更改后的arp表直接发送给后方的节点二跳过调度器,这样调度器就是失效了如何解决呢?
所以这时还需要调整内核参数对节点服务器进行修改:系统不使用源ip(vip)进行发送请求完以后的数据而是采用本地的IP地址进行发送。这样路由器的arp表就不会进行更新了。
好了说了这么多到底如何进行调整呢?
在节点服务器的内核配置文件中添加下面四行即可
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@bogon ~]# vim /etc/sysctl.conf