LVS

    LVS(linux virtual server),即linux虚拟服务器,是一个虚拟的服务器集群系统。个人认为它就是把客户端请求来的大量请求通过调度器转发给后端,可以在调度器上定义方法,来实现负载均衡的。

    LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。


    Lvs术语:

        VIPvirtual IP nat 模型中内网需要向外网转换的ip

        DIPdirettor IP    负载均衡调度器的ip

        RIPreal server IP 实现负载均衡服务器的ip

        CIPclient IP      客户端ip

 

    LVS的类型:

        Lvs-nat 地址转换

        Lvs-dr  直接路由

        Lvs-tun 隧道

 

    类型图解

    Lvs-nat

        LVS_第1张图片


    详解:对于lvs-nat模型来说,客户端向服务器发送一个请求,这时请求的是VIP(客户是不知道后面有集群的),目标地址是VIP,源地址是CIP;当这个包经过PREROUTING链传到INPUT链上(ipvs工作在INPUT链上),ipvs发现这个包是请求的是集群上的服务器,它会把包的目标地址强行转换为RIP,经过POSTROUTING链,这个请求到达目标。服务器响应时,这时发的响应包的目标地址是CIP,源地址是RIP,到达DIP时,DIP发现这是个经过nat转换的地址,就检查自己的nat表,把源地址改成VIP,然后这个包经过FORWARD、POSTROUTING出去就响应给用户了。


    nat类型的特性:

        1.RS应用使用私有地址;RS的网关必须指向DIP

        2.请求和响应都要经过Director;高负载场景中,Director易成为性能瓶颈;

        3.支持端口映射;

        4.RS可以使用任意OS


    LVS-DR:

        LVS_第2张图片

    详解:dr模型跟nat模型最大的差距就是dr模型减少了对director的压力,客户端发出一个请求,目标地址是VIP,源地址是CIP。路由器去找VIP,但是所有的RS上也有VIP,这就出现了3个VIP相同的情况,是会发生冲突的,这时就需要在RS上做arptables了,禁止VIP的mac响应,这时路由器会说,谁是VIP,然后director就把自己的VIP告诉给路由器了,RS上的VIP能收到请求,但是得不到响应。当包进到ipvs中,这时ipvs不会吧目标地址转换了,而是不改变源和目标地址的情况下,在包的首部再加入源mac是DIP的mac,目标mac是RIP的mac。然后返还给交换机,交换机看到目标mac是RS,RS拿到包之后拆开mac,看到ip,因为自己也有VIP,所以解开包,送到进程,进行响应,响应包封装,目标地址是CIP,源地址是VIP,所以就直接到达客户端,不经过director。


    dr类型的特性:

        1.保证前端路由将目标地址为VIP的报文统统发往Directory,而不能是RS

        解决方案:

            (1)静态地址绑定:在前端路由器上操作

            (2)aprtables

            (3)修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP

            址解析请求;

        2.RS可以使用私有地址;但也可以使用公网地址,此时可通过互联网通过RIP对其直接访问;

        3.RSDirectory必须在同一物理网络中;

        4.请求报文经由Director,但响应报文必须不能经过Director

        5.不支持端口映射;

        6.RS可以是大多数常见的OS

        7.RS的网关绝不允许指向DIP


    tun类型的特性:

        1.RIPVIPDIP全部是公网地址;

        2.RS的网关不会也不可能指向DIP

        3.请求报文经由Director,但响应报文必须不能经过Director

        4.不支持端口映射;

        5.RSOS必须支持隧道功能;


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

        rrround robin,轮流,轮询,轮叫

        wrrweighted round robin,加权轮询

        shsource hashing,源地址hash,表示来源于同一个CIP的请求将始终被始终被定向至同

        一个RSSESSION保持

        dhdestination hashing,目标地址hash

   

    动态方法:根据算法及各RS当前的负载状况进行调整

        lcleast connection,最少连接

            Overhead(负载状况)=Active(活动状态)*256+Inactive(非活动状态连接数)

        wlcweighted lc

            Overhead=Active*256+Inactive/weight

        sed:最短期望延迟shortest expection delay

            Overhead=(Active+1)*256/weight


Lvs-nat配置实现

    实验目的:实现lvs-nat模型的集群

    实验环境:1.vmware虚拟机

              2.3linux子机

              3.测试机

        LVS_第3张图片

    说明:Director是有两块网卡的,此实验用虚拟机实现,内网卡都在网络3中。在Real Server上网页都应该是一样的,但是这里为了看出效果,故意弄得不一样,内容是相对应的本机IP

    Real Server配置

    192.168.1.2:

        LVS_第4张图片

        wKiom1Q4FIPgP67vAABjObq0lJU837.jpg

# vim /var/www/html/index.html

        wKioL1Q4FO2R4qx3AAAc7OOJU3U661.jpg

# service httpd restart

        wKiom1Q4FOHClhL6AABCOEVDfs4982.jpg


    192.168.1.3:

        LVS_第5张图片

        wKioL1Q4FWyge8-JAABtBLpmo8I566.jpg

# vim /var/www/html/index.html

        wKioL1Q4FaXRvngxAAAi8AXdEIA229.jpg

# service httpd restart

        wKiom1Q4FZnSa8WEAABEYuB8xDU969.jpg


    Directory配置:

        LVS_第6张图片

        LVS_第7张图片

    检测Real Server

        wKioL1Q4FoPwKU28AABjE0Mds2A980.jpg

# mount /dev/cdrom /media/cdrom
# yum install ipvsadm

        LVS_第8张图片


    定义集群,指明自己的IP和端口,使用轮转机制

        wKiom1Q4FsfAWpWqAAA7zxOwr2A411.jpg


    给Director指定Real Server192.168.1.2和192.168.1.3,-m代表使用nat模型

        wKioL1Q4FzDiQQ8pAABjn-Xhj_I103.jpg


    开启转发功能

        wKiom1Q4FybgAtmBAAA_EVXIpDw317.jpg


    检验

        LVS_第9张图片

        LVS_第10张图片

    这样就是实现了lvs-nat模型的集群功能