什么是 Lvs
- Lvs是Linux Virtual Server的简写,也就是Linux 虚拟服务器,是一个虚拟的服务器集群系统,本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了高效的解决方法,现在 LVS 已经是 Linux 内核标准的一部分
使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能
Lvs 的原理:
1)当用户向负载均衡调度器发起请求,调度器将请求发往内核空间
2)PREROUTING链收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3)IPVS工作在INPUT链上,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行对比,如果用户请求的就是定义的集群服务,那么IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。
4)POSTROUTING链接收数据包后发现目标IP地址刚好是自己的IP,就会给客户端返回信息
Lvs 的工作模式:
VS:virtual server,虚拟服务器,也叫Director
RS:real server,真正的服务器,集群中的节点
CIP:客户端IP
VIP:virtual IP,director向外部提供服务的IP
RIP:realserver集群节点的服务器网卡IP
DIP:director与RS通信的IP
- lvs-nat 网络地址转换模式
1)客户端发送请求到达director(虚拟服务器)
2)director根据负载均衡算法改写目标地址为后端的RIP(集群节点的服务器网卡)并转发给该后端主机,和NAT一样
3)当RS(真实服务器)处理完请求后,将响应数据交给director(虚拟服务器)
4)Director(虚拟服务器)改写源地址为VIP(虚拟ip)后传给客户端 - lvs-dr 直接路由模式
1)客户端发送请求到达director(虚拟服务器)也就是CIP(客户端)访问VIP(虚拟ip)
2)director(虚拟服务器)将请求报文重新封装一个mac地址首部dip-mac:rip-mac,所以DIP和RIP需要相同的物理网络实现arp通信,源IP地址和目标IP地址不变,只是修改源mac地址为DIP的mac地址,目标mac地址改为RIP的mac地址;然后发送给RS(真实服务器)
3)RS(真实服务器)发现目标地址是自己的MAC地址处理报文,并且RS(真实服务器)本地会还接口Lo配置为VIP(虚拟ip),响应报文从Lo的VIP(虚拟ip)发送给eth0网卡,所以响应报文首部cip-mac:Lo-mac,最后响应报文直接发送给客户端,此时源ip地址为VIP(虚拟ip),目标地址为CIP(客户端IP) - lvs-tun IP隧道模式
1)客户端将请求发送前端的负载均衡器,请求报文源地址是CIP(客户端),目标地址为VIP(虚拟ip)
2)负载均衡器收到报文后,发现请求的在规则里面存在的地址,它将请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP(集群网卡ip),并将此包发送给RS(真实服务器);
3)RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己Lo接口上的VIP,所以会再次处理请求报文(这种2次分装解封装的过程,就称为隧道模式)并将响应报文通过Lo接口送给eht0网卡然后直接发给客户端,这种模式也是需要设置Lo接口为VIP(虚拟ip),并且不能在公网上 - lvs-fullnat
1)客户端对VIP(虚拟ip)发起请求;
2)director(虚拟服务器)接收请求,发现是请求后端集群,对请求报文做full nat,源IP改为DIP,目标IP转换为任意后端RS(真实服务器)的RIP(集群网卡ip),然后发往后端
3)RS(真实服务器)收到请求后,进行响应,源IP为RIP(集群网卡ip),目标IP为DIP,内部路由到director(虚拟服务器)
4)director(虚拟服务器)收到响应报文后,进行full nat,源地址改为VIP(虚拟ip),目标地址改为CIP(客户端)
Lvs 调度算法
轮询调度:客户端请求顺序分配,不管服务器真实负载
加权轮询调度:根据服务器处理能力分配请求
最小连接调度:根据服务器真实连接,将客户端请求分配给连接最少的服务器节点
加权最小连接调度:服务器性能差异较大建议使用,权重高节点承担大的负载
基于局部的最少连接
带复制的基于局部性的最少连接
目标地址散列调度
源地址散列调度U
最短的期望的延迟
最少队列调度