Keepalived 高可用服务对之间的故障切换转移,是通过 VRRP(Virtual Router Redundancy Protocol , 虚拟路由器冗余协议)来切换的。
在 Keepalived 服务正常工作时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备 Backup 节点自己还活着,当主 Master 节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master 节点的心跳了,于是调用自身的接管程序,接管主 Master 节点的 IP 资源及服务。而当主 Master 节点恢复时,备 Backup 节点又会释放主节点故障时自身接管的 IP 资源及服务,恢复到原来的备用角色。
那么,什么是 VRRP 呢?
VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP 的出现就是为了解决静态路由的单点故障问题,VRRP 是通过一种竞选机制来将路由的任务交给某台 VRRP 路由器的。
VRRP 早期是用来解决交换机、路由器等设备单点故障的,下面是交换机、路由的 Master 和 Backup 切换原理描述,同样适用于 Keepalived 的工作原理。
在一组 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-10-{VRID}。所以,在一个虚拟路由器中,不管谁是 Master,对外都是相同的 MAC 和 IP (称之为 VIP)。客户端主机并不需要因 Master 的改变而修改自己的路由设置。对它们来说,这种切换是透明的。
在一组虚拟路由器中,只有作为 Master 的 VRRP 路由器会一直发送 VRRP 广播包(VRRP Advertisement messages),此时 Backup 不会抢占 Master。当 Master 不可用时,Backup 就收不到来自 Master 的广播包了,此时多台 Backup 中优先级别最高的路由器会抢占为 Master。这种抢占是非常快速的(可能只有1秒甚至更少),以保证服务的连续性。出于安全性考虑,VRRP 数据包使用了加密协议进行了加密。
[转载]《老男孩web集群实战p480页》