Keepalived是什么?
Keepalived是一款高可用软件,Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群中个服务节点的状态,后来引入可以实现高可用的VRRP(Virtual Router Redundancy Protocol:虚拟路由冗余协议)协议。VRRP的出现是为了解决静态路由单点故障问题,它能够保障当个别节点宕机,整个网络可以不间断地服务。keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、Mysql等)的高可用解决方案软件。
Keepalived一方面具有自动配置管理LVS的功能,同时还具有对LVS下面的RS节点进行健康状态监测功能,另一方面也可以实现系统网路服务的高可用功能。Keepalived软件的[官方站点](http://www.keepalived.org/)
##什么是VRRP?“备胎的重要性”
> *VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器,在一组VRRP路由集群中,有多台物理路由器,但是这么多台路由器并不是同时工作的,而时由一台成为Master的机器负责路由工作,其他机器都是Backup。Master角色并非一成不变,VRRP会让每个VRRP路由参与竞选,最终获胜的就是Master,获胜的Master有一些特权,比如拥有虚拟路由的IP地址等,拥有系统资源的Master负责转发给网关地址的包和ARP请求
> * VRRP所有的协议报文都是通过IP(Multicast)包(默认的多播地址224.0.0.18)形式发送。虚拟路由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC:00-00-5E-00-01-{VRID}。所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的IP(VIP)和MAC(对use_vmac可配可不配)。客户端不需要因Master的改变而修改自己的路由配置。对客户端来讲,这种切换的无感知的透明切换。
> * 在一组虚拟路由器中,只有作为Master的VRRP路由会一直发送VRRP广播包(VRRP Advertisement messages),此时的Backup不会抢占Master,当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master节点。这种抢占非常快速(可能不到1s),以保障服务的连续性、可用性,出于安全性考虑,VRRP数据包使用了加密协议进行了加密。
## Keepalived服务的三个重要功能(Keepalived+LVS说明)
> * #### 管理LVS负载均衡软件:
> + keepalived可以通过读取自身的配置文件,实现通过底层的接口直接管理LVS的配置文件以及控制服务的启动、停止等功能。使得LVS的应用更为简单方便。
> * #### 实现对LVS集群节点的健康检查功能(healthcheck):“害群之马的存活问题”
> + 当LVS集群中的某一个或多个节点同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除,并将请求调度到正常节点服务器上,从而保障终端用户的访问不受影响;当故障节点修复后,Keepalived访问会自动地把它们加入到正常的转发队列中,对终端用户提供服务。
> * #### 提供系统网路服务的高可用功能(failover):“官复原职与俯首称臣”
> + Keepalived可以在Master和Backup主机之间的故障转移和自动切换;两台安装好Keepalived软件并启动服务后,开始正常工作,由角色为Master的主机获得资源对用户提供服务,角色为Backup的主机作为Master主机的热备;当Master主机失效或故障时,Backup将自动接管Master主机的所有工作,包括VIP和其他资源;当Master故障修复后,又会自动接管回它原来处理的工作,角色为Backup的组件则同时释方Master失效时接管的工作,恢复最初的和谐工作状态;
> * 注:当Master故障恢复后,Backup也可以不释放资源,仍由Backup占有,通过配置抢占模式。
## 说的好不如做的好之Keepalived+LVS实战
```
|VIP:172.16.1.80|
|
------------+----------------------------+----------------------------+----------------------------+------------
| | | |
eth0|172.16.1.11 eth0|172.16.1.12 eth0|172.16.1.21 eth0|172.16.1.22
+-----------+-----------+ +-----------+-----------+ +-----------+-----------+ +-----------+-----------+
| [ Master ] | | [ Backup ] | | [Nginx1] | | [Nginx2] |
| | | | | | | |
| Keepalived | | Keepalived | | Nginx | | Nginx |
| ipvsadm | | ipvsadm | | | | |
+-----------------------+ +-----------------------+ +-----------------------+ +-----------------------+
```