LVS是Linux Virtual Server的简称,即Linux虚拟服务器。从Linux内核2.4版本之后,已经将LVS内置于内核中,提供负载均衡技术。
目录LVS理论基础
ipvsadm命令
DR和NAT实验
LVS持久连接
LVS健康监测
LVS理论基础1、LVS的优势
高并发能力强 LVS基于内核网络层工作,有着超强的并发处理能力,单台LVS可以承受上万的并发连接。
稳定性高 LVS是基于4层的负载均衡软件,因此LVS在所有负载均衡软件中性能最强,稳定性最高,消耗CPU和内存少。
应用范围广 LVS是工作在4层,所以它可以对应用层的所有协议作负载均衡,包括http、DNS、ftp等。
2、LVS的组件
ipvsadm LVS已经集成于内核中,用户是无法直接操作内核空间的程序的,因此需要一个用户空间的管理工具,ipvsadm就是一个用户空间的命令行工具,用于管理集群。
ipvs 工作于内核netfilter INIPUT钩子上的一个程序,并且根据ipvsadm定义的规则实现请求的转发。
查看Linux内核是否支持ipvs:
`grep -i -C 10 --color=auto ipvs /boot/config-2.6.32-696.el6.x86_64`
3、LVS的工作流程
1、用户请求的数据包到达负载均衡器的内核空间,首先经过的是内核的PREROUTING链,
2、因为请求的数据包的目的地址一定是本机,然后将数据包送到INPUT链,
3、ipvs就工作在INPUT链上,ipvs利用ipvsadm定义的规则工作,ipvs对数据包进行检查,如果目的地址和端口不在规则里边,则将数据包送往用户空间,
4、如果目的地址和端口在规则里边,则将数据包的目的地址和端口修改为后端真实服务器,然后将修改后的数据包送往POSTROUTING链,
5、最后经过POSTROUTING链将数据包转发给后端服务器。
4、LVS的工作模式
NAT ①客户端发送数据包至负载均衡器,数据包的源IP是CIP,目的IP是VIP。数据包首先到达的是内核空间的PREROUTING链,②PREROUTING链判断目的IP是VIP,确定VIP是本地IP,然后将其送往INPUT链。③INPUT链上的ipvs将数据包的目的IP修改为RIP,然后发送给POSTROUTING链。④POSTROUTING链将数据包发送至后端服务器处理。⑤处理完之后,以源IP为RIP,目的IP为CIP的响应数据包返回给负载均衡器,⑥LVS收到之后再次修改数据包的IP地址,将数据包的源IP修改为VIP,目的IP保持不变仍为CIP,然后发往客户端。
NAT工作模式中,请求的流量和回应的流量都必须经过前端的调度器,一次调度器成为了整个服务器集群的瓶颈,一旦调度器宕机,则整个集群将出去瘫痪状态,因此就出现了DR工作模式。
DR Direct Routing,①客户端发送数据包至负载均衡器,数据包的源IP是CIP,目的IP是VIP。数据包首先到达的是内核空间的PREROUTING链,②PREROUTING链判断目的IP是VIP,确定VIP是本地IP,然后将其送往INPUT链。③ipvs将数据包通过DIP的网卡发送给POSTROUTING链,其中源MAC自动修改为DIP的MAC(因为从DIP的网卡发送出去的),并且将目的MAC修改为RIP的MAC,源IP和目的IP保持不变,④POSTROUTING链将数据包发送给交换机,交换机根据RIP的MAC地址将数据包送往指定的后端服务器,⑤处理外后将数据包通过lo接口转发至eth0接口,由eth0将数据包发送出去,此时数据包的源IP和MAC是VIP:VIP的MAC,目的IP和MAC是CIP:CIP的MAC,⑥响应数据包最终交付给客户端。
DR工作模式的特点:因为DR工作模式是根据MAC进行数据包转发,因此RS跟负载均衡器必须在同一个局域网(广播域)中;所有的请求报文都经过负载均衡器,所有的响应报文不经过负载均衡器;因为DR工作模式的响应报文是RS直接回应的,因此负载均衡器和RS必须都配置同一个VIP地址,RS的lo接口配置VIP,这样一来同一个局域网会有多个相同的IP,在进行ARP广播的时候会出现紊乱,这时需要通过修改RS的内核参数从而阻止RS对ARP广播进行回应,这样只有负载均衡器对VIP的ARP请求进行回应;由于DR工作模式仅需要分析数据包的MAC首部,因此DR的处理能力特别高,拥有和硬件负载均衡设备相媲美的网络吞吐和负载均衡能力。
TUN ①客户端发送请求至负载均衡器,该数据包的源IP是CIP,目的IP是VIP,②LVS收到数据包后,将该数据包的首部再封装一层IP首部,其中源IP为DIP,目的IP为RIP,将重整后的数据包送往后端服务器,③RS两次处理该数据包,将响应数据包通过lo接口送往eth0接口,然后直接发送给客户端。
其中NAT和DR调度算法必须保证调度器和RS在同一个局域网中,也就是他们无法跨网段通信,而TUN调度算法则可以使得调度器和RS在不同的局域网中。
另外,通过对NAT工作模式进行改进,可以使得其跨网段通信,改进之后的工作模式为fullnat模式。工作流程和原理如图所示,
5、LVS的调度算法
1、轮询(rr)
请求按顺序轮流分配到后端服务器上,后端每台服务器接受请求的概率是一样的。
2、加权轮询(wrr)
LVS根据后端服务器的处理能力给后端每台服务器设置权值。LVS可以自动询问真实服务器的负载情况,然后动态的调整权值,权值大的收到请求的概率大。
3、目标地址散列(dh)
根据请求的目标IP地址,得出hash值,进而找出对应的服务器,这种调度算法适用于缓存服务器的负载均衡。
4、源地址散列(sh)
根据请求的源IP地址,得出hash值,进而找出对应的服务器,这种调度算法适用于session共享的情况。
5、最少连接(lc)
动态地将请求调度到后端连接数最少的服务器上。这种调度算法适用于后端每台服务器性能相近的情况下。
6、加权最少连接(默认)(wlc)
LVS动态调整后端服务器的权值,权值大的将承受较大比例的活动连接负载。
7、最短延迟调度(sed)
8、永不排队/最少队列调度(nq) ipvsadm命令