1. Linux Virtual Server 简介
LVS官网LVS:Linux Virtual Server,负载调度器,是一个虚拟的服务器集群系统,linux内核集成,该项目由章文嵩博士成立,(花名 正明), 阿里的四层 SLB(Server Load Balance) 就是基于 LVS + keepalived 实现。
1.1 LVS集群相关术语
VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load BalancerRS:Real Server(lvs), upstream server(nginx), backend server(haproxy)CIP:Client IPVIP:Virtual serve IP VS外网的IP DIP:Director IP VS内网的IPRIP:Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
1.2 LVS工作原理
LVS 集群采用IP负载均衡技术和基于内容请求分发技术。由于 LVS 是内核级功能,所以具有很好的吞吐率,将请求均衡地转移到不同的 RS 上执行,且调度器自动对后端服务器进行心跳检测,一旦发现 RS 故障会自动将其屏蔽,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
VS根据请求报文的目标VIP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选 RS。LVS 工作在 INPUT 链的位置,将发往 INPUT 的流量进行拦截“处理”。
2. LVS 的工作模式
2.1 NAT模式
具体工作流程参考下面的官方示意图:
当用户访问 LVS 群集时,请求数据包发往 VIP 地址到达 VS。负载均衡器检查数据包的目标地址和端口号,如果根据 VS 规则表能匹配到,则由调度算法从集群中选择合适的 RS,并且此连接会被添加到已建立连接的哈希表中。
然后,将数据包的目标 IP 地址和 PORT 重写为所选的 RS 服务器,并且将数据包转发到改服务器。当传入数据包属于此连接并且所选的服务器已经在哈希表中时,将重写并将数据包重写并转发到所选的服务器。
当回复数据包返回时,VS 将数据包的源 IP 和 PORT 重写为 VS 的源地址和端口。连接终止或超时后,将在哈希表中删除连接记录。
LVS 的 NAT 模式本质上是多目标 IP 的 DNAT,通过将请求报文中的目标地址和目标端口修改为 RS 的 RIP 和 PORT 实现转发。
报文传输具体过程如下图所示:
对于 NAT 模式的 LVS 集群,有以下几点需要注意:

