Keepalived是Linux下一个轻量级的高可用解决方案,它与HACMP、RoseHA实现的功能相似,均可以实现服务或网络的高可用,可是又有差异:HACMP是一个专业的、功能完善的高可用软件,它提供了HA软件所需的基本功能,好比心跳检测和资源接管、监测集群中的系统服务、在集群节点间转移共享IP地址的全部者等,HACMP功能强大,可是部署和使用相对比较麻烦,同时也是商业化软件;与HACMP相比,Keepalived主要是经过虚拟路由冗余来实现高可用功能,虽然它没有HACMP功能强大,但Keepalived部署和使用很是简单,全部配置只须要一个配置文件便可。html
Keepalived起初是为LVS设计的,专门用来监控LVS负载均衡集群中各个后端节点的状态。它根据layer3,4 & 5交换机制检测每一个服务节点的状态,若是某个后端节点出现异常,Keepalived将检测到,并将故障节点从集群中剔除,而在故障节点恢复正常以后,Keepalived又可自动将节点从新加入集群。c++
Keepalived后来加入了VRRP功能(Virtual Route Redundancy Protocol,虚拟路由器冗余协议,用于解决路由器出现的单点故障),使其也具备了HA功能。这样,Keepalived不只能够用于LVS负载均衡集群的节点监控,也能够用于实现高可用。算法
在现实的网络环境中,主机之间的通讯都是经过配置静态路由(默认网关)完成的,而主机之间的路由器一旦出现故障,通讯就会失败。所以,在这种通讯模式中,路由器就成了一个单点瓶颈。为了解决这个问题,引入了VRRP协议。shell
VRRP将两台或多台物理路由器虚拟成一个虚拟路由器,这个虚拟路由器经过虚拟IP对外提供服务。而在虚拟路由器内部,多个物理路由器协同工做,同一时间只有一台物理路由器对外提供服务,这台路由器被称为主路由器(Master角色)。通常状况下Master由选举算法产生,拥有对外服务的虚拟IP,提供各类服务。而其余物理路由器不拥有虚拟IP,不提供网络服务,仅仅接收Master的VRRP状态通告信息,这些路由器被称为备份路由器(Backup角色)。当主路由失效时,处于Backup角色的备份路由将从新选举出一台新的主路由进入Master角色对外提供服务。后端
Keepalived是一个高度模块化的软件,结构简单,但扩展性很强,下图是官方给出的体系结构拓扑图:网络
Keepalived从总体上分为两层,分别是用户空间(User Space)和内核空间(Kernel Space)。负载均衡
内核空间处于最底层,包括IPVS和NETLINK两个模块。IPVS包含在LVS集群软件中,能够实现基于IP的负载均衡,而Keepalived最初就是用于为LVS提供节点状态检测功能的,IPVS模块可经过编译时的参数来打开和关闭;NETLINK模块主要用于实现一些高级路由框架和一些相关的网络功能,完成用户空间Netlink Reflector模块发来的各类网络请求。框架
用户空间位于内核空间之上,Keepalived的全部具体功能都在这里实现。模块化
Keepalived能够经过YUM安装,也可使用源码进行安装。设计
从Keepalived官网http://www.keepalived.org/上能够下载到Keepalived的源码包。
使用如下命令经过YUM安装Keepalived:
yum install keepalived
这里以Keepalived最新版本2.0.12为例介绍源码安装Keepalived。
经过YUM安装依赖环境:
[root@localhost keepalived-2.0.12]# yum install gcc gcc-c++ wget popt-devel openssl openssl-devel libnl libnl-devel libnl3 libnl3-devel libnfnetlink-devel
解压源码包后,进入源码目录,执行configure,这里不指定Keepalived的安装路径,仅指定Keepalived配置文件路径:
[root@localhost keepalived-2.0.12]# ./configure --sysconf=/etc
configure运行完毕无报错后执行:
[root@localhost keepalived-2.0.12]# make && make install
命令运行完成无报错,Keepalived就安装成功了。
可使用service(init)或systemclt(systemd)管理Keepalived服务。