在关键业务系统中,单点故障可能导致服务中断,影响用户体验甚至造成经济损失。Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议的开源高可用解决方案,可实现双机或多机之间的虚拟 IP(VIP)自动漂移,保障服务连续性。openEuler 22.03 LTS 完整支持 Keepalived,并可与 HAProxy、Nginx、数据库等服务无缝集成。本文将演示如何在两台 openEuler 22.03 LTS 主机上部署 Keepalived,构建一个主备高可用集群,当主节点故障时,VIP 自动切换至备用节点。
一、环境说明
- 主节点(Master):
- 主机名:
node1 - IP 地址:
192.168.160.11 - 角色:默认持有 VIP
- 备节点(Backup):
- 主机名:
node2 - IP 地址:
192.168.160.12 - 角色:主节点故障时接管 VIP
- 虚拟 IP(VIP):
192.168.160.100 - 测试服务:Nginx(用于验证 VIP 切换后服务可用)
- 网络要求:两节点二层互通,允许 VRRP 多播(或单播)
注意:若在云平台(如华为云、阿里云)部署,需使用单播模式(因多播通常被禁用)。
二、在两节点上安装 Keepalived 与 Nginx
启动 Nginx 并设置首页标识:
确保可通过各自 IP 访问网页。
三、配置 Keepalived(主节点 node1)
编辑配置文件 /etc/keepalived/keepalived.conf:
内容如下(使用单播模式,兼容云环境):
获取网卡名:ip a,常见为 eth0、ens33、enp0s3 等。
四、配置 Keepalived(备节点 node2)
配置几乎相同,仅修改以下字段:
五、启动 Keepalived 服务
在两节点上执行:
验证 VIP 是否绑定到主节点:
应仅在 node1 上显示该 VIP。
六、测试高可用故障转移
- 正常访问 VIP:
- 模拟主节点故障(在 node1 上停止 Nginx):
Keepalived 检测到 Nginx 进程消失(chk_nginx 脚本失败),将降低优先级(100 → 95),低于备节点(90 → 实际仍为 90,但主已降权),触发 VIP 漂移。
- 再次访问 VIP:
- 恢复主节点:
由于主节点优先级恢复为 100 > 90,VIP 将自动切回 node1(抢占模式默认启用)。
七、防火墙与 SELinux 注意事项
- 防火墙:VRRP 使用协议号 112(非 TCP/UDP),需放行:
- SELinux:若启用,需允许脚本执行(或设为 permissive 模式测试):
八、日志监控
查看 Keepalived 日志:
关键日志示例:
VRRP_Instance(VI_1) Transition to MASTER STATE VRRP_Instance(VI_1) Entering BACKUP STATE VRRP_Script(chk_nginx) failed
九、生产环境建议
- 健康检查增强:除进程检查外,可增加端口探测(如
curl -f http://localhost); - 非抢占模式:若不希望主恢复后立即抢回 VIP,可在主节点配置
nopreempt; - 多 VIP 支持:一个 Keepalived 实例可管理多个
virtual_ipaddress; - 与 HAProxy 集成:将 VIP 绑定到 HAProxy 前端,实现“高可用 + 负载均衡”双保险。
在关键业务系统中,单点故障可能导致服务中断,影响用户体验甚至造成经济损失。Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议的开源高可用解决方案,可实现双机或多机之间的虚拟 IP(VIP)自动漂移,保障服务连续性。openEuler 22.03 LTS 完整支持 Keepalived,并可与 HAProxy、Nginx、数据库等服务无缝集成。本文将演示如何在两台 openEuler 22.03 LTS 主机上部署 Keepalived,构建一个主备高可用集群,当主节点故障时,VIP 自动切换至备用节点。
一、环境说明
node1192.168.160.11node2192.168.160.12192.168.160.100二、在两节点上安装 Keepalived 与 Nginx
启动 Nginx 并设置首页标识:
确保可通过各自 IP 访问网页。
三、配置 Keepalived(主节点 node1)
编辑配置文件
/etc/keepalived/keepalived.conf:内容如下(使用单播模式,兼容云环境):
global_defs { router_id NODE1 enable_script_security } vrrp_script chk_nginx { script "/usr/bin/pgrep -x nginx" interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER interface eth0 # 替换为实际网卡名(如 ens33) virtual_router_id 51 # 主备必须一致 priority 100 # 主 > 备 advert_int 1 # 使用单播通信(避免依赖多播) unicast_src_ip 192.168.160.11 unicast_peer { 192.168.160.12 } authentication { auth_type PASS auth_pass MyVrrpPass123! } virtual_ipaddress { 192.168.160.100/24 } track_script { chk_nginx } }四、配置 Keepalived(备节点 node2)
配置几乎相同,仅修改以下字段:
global_defs { router_id NODE2 enable_script_security } vrrp_script chk_nginx { script "/usr/bin/pgrep -x nginx" interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 # 必须低于主节点 advert_int 1 unicast_src_ip 192.168.160.12 unicast_peer { 192.168.160.11 } authentication { auth_type PASS auth_pass MyVrrpPass123! # 必须与主节点一致 } virtual_ipaddress { 192.168.160.100/24 } track_script { chk_nginx } }五、启动 Keepalived 服务
在两节点上执行:
验证 VIP 是否绑定到主节点:
应仅在
node1上显示该 VIP。六、测试高可用故障转移
Keepalived 检测到 Nginx 进程消失(
chk_nginx脚本失败),将降低优先级(100 → 95),低于备节点(90 → 实际仍为 90,但主已降权),触发 VIP 漂移。由于主节点优先级恢复为 100 > 90,VIP 将自动切回 node1(抢占模式默认启用)。
七、防火墙与 SELinux 注意事项
八、日志监控
查看 Keepalived 日志:
关键日志示例:
VRRP_Instance(VI_1) Transition to MASTER STATEVRRP_Instance(VI_1) Entering BACKUP STATEVRRP_Script(chk_nginx) failed九、生产环境建议
curl -f http://localhost);nopreempt;virtual_ipaddress;