4.3.2 四层负载均衡高可用设计

作为大型分布式系统的入口,若四层负载均衡器是单节点部署,一旦发生故障,对于整个系统而言绝对是毁灭性的打击。接下来,我们将进入网络高可用性的主题,讨论利用多种路由冗余技术实现网络”容错“。

1. 主备方式

通常,同一网段内的所有主机都设置一条相同的、以网关为下一跳的缺省路由。但当这个网关出现故障时,整个网络就不可用了。增加出口网关是提高系统可用性的常见手段,此时如何在多个出口之间进行选路就成了需要解决的问题。VRRP(虚拟路由冗余协议)应运而生。

VRRP 解决的问题是,通过 VRRP 协议协商,虚拟出一个 IP 地址。这样的好处是,PC 只需要定义 VRRP 虚拟的 IP 地址作为网关,当主设备出现故障后,会自动切换到备用设备,整个过程对用户完全透明。图 4-11 展示了一个由两台服务器构建的主备集群。其中,Keepalived 是一款基于 VRRP 协议的高可用性软件,能够让多台服务器像路由器一样实现虚拟 IP 地址的冗余转移。

请看下面的处理过程:

  • 定期通告:主服务器定期通过组播发送 VRRP 通告报文(VRRP Advertisements),向备份路由器报告其正常运行状态。此刻,主服务器接管虚拟 IP 地址并处理所有发往该地址的网络流量,备份服务器处于待命状态。
  • 故障检测:如果主服务器意外宕机,备用服务器会检测到未收到通告报文,根据 VRRP 协议的选举机制选出新的主服务器。
  • 广播 GARP 报文:新的主服务器向网络广播 GARP(Gratuitous ARP)报文。GARP 是一种特殊的 ARP 请求,用于通知网络中其他设备更新其 ARP 缓存,将自己的 IP-MAC 地址对告知它们。
  • 更新 ARP 缓存:客户端设备(如其他服务器)和网络设备(如交换机和路由器)收到 GARP 报文后,会更新其 ARP 缓存表,将虚拟 IP 地址映射到新的虚拟 MAC 地址。
  • 接管流量:备用服务器随后接管所有的虚拟 IP(VIP)流量,整个故障转移过程完成。


图 4-11 负载均衡主/备设计

主/备方案在现今的分布式系统非常常见,但这种方式存在明显的缺陷:

  • 平稳状态下 50% 的资源是空闲的,备用服务器一直空转,资源无法充分利用
  • 其次,现代分布式系统追求更高的容错性。理想情况下,一个系统就算多个实例同时挂掉,预期仍能继续运行,而主/备实例同时挂掉时,服务就彻底挂了。

2.一致性哈希容错方式

接下来我们继续看基于集群的一致性哈希容错和可扩展设计方案,它的工作原理如图 4-12 所示。


图 4-12 负载均衡一致性哈希容错和可扩展设计方案

  • 多个边缘路由器以相同的 BGP 权重通告所有 Anycast VIP,通过 ECMP(Equal-cost, Multi-path routing,等价多路由)保证每个 flow 的所有包都会到达同一个边缘路由器。
  • 多个四层负载均起以相同的 BGP 权重向所有的边缘路由器通告所有的 VIP 继续使用 ECMP 的方式为相同 flow 的包选择相同的四层负载均衡器。
  • 每个四层负载均衡器实例会做部分连接跟踪(conntrack)工作,然后使用一致性哈希为每个 flow 选择 一个后端。通过 GRE 封装将包从负载均衡器发送到后端。
  • 然后使用三角传输模式将应答包从后端直接发送到边缘路由器,最后到客户端。

综合上述,看看一致性哈希容错模式是如何避免主备方式的缺陷:

  • 边缘路由器和负载均衡器实例可以按需添加。因为每一层都用到了 ECMP,当新实例加入的时候,能最大程度地减少受影响的 flow 数量;
  • 在预留足够的突发量和容错的前提下,系统的资源利用率想达到多高就可以到多高。

各类云厂商中的 SLB 以及绝大部分的现代四层负载均衡系统都在朝着这种设计演进。

总字数:1203
Last Updated:
Contributors: isno