bingoohuang/blog

Keepalived LVS

Opened this issue · 0 comments

image
图片来自 章文嵩博士和他背后的负载均衡帝国

很逗的一段话:

现在你的公司已经各方面都已经走上正轨,马上就要敲钟上市了,在业内,世界范围内已经有了广泛的社会影响力,已经成为一个新兴行业的风向标之一,很多人都盯着你,你这个公司有任何的风吹草动,新闻从业人员肾上腺激素都会往外狂飙,你的任何一个系统挂了都会影响几亿的用户,产生千万的资产损失,那么问题来了,你的系统还敢随意的挂掉么? 挂掉哪怕1分钟都是给竞争对手的一场狂欢,让自己的公关团队夙夜难眠!

好,像这么牛逼的公司你觉得你开始更多的需要考虑的是什么?1个机房,全在H城?那怎么可以?!!且不说地球这么危险,地震、海啸频发,错峰用电、火灾时有发生,有时候周围的化工厂还会爆个炸啥的,有时候就是工地上的铲车看起来都那么可怕,尤其是blueshi(r)t人开的铲车尤其的可怕

好吧,看来你需要在多个城市,多个国家,多个地球上建设很多个机房。有了多个机房万事就OK了么?不,事情其实要比你想象的复杂的多,你的公司的已有应用都在一开始就支持异地容灾能力了么,做架构的都知道无状态的应用可能好一点,但是那些有状态的应用在这一块绝对是重灾区。

LVS-DR

image
图片来自LVS-DR工作原理图文详解

DR 值 Direct Routing,直接路由,DR 模型中,Director 和 Realserver 处在同一网络中,对于 Director,VIP 用于接受客户端请求,DIP 用于和 Realserver 通信。对于 Realserver,每个 Realserver 都配有和 Director 相同的 VIP(此 VIP 隐藏,关闭对 ARP 请求的响应),仅用户响应客户端的请求,RIP 用于和 Director 通信。
当客户端请求集群服务时,请求报文发送至 Director 的 VIP(Realserver的 VIP 不会响应 ARP 请求),Director 将客户端报文的源和目标 MAC 地址进行重新封装,将报文转发至 Realserver,Realserver 接收转发的报文。此时报文的源 IP 和目标 IP 都没有被修改,因此 Realserver 接受到的请求报文的目标 IP 地址为本机配置的 VIP,它将使用自己的 VIP 直接响应客户端。
LVS-DR 模型中,客户端的响应报文不会经过 Director,因此 Director 的并发能力有很大提升。

VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

在VRRP协议实现里,虚拟路由器使用 00-00-5E-00-01-XX 作为虚拟MAC地址,XX就是唯一的 VRID (Virtual Router IDentifier),这个地址同一时间只有一个物理路由器占用。在虚拟路由器里面的物理路由器组里面通过多播IP地址 224.0.0.18 来定时发送通告消息。每个Router都有一个 1-255 之间的优先级别,级别最高的(highest priority)将成为主控(master)路由器。通过降低master的优先权可以让处于backup状态的路由器抢占(pro-empt)主路由器的状态,两个backup优先级相同的IP地址较大者为master,接管虚拟IP。

keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

                   +-------------+
                   |    uplink   |
                   +-------------+
                          |
                          +
    MASTER            keep|alived         BACKUP
172.29.88.224      172.29.88.222      172.29.88.225
+-------------+    +-------------+    +-------------+
|   nginx01   |----|  virtualIP  |----|   nginx02   |
+-------------+    +-------------+    +-------------+
                          |
       +------------------+------------------+
       |                  |                  |
+-------------+    +-------------+    +-------------+
|    web01    |    |    web02    |    |    web03    |
+-------------+    +-------------+    +-------------+

参考:

  1. Keepalived & LVS
  2. Nginx+Keepalived实现站点高可用