VRRP协议
keepalived 是一个基于 VRRP 协议来实现的服务高可用方案,从而可以避免 IP 单点故障。
一般与其他负载均衡技术,如 LVS,Nginx 等一起来工作来达到集群高可用的目的
VRRP 简介(转发机制)
- VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)将可以承担网关功能的路由器加入到备份组中,形成一台虚拟路由器,由 VRRP 的选举机制决定哪台路由器承担转发任务,局域网内的主机只需将虚拟路由器配置为缺省网关
- VRRP 是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器 3.VRRP是一种容错协议,在提高可靠性的同时,简化了主机的配置。在具有多播或广播能力的局域网(如以太网)中,借助 VRRP 能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息
- VRRP 协议的实现有 VRRPv2 和 VRRPv3 两个版本, VRRPv2 基于 IPv4 , VRRPv3 基于 IPv6
- VRRP 路由器:所有运行 VRRP 协议的路由器就叫做 VRRP 路由器
- VRRP 备份组:多台路由器被分到一个组中,在这个组中选举出一台主路由器,其他作为备份路由器。平常时候都是主路由器一个工作,备份路由器空闲,当主路由器故障后,从多台备份路由器中选举出一台替代故障的主路由器工作。这一组中的路由器构成了一个备份组。
- 虚拟路由器:虚拟路由器是 VRRP 备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。从备份组外面看备份组中的路由器,感觉组中的所有路由器就像一个一样,可以理解为在一个组中:主路由器 + 所有备份路由器=虚拟路由器。虚拟路由器有一个虚拟的 IP 地址和 MAC 地址。如果虚拟 IP 和备份组中的某台路由器的 IP 相同的话,那么这台路由器称为 IP 地址拥有者,并且作为备份组中的主路由器。
VRRP 状态
VRRP 路由器在运行过程中有三种状态:
- Initialize 状态:系统启动后就进入 Initialize ,此状态下路由器不对 VRRP 报文做任何处处理,可以理解为初始化
- Master 状态:路由器会发送 VRRP 通告,发送免费 ARP 报文。
- Backup状态:接受 VRRP 通告。
一般主路由器处于 Master 状态,备份路由器处于 Backup 状态。
VRRP工作过程如下
- 路由器使用 VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为 Master 路由器,优先级低的成为 Backup 路由器。Master 路由器定期发送 VRRP 通告报文,通知备份组内的其他设备自己工作正常;Backup 路由器则启动定时器等待通告报文的到来。
- 在抢占方式下,当 Backup 路由器收到 VRRP 通告报文后,会将自己的优先级与通告报 文中的优先级进行比较。如果大于通告报文中的优先级,则成为 Master 路由器;否则将保持 Backup 状态
- 在非抢占方式下,只要 Master 路由器没有出现故障,备份组中的路由器始终保持 Master 或 Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为 Master 路由器
- 如果 Backup 路由器的定时器超时后仍未收到 Master 路由器发送来的 VRRP 通告报文,则认为 Master 路由器已经无法正常工作,此时 Backup 路由器会认为自己是 Master 路由器,并对外发送 VRRP 通告报文。备份组内的路由器根据优先级选举出 Master 路由器,承担报文的转发功能。
在项目中的体现
如图,可以看到前端在请求后端时,并不是让它直接将请求打到实际的服务器上面来,而是去请求虚拟 IP ,此时如果 master 服务器没有出现故障的话,就会由它将前端的请求打到真实的服务器上面去
如果 master 不能工作的话,就会由 backup 服务器将前端请求打到真实的服务器上面(图中拿虚线来表示当 master 宕掉时,由 backup 来负责转发请求),这样就实现了服务高可用。