Keepalived 是一个在 Linux 系统中广泛使用的软件,用于实现高可用性(High Availability, HA)和负载均衡。它的核心工作原理基于 Virtual Router Redundancy Protocol (VRRP) 协议,旨在避免单点故障,确保关键服务如 Web 服务器、数据库服务器等的不间断运行。以下是 Keepalived 工作原理的详细说明:
1. VRRP 协议基础
- 虚拟路由器 (VRID): Keepalived 使用 VRRP 协议定义一组物理服务器为一个虚拟路由器,这些服务器共享一个虚拟 IP 地址(VIP,Virtual IP)。这个虚拟路由器有一个唯一的标识符,即 VRID。
- 角色划分: 在虚拟路由器组内,服务器分为两种角色:Master 和 Backup。Master 负责处理所有发往 VIP 的流量,而 Backup 服务器则处于待命状态,准备在 Master 故障时接管服务。
- 优先级机制: 每个服务器都有一个 VRRP 优先级,优先级高的服务器成为 Master。默认情况下,优先级可以在配置文件中设定,范围是 1 到 255,数值越大优先级越高。
2. Keepalived 的核心模块
- Core 模块:负责启动和维护 Keepalived 进程,加载配置文件,以及进行基本的系统管理和信号处理。
- Check 模块:执行健康检查,监测本地系统或远程服务的可用性。例如,检查网络接口状态、连接数据库或HTTP服务是否响应等,这些检查结果会影响服务器的 VRRP 优先级,从而影响 Master 选举。
- VRRP 模块:实现了 VRRP 协议,负责 Master 和 Backup 服务器之间的通信,以及 Master 故障时的自动切换。Master 会周期性地发送 VRRP 通告报文(多播到 224.0.0.18),表明自己的活动状态。Backup 服务器监听这些报文,如果没有收到,会根据优先级重新选举新的 Master。
3. 故障切换过程
- 正常运行: Master 节点定期发送 VRRP 通告报文,表明其活性。
- 故障检测: 当 Backup 节点停止接收到 Master 发送的 VRRP 报文,或通过 Check 模块检测到 Master 不可用时,会触发故障切换机制。
- 角色切换: Backup 节点根据优先级确定是否有资格成为新的 Master。如果有更高的优先级或同等优先级但IP地址较大(这是VRRP协议中的一个规则),则会接管 VIP,成为新的 Master,开始处理流量。
- 服务接管: 新的 Master 会立即开始响应发往 VIP 的请求,确保服务不中断。
4. 快速切换与稳定性
Keepalived 设计了快速故障检测和切换机制,确保在 Master 故障后,Backup 能够在极短时间内(通常小于1秒)接管服务,减少服务中断时间。同时,通过健康检查和优先级管理,保障了系统的稳定性和可靠性。
综上所述,Keepalived 通过 VRRP 协议和其内部的模块设计,实现了服务的高可用性,确保了即使在服务器故障的情况下,也能迅速无缝地转移服务,维持业务连续性。