现在的位置: 首页 > 综合 > 正文

负载均衡lvs、keepalived简介,DR实现原理

2018年10月06日 ⁄ 综合 ⁄ 共 1777字 ⁄ 字号 评论关闭

一、简介

1.1 LVS

        LVS是Linux Virtual Server的简写,是用来实现服务器的负载均衡调度。

        LVS是一个内核模块。

        官网:http://www.linuxvirtualserver.org/

1.2 ipvsadm

        ipvsadm是LVS内核模块的配置管理工具。

1.3 keepalived

        keepalived,是用来实现双机热备。

        keepalived监测服务器的状态,如果一台web服务器出现故障,keepalived将其从服务器集群中剔除;当web服务器正常后,keepalived自动将其加入到服务器集群中。这些工作全部自动完成,不需要人工干预。
       keepalived可以工作在3、4、7层,即IP层、TCP层、应用层。

二、LVS

2.1 LVS工作方式

        1. NAT (http://www.linuxvirtualserver.org/VS-NAT.html)

         请求包、响应包都经过DR,瓶颈在DR。

        2. DR(Direct Routing)(http://www.linuxvirtualserver.org/VS-DRouting.html)

        只有请求包经过DR,响应包直接由RS发给用户。

        DR、RS全部是公网IP。

2.2 DR方式实现原理

       1. 假设一个环境:

                DR的IP:202.106.1.100(虚拟IP)

                RS的IP:192.168.1.1

        2.请求响应过程

                a) 用户发送一个请求到DR,DR根据算法确定该请求应该调度到RS;

                b) DR通过ARP请求找到RS的IP192.168.1.1对应的MAC地址,即可通过2层将该包交给RS;

                c) 该请求在RS上解包后,发现IP是DR的IP 202.106.1.100,不会交付给上层?(lo回环上绑定DR的虚拟IP即可)

                d) RS处理完请求,发送响应包(此时源IP是DR的IP 202.106.1.100,目的IP是用户的IP),通过lo发送(默认从哪个口进入,从哪个口发出),会发送给自己,造成死循环,包发不出去

        3.现在有2个问题

                A) RS的lo上绑定DR的虚拟IP,在通过ARP查找虚拟IP的MAC时,会混乱(有多个主机发回响应,DR、RS都有该IP)。

                B) 响应包时,通过lo发送,会发送给自己造成死循环,发不出去。

         4. 解决办法

                A) 将arp_ignore 设置为1(默认为0)。指定从哪个口进。防止ARP查找虚拟IP的MAC时,产生混乱(有多个虚拟IP)。

                B) 将arp_announce设置为2(默认为0)。指定从哪个口出。

2.3 arp_ignore与arp_announce

        1. 假设一个环境

                网关IP:192.168.0.1

                DR的IP:202.106.1.100(虚拟IP)

                RS的IP:192.168.1.1(eth0)、10.10.1.1(eth1)、202.106.1.100(lo) 且只有eth0上有网线。

        2. arp_ignore(默认为0)

                当arp_ignore为0时,用ARP查询192.168.1.1、10.10.1.1、202.106.1.100的MAC时,RS的eth0都会给出响应。

                当arp_ignore为1时,只有用ARP查询192.168.1.1的MAC时,RS的eth0才会给出响应。

        3. arp_announce(默认为0)

                当arp_ignore为0时,从哪个口进入的请求包,其响应包从哪个口出。

                当arp_ignore为2时,忽略数据包中的源IP,并尝试选择能与该地址通信的本地地址。(ARP找到网关192.168.0.1的MAC,直接将数据包交给网关)

参考资料:

        arp_ignore与arp_announce内核参数:http://suchalin.blog.163.com/blog/static/55304677201022643431355/

抱歉!评论已关闭.