最近在测试新游戏的部署方案,我们正在测试的一款手游后端代码部署采用HAProxy+Keepalived的方式进行部署,所以顺便研究下Keepalived的详细资料。

Keepalived的官方地址是http://www.keepalived.org/index.html

Keepalived是一个用C语言编写的路由软件,它的目的是为Linux系统或基于Linux系统的基础架构提供简单而强壮的负载均衡和高可用机制。负载均衡框架依赖于LVS的内核模块并提供四层负载均衡功能。它可以根据负载均衡器后端的服务器的健康状况维护并管理后端服务器。高可用功能是根据VRRP协议来实现的。VRRP是虚拟路由器冗余协议,它是一种容错协议,它是为了解决局域网中单个静态路由器出现单点故障的问题而被提出的一种协议,Keepalived能够提供高可用可能全靠它。

Software%20Design.gif

为了确保强健性和稳定性,Keepalived 后台进程启动后将分离成3个不同的进程。即一个父进程fork出两个子进程,一个子进程用于VRRP框架,另一个进程用于健康检查。每个子进程都有各自的Scheduler-I/O Mutiplexer。父进程的监控框架叫做WatchDog。如下面的keepalived启动后产生三个进程,一个父进程3931,两个子进程3932和3933. 3932用于VRRP协议,3933用于健康检查。

root      3931     1  0 May23 ?        00:00:03 /usr/sbin/keepalived -D

root      3932  3931  0 May23 ?        00:00:03 /usr/sbin/keepalived -D

root      3933  3931  0 May23 ?        00:01:19 /usr/sbin/keepalived -D



各个组成部件介绍如下:

Control Plane:

   Keepalived的控制层。Keepalived通过keepalived.conf这个配置文件对Keepalived进行配置。

Memory Management:

   这个框架用于访问一些通用的内存管理函数。

WatchDog:

   这个框架提供子进程的监控功能。

VRRP Stack:

   这个是Keepalived最重要的功能之一。VRRP用于调度器接管。

Netlink Reflector:

   Netlink 消息子系统用于设置VRRP 的VIP。

IPVS:

   LVS的内核代码


NETLINK:

   由 Alexey Kuznetov提供的关于高级路由框架和其子系统功能的Linux内核代码。


Scheduler - I/O Multiplexer :

   Keepalived的所有事件都有同一个进程调度处理,这个模块的设计主要是为了优化网络和I/O。


Core components:

   这个框架定义一些供通用代码和全局代码使用的库函数。

Checkers:

   这个是Keepalived主要的功能之一。Checkers负责负载均衡后端真实服务器的健康检查,它检测后端真实服务器是否存活,然后根据结果将后端真实服务器在LVS拓扑中增加或删除。


System Call:

   这个框架提供Keepalived调用额外系统脚本的能力。主要用在MISC检查器中。

SMTP:

   SMTP协议用于发送管理通知。

IPVS Wrapper:

   这个框架主要用于向内核中的ipvs代码发送规则信息。