➤ LVS, Linux Virtual Server, 即Linux虚拟服务器:
- LVS是工作于 ISO网络模型第四层的反向代理, 核心功能「IPVS」是 Linux Kernel的一个模块;
- LVS由 「IPVS」和「IPVSADM」组成, 前者工作在内核态负责数据路由, 后者工作在用户态负责选项的设置;
- LVS工作在 「Director Server」, Director Server对外提供虚拟IP(Virtual IP, 简称VIP), 客户端的请求发往VIP, 请求数据经过 Director Server的内核态, 通过IPVSADM设置的路由规则, 最终被发送给真实服务器IP(Real IP, 简称RIP);
- 附图: LVS工作原理 & LVS内核模型如下
1.当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。
2.当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。
3.LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
4.如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
5.最后经由POSTROUTING链发往后端服务器。
➤ LVS提供如下几种负载均衡调度算法:
- Round Robin
- Weight Round Robin
Destination Hash: 目标ip地址哈希, LVS采用了素数乘法Hash函数, 如下
static inline unsigned hashkey(unsigned int dest_ip)
{
// 2654435761UL是2到2^32 (4294967296)间接近于黄金分割的素数
return (dest_ip* 2654435761UL) & HASH_TAB_MASK;
}Source Hash: 请求的来源ip哈希
- Least Connections: 最小连接
- Weight Least Connections: 带权重的最小连接 // LVS默认
- Shortest Expected Delay: 最小期望延迟
- locality-Based Least Connections: 基于局部性的最少链接
- Locality-Based Least Connections with Replication: 带复制的基于局部性最少连接
@ref:
- 基于局部性的最少链接(Locality-Based Least Connections Scheduling) | LVS中文站点
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling) | LVS中文站点
➤ LVS工作模式 @todo
@ref: LVS原理知多少? - 云+社区 - 腾讯云