LB&HA Cluster / LVS

1.2 LVS概述

 

1、LVS:Linux  Virtual  Server,Linux虚拟服务;
 1> VS:Virtual  Server;
 2> RS:Real  Server;

VS根据请求报文的目标IP、目标协议及端口,按照调度算法将其调度转发值后端某个RealServer;

2、iptables/netfilter工作机制:
iptables:用户空间的管理工具;
netfilter:内核空间的框架;

数据流入:PREROUTING —> INPUT;
数据流出:OUTPUT —> POSTROUTING;
数据转发:PREROUTING —> FORWARD —> POSTROUTING;

目标地址转换(DNAT)是在”PREROUTING”钩子处理的;
源地址转换(SNAT)是在”POSTROUTING”钩子处理的;

3、LVS组件:
 1> ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及后端”RealServer”;
 2> ipvs:工作于内核空间的”netfilter”的”INPUT”钩子之上的框架;

4、LVS集群类型中的术语;
 1> VS:Virtual  Server(虚拟服务)、Director(调度器)、Dispatcher(分发器)、Balancer(负载均衡器);
 2> RS:Real  Server(真实服务)、upstream server(上游服务)、backend server(后端服务);

 3> CIP:Client  IP;
 4> VIP:Virtual  Server  IP;
 5> DIP:Director  IP;
 6> RIP:Real  Server  IP;

CIP  <—->  VIP  <====>  DIP  <—->  RIP;

5、LVS集群类型;
 1> lvs-nat:修改请求报文的目标IP,属于多目标IP的DNAT;
 2> lvs-dr:操纵封装新的MAC地址(RS的MAC地址);
 3> lvs-tun:在原请求IP报文之外新加一个IP首部;
 4> lvs-fullnat:修改请求报文的源和目标IP;

lvs-nat: 多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发;

 1> RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
 2> 请求报文和响应报文都必须经由Director转发;Director容易成为系统瓶颈;
 3> 支持端口映射,可修改请求报文的目标POST;
 4> vs必须是Linux系统,rs可以是任意系统;

lvs-dr:Director Routing,直接路由;
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
源IP/PORT,目标IP/PORT均保持不变;

Director和RS都必须配置VIP;

 

 1> 确保前端路由器将目标IP为VIP的请求报文发往Director的3种方式;
      在前端路由器做静态绑定;
      在RS上使用arptables;
      在RS上修改内核参数以限制arp通告及应答级别:arp_announce、arp_ignore;
 2> RS的RIP可以使用私网地址,也可以是公网地址;RIP和DIP在同一IP网络;RIP网关不能指向DIP,以确保响应报文不会经由Director;
 3> RS跟Director要在同一物理网络;
 4> 请求报文要经由Director,但响应报文不能经由Director;
 5> 不支持端口映射;

lvs-tun;
 转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在源IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),然 后将报文发送给挑选出的RS;
 RS直接响应给客户端(源IP是VIP,目标IP是CIP);

 1> VIP、DIP、RIP都应该是公网地址;
 2> RS的网关不能,也不可能指向DIP;
 3> 请求报文要经由Director,但响应报文不能经由Director;
 4> 不支持端口映射;
 5> RS的OS需支持隧道功能;

lvs-fullnat:通过同时修改请求报文的源IP和目标IP进行转发;

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

备注:lvs-fullnat默认不支持;

总结:

lvs-nat、lvs-fullnat:请求报文和响应报文都经由Director;
 1> lvs-nat: RIP的网关指向DIP;
 2> lvs-fullnat: RIP和DIP未必在同一IP网络,但要能通信;

lvs-dr、lvs-tun:请求报文经由Director,但响应报文由RS直接发往Client;
 1> lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发;
 2> lvs-tun:通过在源IP报文之外封装新的IP首部实现转发,支持远距离通信;

6、IPVS 调度类型(scheduler);

根据其调度时是否考虑各RS当前的负载状态,可分为静态调度和动态调度;

6.1  静态调度方法:仅根据算法本身进行调度;
 1> RR: roundrobin,轮询;
 2> WRR:weithted,加权轮询;
 3> SH:Source  Hashing,实现session  sticky,源IP地址hash;将来自同一个IP地址的请求始终发往第一次挑选中的RS,实现会话绑定;
 4> DH:Destination  Hashing,目标地址hash,将发往同一个目标地址的请求始终转发至第一次挑选中的RS,典型使用场景是正向代理缓存中的负载均衡;

6.2  动态调度方法:主要根据每个RS当前的负载状态及调度算法进行调度;
 1> LC:least  connedtions;
               Overhead=activeconns*256+inactiveconns
 2>WLC:Weighted  LC;
               Overhead=(activeconns*256+inactiveconns)/weight
 3>SED:Shortest  Expection  Delay,最短期望延迟;
               Overhead=(activeconns+1)*256/weight
 4>NQ:Never  Queue;

 5>LBLC:Locality-Based LC,动态的DH算法;
 6>LBLCR:LBLC  with  Replication,带复制功能的LBLC;

Leave a Reply

Your email address will not be published. Required fields are marked *