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;