SystemDesign | 负载均衡 | LVS

➤ 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内核模型如下

LVS-Kernel-Processor

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:

➤ LVS工作模式 @todo

@ref: LVS原理知多少? - 云+社区 - 腾讯云