负载均衡LVS原理及其应用

一、LB常用解决方案

    1. 硬件负载均衡解决方案: 

        F5公司: BIG-IP

        Citrix公司: Netscaler

        A10公司: A10

        Array 

        Redware

    2. Linux: LVS

        1. 完成Linux Virtual Server作者 (章文嵩,花名段正明)

        2. ipvs工作于netfilter框架上

        3. ipvs: 框架,工作在内核中,工作在input链上,需要依赖于规则完成转发。 如果发现发往本机INPUT链的请求,如果能匹配到集群规则,直接转发至post-routing链发出主机。 

        4. 规则: 简单来说就是把ip加端口定义为ipvs集群服务,ipvs会为此请求定义一个或多个后端服务

                        目标地址未必会改,但是报文会被强行转发给后端的服务器。 

        5. ipvs组件: ipvsadm(用户空间,用来编写规则) + ipvs(内核空间) 

        6. ipvs工作在第四层: 

            1) 成为四层交换、四层路由。 做第四层转发。

            2) 只能基于ip和port转发,无法在应用层,session级别转发

            3) 不用到达应用层空间,就能转发

        7. lvs 性能很好,但是由于只第四层,不能到用户空间,因此不能进行更加精细的控制。 在精细控制方面,haproxy和Ngnix可以更好的实现。 

        8. lvs通常作为总入口,更精细化的切割可能使用,haproxy或者Nginx实现 

        9. 报文的信息流: CIP<–>VIP–DIP<–>RIP

            1) CIP: Client ip 

            2) VIP: virtual ip 

            3) DIP: Director IP 

            4) RIP: Real server Ip 

        客户端请求,被VIP端口接收后,从DIP接口被转发出去,并转发至RIP

二、LVS类型: 

    1. NAT(dNAT): 

        访问过程如下

            1) CIP访问VIP 

            2) VIP接收报文后,做dNAT,指向某一个RIP 

            3) RIP拿到接收到报文后进行回应

            4) 此时需要,RIP网关指向DIP,也就是Director server. 否则若在互联网上,即便报文是可以回应给CIP客户端,但是由于CIP并没有请求RIP服务器,因此报文会被丢弃。 

        NAT特性

            1) RS应该使用私有地址

            2) RS的网关必须指向DIP 

            3) RIP 和 DIP 必须在一同意网段内

            4) 进出的报文,无论请求还是响应,都必须经过Director Server, 请求报文由DS完成目标地址转换,响应报文由DS完成源地址转换 

        5) 在高负载应用场景中,DS很可能成为系统性能瓶颈。 

        6) 支持端口映射。

        7) 内部RS可以使用任意支持集群服务的任意操作系统。

         lvs_NAT.png

    2. DR 

        1)让前端路由将请求发往VIP时,只能是Dirctor上的VIP

                禁止RS响应对VIP的ARP广播请求:

            (1) 在前端路由上实现静态MAC地址VIP的绑定;

                前提:得有路由器的配置权限;

                缺点:Directory故障转时,无法更新此绑定;

            (2) arptables

                前提:在各RS在安装arptables程序,并编写arptables规则

                缺点:依赖于独特功能的应用程序

            (3) 修改Linux内核参数

                前提:RS必须是Linux;

                缺点:适用性差; 

                    Linux的工作特性:IP地址是属于主机,而非某特定网卡;也就是说,主机上所有的网卡都会向外通告

                        需要先配置参数,然后配置IP,因为只要IP地址配置完成则开始想外通告mac地址

                        为了使响应报文由配置有VIP的lo包装,使源地址为VIP,需要配置路由经过lo网卡的别名,最终由eth0发出

                        两个参数的取值含义:

                    arp_announce:定义通告模式

                        0: default, 只要主机接入网络,则自动通告所有为网卡mac地址

                        1: 尽力不通告非直接连入网络的网卡mac地址

                        2: 只通告直接进入网络的网卡mac地址

                    arp_ignore:定义收到arp请求的时响应模式

                        0: 只有arp 广播请求,马上响应,并且响应所有本机网卡的mac地址

                        1: 只响应,接受arp广播请求的网卡接口mac地址

                        2: 只响应,接受arp广播请求的网卡接口mac地址,并且需要请求广播与接口地址属于同一网段

                        3: 主机范围(Scope host)内生效的接口,不予响应,只响应全局生效与外网能通信的网卡接口

                        4-7: 保留位

                        8: 不响应一切arp广播请求

                配置方法: 

                    全部网卡

                        arp_ignore 1

                        arp_announce 2 

                    同时再分别配置每个网卡,eth0和lo

                        arp_ignore 1

                        arp_annource 2 

         2) 特性

            (1)RS是可以使用公网地址,此时可以直接通过互联网连入,配置,监控RS服务器

            (2)RS的网不能指向DIP

            (3)RS跟DS要在同一物理网络内,最好在一同一网段内

            (4)请求报文经过Director但是相应报文不经过Director

            (5)不支持端口映射

            (6)RS可以使用,大多数的操作系统,至少要可以隐藏VIP

        LVS DR1.png

