Keepalived 软件起初是专为 LVS 负载均衡软件设计的,用来管理并监控 LVS 集群系统中各个服务节点的状态,后来又加入了能够实现高可用的 VRRP 功能。所以,Keepalived除了可以管理 LVS 软件外,还能够做为其余服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。html
Keepalived 软件主要经过 VRRP 协议实现高可用功能的,VRRP 是 Virtual Router Redundancy Protocol (虚拟路由器冗余协议)的缩写,VRRP 出现的目的就是为了解决动态路由单点故障问题的,它可以保证当个别节点宕机时,整个网络能够不间断的运行。因此,Keepalived 一方面具备配置管理 LVS 的功能,同时还具备对LVS 下面节点进行健康检查的功能,另外一方面也能够实现系统网络服务的高可用功能。安全
Keepalived 软件的官方站点: http://www.keepalived.org服务器
1)管理 LVS 负载均衡软件网络
早期的 LVS 软件,须要经过命令行或脚本实现管理,而且没有针对 LVS 节点的健康检查功能。为了解决 LVS 的这些使用不便的问题,Keepalived就诞生了,能够说,Keepalived软件起初是专为了解决 LVS 的问题而诞生的。所以,Keepalived和LVS的感情很深,它们的关系如同夫妻同样,能够紧密的结合,愉快的工做。Keepalived 能够经过读取自身的配置文件实现经过更底层的接口直接管理 LVS 的配置以及控制服务的启动、中止等功能,这使得 LVS 的应用就更加简单方便了。负载均衡
2)实现对 LVS 集群节点健康检查功能(healthcheck)加密
Keepalived 能够经过在自身的keepalived.conf文件里配置 LVS 的节点 IP 和相关参数实现对 LVS 的直接管理;除此以外,当 LVS 集群中的某一个甚至是几个节点服务器同时发生故障没法提供服务时,Keepalived 服务会自动将失效的节点服务器从 LVS 的正常转发队列中清楚出去,并转换到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复后,Keepalived 服务又会自动地把它们加入到正常转发队列中,对客户提供服务。spa
3)做为系统网络服务的高可用功能(failover)命令行
Keepalived 能够实现任意两台主机之间,例如 Master 和 Backup 主机之间的故障转移和自动切换,这个主机能够是普通的不能停机的业务服务器,也能够是 LVS 负载均衡、Nginx 反向代理这样的服务器。设计
Keepalived 高可用功能实现的原理为:两台主机同时安装好 keepalived 软件并启动服务,开始正常工做时,由角色为 Master 的主机得到全部资源并对用户提供服务,角色 Backup 的主机做为 Master 主机的热备;当角色为 Master 的主机失效或出现故障时,角色为 Backup 的主机将自动接管 Master 主机的全部工做,包括接管 VIP 资源及相应资源服务;而当角色为 Master 的主机故障修复后,又会自动接管回它原来处理的工做,角色为 Backup 的主机则同时释放 Master 主机失效它接管的工做,此时,两台主机将恢复到最初启动时各自的原始角色及工做状态。代理
Keepalived 高可用服务对之间的故障切换转移,是经过 VRRP 协议(虚拟路由冗余协议)来实现的。
在 Keepalived 服务正常工做时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备 Backup 节点本身还活着,当主 Master 节点发生故障时,就没法发送心跳消息了,备节点也就所以没法继续检测到来自Master 节点的心跳了,进而调用自身的接管程序,接管主 Master 节点的 IP 资源及服务。而当主 Master 节点恢复时,备 Backup 节点又会释放主节点故障时自身接管的 IP 资源及服务,恢复到原来备用角色。
VRRP 协议,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP 的出现就是为了解决静态路由的单点故障问题,VRRP 协议是经过一种竞选机制来将路由的任务交给某台 VRRP 路由器的。VRRP 协议早期是用来解决交换机、路由器等设备单点故障的。
1)VRRP 原理描述(一样适用于 Keepalived 的工做原理)
在一组 VRRP 路由器集群中,有多台物理 VRRP 路由器,可是这多台物理的机器并非同时工做的,而是由一台称为 MASTER 的机器负责路由工做,其余的机器都是 BACKUP。MASTER 角色并不是一成不变,VRRP 协议会让每一个 VRRP 路由参与竞选,最终获胜的就是 MASTER。MASTER 拥有虚拟路由器的 IP 地址,咱们把这个 IP 地址称为 VIP,MASTER 负责转发发送给网关地址的数据包和响应 ARP 请求。
2)VRRP 是如何工做的?
VRRP 协议经过竞选机制来实现虚拟路由器的功能,全部的协议报文都是经过 IP 多播(默认的多播地址:224.0.0.18)形式进行发送。虚拟路由器由 VRID (范围0-255)和一组 IP 地址组成,对外表现为一个周知的 MAC 地址:00-00-5E-00-01-{VRID}。因此,在一个虚拟路由器中,无论谁是 MASTER,对外都是相同的 MAC 地址和 IP 地址,若是其中一台虚拟路由器宕机,角色发生切换,那么客户端并不须要由于 MASTER 的变化修改本身的路由设置,能够作到透明的切换。这样就实现了若是一台机器宕机,那么备用的机器会拥有 MASTER 上的 IP 地址,实现高可用功能。
3)VRRP 是如何通讯的?
在一组虚拟路由器中,只有做为 MASTER 的 VRRP 路由器会一直发送 VRRP 广播包,此时 BACKUP 不会抢占 MASTER 。当 MASTER 不可用时,这个时候 BACKUP 就收不到来自 MASTER 的广播包了,此时多台 BACKUP 中优先级最高的路由器会去抢占为 MASTER。这种抢占是很是快速的(可能只有1秒甚至更少),以保证服务的连续性。出于安全性考虑,VRRP 数据包使用了加密协议进行了加密。
什么是脑裂?
因为某些缘由,致使两台高可用服务器在指定时间内,没法检测到对方的心跳消息,各自取得资源及服务的全部权,而此时的两台高可用服务器都还活着并在正常运行,这样就会致使同一个 IP 或服务在两端同时存在发生冲突,最严重的是两台主机占用同一个 VIP 地址,当用户写入数据时可能会分别写入到两端,这可能会致使服务器两端的数据不一致或形成数据丢失,这种状况就被称为脑裂。
致使脑裂发生的缘由
通常来讲,脑裂的发生,有如下几种缘由:
1)高可用服务器之间心跳线链路故障,致使没法正常通讯。
2)高可用服务器上开启了 iptables 防火墙阻挡了心跳消息传输。
3)高可用服务器上心跳网卡地址等信息配置不正确,致使发送心跳失败。
4)其余服务配置不当等缘由,如心跳方式不一样,心跳广播冲突、软件 BUG等。
注意:Keepalived 配置里同一 VRRP 实例若是 virtual_router_id 参数两端配置不一致,也会致使脑裂问题发生。
解决脑裂的具体方案
在实际生产环境中,能够从如下几个方面来防止脑裂问题的发生
1)同时使用串行电缆和以太网电缆链接,同时用两条心跳线路,这样一条线路坏了,另外一个仍是好的,依然可以传送心跳消息
2)当检测到脑裂时强行关闭一个心跳节点(这个功能须要特殊设备支持,如Stonith、fence)。至关于备节点接收不到心跳消息,发送关机命令经过单独的线路关闭主节点的电源。
3)作好对脑裂的监控报警(如邮件及手机短信等或值班),在问题发生时人为第一时间介入仲裁,下降损失。例如,百度的监控报警短信就有上行和下行的区别。报警信息报到管理员手机上,管理员能够经过手机回复对应数字或简单的字符串操做返回给服务器,让服务器根据指令自动处理相应故障,这样解决故障的时间更短。
4)若是开启防火墙,必定要让心跳消息经过,通常经过容许 IP 段的形式。
Keepalived >>>配置详解