Keepalived 详解 Keepalived 是一个基于VRRP虚拟路由冗余协议的轻量级高可用解决方案最初为 LVSLinux Virtual Server设计用于监控集群节点状态并实现故障自动转移。它通过虚拟 IPVIP漂移机制在主节点故障时自动将服务切换到备用节点整个过程对用户透明。一、核心架构三大模块Keepalived 由三个核心模块组成模块职责Core核心模块负责主进程启动、维护以及全局配置文件的加载和解析VRRP Stack实现 VRRP 协议处理主备节点间的状态同步、心跳检测和故障切换Checkers健康检查模块监控后端真实服务器如 Nginx、MySQL 等的运行状态支持 TCP、HTTP、SSL 等多种检查方式二、VRRP 协议工作原理VRRP 是理解 Keepalived 的关键角色分配集群中一台为 MASTER主节点其余为 BACKUP备节点VIP 持有MASTER 持有虚拟 IPVIP对外提供服务心跳通告MASTER 周期性通过组播地址224.0.0.18发送 VRRP 通告报文故障切换BACKUP 在超时时间内未收到通告默认约 3 秒判定 MASTER 故障根据优先级重新选举新的 MASTERVIP 漂移新 MASTER 通过发送免费 ARP 报文将 VIP 和虚拟 MAC 地址00-00-5e-00-01-VRID通告给网络设备完成无缝切换两种工作模式抢占模式默认原 MASTER 恢复后若优先级更高会自动抢回 MASTER 角色非抢占模式原 MASTER 恢复后不会主动抢回需等当前 MASTER 故障才参与选举三、配置文件结构Keepalived 的配置文件为/etc/keepalived/keepalived.conf主要由以下几个段落组成1.全局定义段global_defsglobal_defs{notification_email{adminexample.com# 故障通知邮件地址}notification_email_from keepalivedexample.com smtp_server127.0.0.1# SMTP 服务器地址smtp_connect_timeout30router_id LVS_MASTER# 主机标识通常配置主机名}2.VRRP 实例段vrrp_instancevrrp_instance VI_1{state MASTER# 主节点为 MASTER备节点为 BACKUPinterface eth0# 绑定 VIP 的网络接口virtual_router_id51# 虚拟路由 ID主备节点必须一致priority100# 优先级1-254MASTER 必须高于 BACKUPadvert_int1# 心跳通告间隔秒主备必须一致nopreempt# 非抢占模式可选authentication{# 认证配置主备必须一致auth_type PASS auth_pass123456}virtual_ipaddress{# 虚拟 IP 地址可配置多个192.168.1.100/24 dev eth0}track_script{# 关联健康检查脚本chk_nginx}notify_master/path/to/master.sh# 切换为 MASTER 时执行notify_backup/path/to/backup.sh# 切换为 BACKUP 时执行notify_fault/path/to/fault.sh# 故障时执行}3.健康检查脚本段vrrp_scriptvrrp_script chk_nginx{script/etc/keepalived/check_nginx.sh# 检查脚本路径interval2# 每 2 秒执行一次weight-20# 检测失败时优先级降低 20fall2# 连续 2 次失败才算真正故障rise1# 1 次成功即认为恢复}4.虚拟服务器段virtual_server用于 LVS 负载均衡virtual_server192.168.1.10080{delay_loop6# 健康检查间隔秒lb_algo wrr# 负载均衡算法wrr加权轮询lb_kind DR# LVS 模式NAT / DR / TUNpersistence_timeout50# 会话保持时间秒protocol TCP real_server192.168.1.1180{weight1TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port80}}real_server192.168.1.1280{weight2TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port80}}}四、完整实战示例Keepalived Nginx 双机热备1.环境规划节点物理 IP角色Node1192.168.10.11MASTERNode2192.168.10.12BACKUPVIP192.168.10.100虚拟 IP2.Node1MASTER配置global_defs{router_id Node1}vrrp_script chk_nginx{script/etc/keepalived/check_nginx.shinterval2weight-20fall2rise1}vrrp_instance VI_1{state MASTER interface eth0 virtual_router_id51priority100advert_int1authentication{auth_type PASS auth_pass123456}track_script{chk_nginx}virtual_ipaddress{192.168.10.100/24}}3.Node2BACKUP配置global_defs{router_id Node2}vrrp_script chk_nginx{script/etc/keepalived/check_nginx.shinterval2weight-20fall2rise1}vrrp_instance VI_1{state BACKUP interface eth0 virtual_router_id51priority90# 低于 MASTER 的优先级advert_int1authentication{auth_type PASS auth_pass123456}track_script{chk_nginx}virtual_ipaddress{192.168.10.100/24}}健康检查脚本/etc/keepalived/check_nginx.sh#!/bin/bash# 检查 Nginx 进程是否存活if!pgrep-xnginx/dev/null;then# 尝试重启 Nginxsystemctl start nginxsleep2# 如果重启失败返回非 0 值触发优先级降低if!pgrep-xnginx/dev/null;thenexit1fifiexit01chmod x /etc/keepalived/check_nginx.sh五、安装与启动# 安装yuminstallkeepalived-y# CentOS/RHELaptinstallkeepalived-y# Ubuntu/Debian# 启动并设置开机自启systemctl start keepalived systemctlenablekeepalived# 查看状态systemctl status keepalived# 验证 VIP 是否绑定ipaddr show eth0六、常见应用场景Keepalived NginxWeb 服务器高可用VIP 漂移实现故障自动切换Keepalived LVS四层负载均衡高可用Keepalived 同时管理 LVS 规则和 VIPKeepalived HAProxyHAProxy 高可用Keepalived 负责 VIP 漂移Keepalived MySQL数据库主从高可用切换注意事项主备节点的virtual_router_id、advert_int、auth_pass必须一致VIP 应与物理 IP 在同一网段避免额外路由配置生产环境建议开启vrrp_strict严格执行 VRRP 规范防火墙需放行 VRRP 协议协议号 112和组播地址224.0.0.18