keepalived
是一个用于高可用性(High Availability, HA)的软件,主要用于实现 Linux 虚拟服务器的故障转移和健康检查。它通过 VRRP(Virtual Router Redundancy Protocol, 虚拟路由冗余协议)来管理虚拟路由器,同时提供健康检查功能以监控服务状态。
1. 工作原理概览
- VRRP 实现:
keepalived
使用 VRRP 协议来选举主节点(Master)和备份节点(Backup)。- 主节点负责处理所有网络流量,而备份节点处于待命状态。
- 如果主节点出现故障,备份节点会接管虚拟 IP 地址并成为新的主节点。
- 健康检查:
keepalived
可以配置成定期发送健康检查请求到各个服务端点。- 如果某个服务没有响应或响应不符合预期,该服务将被视为不可用。
- 在这种情况下,
keepalived
可以从故障的服务上移除流量,并将流量重新分配给健康的实例。
2. 核心组件
- Core Check Functionality:
- 这是
keepalived
的核心部分,负责执行健康检查。 - 支持多种类型的检查,如 TCP、HTTP、HTTPS 和其他自定义检查。
- VRRP Stack:
- 实现 VRRP 协议,管理虚拟路由器。
- 包括选举主节点、维护虚拟 IP 地址等。
- IPVS Daemon:
- 用于管理 IPVS(IP Virtual Server)表,即负载均衡器的核心组件。
keepalived
可以与 IPVS 配合工作来实现基于 IP 的负载均衡。
3. 配置文件结构
keepalived
的配置文件通常位于 /etc/keepalived/keepalived.conf
,包含以下主要部分:
- Global Definitions:
- 定义全局参数,如日志级别、脚本路径等。
- VRRP Instances:
- 每个 VRRP 实例定义了如何参与 VRRP 组。
- 包括状态(Master 或 Backup)、优先级、虚拟 IP 地址、通告间隔等。
- Health Checks:
- 定义健康检查的具体规则。
- 可以针对不同的服务进行配置。
4. 故障转移流程
- 故障检测:
- 当
keepalived
发现主节点出现问题时,它会立即通知备份节点。
- 角色切换:
- 备份节点接收到故障通知后,会提升自己为主节点,并接管虚拟 IP 地址。
- 这个过程通常很快,可以保证服务的连续性。
- 网络流量重定向:
- 客户端连接会被自动重定向到新的主节点上。
综上所述,以上就是 keepalived
的基本工作原理。它通过 VRRP 和健康检查机制实现了服务的高度可用性和负载均衡。