LVS DR2.png

    3. LVS TUN: IP隧道,IP报文中套IP报文 

        1)RIP,DIP,VIP都必须是公网地址

        2)RS网关不会指向DIP

        3)请求报文经过Director,但相应报文一定不经过Director

        4)不支持端口映射

        5)RS的OS必须得支持隧道功能

            LVS TUN.png

    4. FULLNAT: 必须内核打补丁才能使用,使得各RS主机可以跨vlan. 源IP和目标IP都修改。 

        LVS FULLNAT.png

二、LVS调度算法: 

    1. 静态方法:仅根据算法本身进行调度

        rr: Round Robin

        wrr: Weighted RR

        sh: source hashing,源地址进行hash,然后分配到特定的服务器

        dh: destination hashing

            用于多前端防火墙的场景中,使得访问从一个防火墙进同时还从这个防火墙出来。 

    2. 动态方法:根据算法及RS当前的负载状况

        lc: Least Connection

            Overhead=Active*256+Inactive

            结果中,最小者胜出;

        wlc: Weighted LC

            Overhead=(Active*256+Inactive)/weight

        sed: Shortest Expect Delay

            Overhead=(Active+1)*256/weight

        nq: Nerver Queue,在Sed基础上,开局时候先轮寻一圈。 

        lblc: Locality-based Least Connection (基于本地的最小连接) dh+lc

        lblcr: Replicated and Locality-based Least Connection 后端服务器是缓存服务器时, 可以绑定连接到某一缓存服务器中。

    3. LVS缺陷: 

    不能检测后端服务器的健康状况,总是发送连接到后端。 

    Session持久机制:

        1、session绑定:始终将同一个请求者的连接定向至同一个RS(第一次请求时仍由调度方法选择);没有容错能力,有损均衡效果;

        2、session复制:在RS之间同步session,因此,每个RS持集群中所有的session;对于大规模集群环境不适用;

        3、session服务器:利用单独部署的服务器来统一管理session; 

三、ipvsadm使用方法

    1.相关命令

    2. 集群服务相关

    3. RS相关

    4. 清空所有的集群服务:

    5. 保存规则:(使用输出重定向)

    6. 载入指定的规则:(使用输入重定向)

    7. 查看ipvs规则等:

四、LVS NAT模型的实现: 

    1. 集群环境: 一台Director, 两台后端Real Server RS1,RS2

    2. 为RS添加网关指向Director

     3. 修改内核参数,开启转发功能

    4. 在RS1和RS2上面创建测试页,并在Director验证服务

    5. 在Director添加集群服务

    6. 通过物理机浏览器访问192.168.98.128, 正常情况,就可以看到轮寻的两个RS的主页了。 

五、LVS DR模型,当DIP,VIP,RIP都为公网地址时(实验环境中,把这三个地址全部放在同一物理网络中)

    1. 地址规划: 

    2. 配置地址 

    3. 修改RS1,RS3的内核参数,关闭lo的arp通告和lo的arp响应,并配置隐藏地址

    4. 为RS1和RS2添加路由条目,保证其发出报文经过eth0之前,还要先经过lo:1 VIP, 使得源地址成为VIP 

    5. 此时在Director上面添加,集群服务

六、LVS持久连接:

1. PCC:将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS;

    2. PPC:将来自于一个客户端发往某VIP的某端口的所有请求统统定向至同一个RS;

    3. PFMC: 端口绑定,port affinity, 基于防火墙标记,将两个或以上的端口绑定为同一个服务

原创文章,作者:以马内利,如若转载,请注明出处:http://www.178linux.com/10598

评论列表(0条)

  • AZ
    AZ 2015-12-29 15:09

    这图很赞~

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code