码迷,mamicode.com
首页 > 其他好文 > 详细

3-3-基于LVS实现4层负载均衡模式和场景应用

时间:2019-03-16 23:42:44      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:inux   目标   方式   正向代理   并发   type   端口映射   LVS-TUN   静态   

回顾:
linux的集群形式:LB负载均衡,HA高并发,HP高性能
分布式系统:存储、计算(超算集群)
lb cluster实现方式:
软件
四层:lvs、nginx(stream)、haproxy(mode tcp)
七层:
http:nginx(http)/httpd/haproxy(mode http)/ats/perlbal/pound
mysql:ProxySQL...
硬件
lvs:linux virtual server
vs/rs,cip/vip/dip/rip
lvs type:
nat/dr/tun/fullnat
nat类型:多目标IP的DNAT,通过修改请求报文的目标IP和PORT来实现调度;
dr类型:通过为请求报文重新封装一个MAC首部进行转发:源MAC是DIP所在的接口的MAC,目标MAC是某次挑选出的RS的RIP所在接口的MAC地址;请求报文经由directory,响应报文不经由directory

NAT和DR都有距离的限制,必须在很近的距离内,因为双绞线的限制(私网地址必须在同一个物理网络)

接上次课课件:
lvs-tun:---RS不在同一个机房,所以不需要做拒绝arp广播和响应,这种模型应用不多(有个问题,巨型帧---客户端请求数据超过mtu)
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP);
(1)DIP,VIP,RIP都应该是公网地址;
(2)RS的网关不能,也不可能指向DIP;
(3)请求报文要经由Director,但响应不能经由Director;
(4)不支持端口映射;
(5)RS的OS得支持隧道功能;

    lvs-fullnat:---非标准类型
        通过同时修改请求报文的源IP地址和目标IP地址进行转发;
        CIP<-->DIP
        VIP<-->RIP

        (1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
        (2)RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但Direcotr还要将其发往Client;
        (3)请求和响应报文都经由Director;
        (4)支持端口映射;
        注意:此类型默认不支持;

总结:
    lvs-nat,lvs-fullnat:请求和响应报文都经由Director;
        lvs-nat:RIP的网关要指向DIP;
        lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信;
    lvs-dr,lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client;
        lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发;
        lvs-tun:通过在原IP报文之外封装新的IP首部实现转发,支持远距离通信;

ipvs scheduler:
根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种:
静态方法:仅根据算法本身进行调度;---一般短链接使用这种调度方法
RR:roundrobin,轮询;
WRR:Weighted RR,加权轮询;---有的服务器计算能力比较强,会虚拟出几台服务器的能力
SH:Source Hashing,实现session sticy(黏性),源IP地址hash;将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定;---用户第一次访问,一般是加权轮询,在内存建立一个hash表,以源IP为键,以RIP为值---有个问题,server down了,session也就丢了,而且lvs工作在四层,不能进行cookie绑定
DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡;

    动态方法:主要根据每RS当前的负载状态及调度算法进行调度;---适用于长连接---非活动连接对资源的依赖很少很少,重量是活动连接的256分之一
        Overhead=负载值
        LC:least connections---最少连接,谁小就挑选谁
            Overhead=activeconns*256+inactiveconns
        WLC:Weighted LC---加权最少连接,谁重就选谁,默认算法,有问题,刚开始没有连接,恰好轮询时第一台性能最差
            Overhead=(activeconns*256+inactiveconns)/weight
        SED:Shortest Expection Delay---最短期望延迟
            Overhead=(activeconns+1)*256/weight
        NQ:Never Queue不排队保证每个server都有链接

        LVLC:Locality-Based LC,动态的DH算法;如果没有绑定,不是轮询而是根据后端服务器的负载来调度
        LBLCR:LBLC with Replicaion,带复制功能的LBLC;两个缓存服务器之间允许缓存协议的共享

ipvsadm/ipvs:---ipvs是内核的直接功能,只要内核编译时开启此功能就能用,ipvsadm是用户空间工具,只要装安装包就能用,不需要监听任何服务和端口
集群和集群之上的各RS是分开管理的;
集群定义
RS定义
ipvs:
~]#grep -i "ipvs" -C 10 /boot/config-VERSION-RELEASE.x86_64---从这个内核编译信息配置模板的上下文中查找关键字的上下10行
支持的协议:TCP,UDP,AH,ESP,AH_ESP,SCTP;---都是四层协议
ipvs集群:
集群服务
服务商的RS
yum info ipvsadm---查看这个包信息

正向代理:代表客户端发出请求的
反向代理:代表服务端提供服务的

3-3-基于LVS实现4层负载均衡模式和场景应用

标签:inux   目标   方式   正向代理   并发   type   端口映射   LVS-TUN   静态   

原文地址:https://blog.51cto.com/13852573/2364126

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!