Linux部署Keepalived实现高可用VIP切换,关键在于环境适配:物理机/私有云可直用VRRP组播绑定VIP;公有云(如阿里云)必须先在控制台创建并绑定HaVip,keepalived仅通知状态,virtual_ipaddress只能填已绑定地址,否则VIP不生效。

Linux 下部署 Keepalived 实现高可用虚拟 IP 切换,关键不在“装上就行”,而在于环境适配和配置闭环。物理机或私有云可直接走 VRRP 组播完成 VIP 绑定与漂移;公有云(如阿里云、腾讯云)则必须先在控制台创建并绑定 HaVip,Keepalived 仅负责状态通知,不能越权宣告未授权 IP。
先确认你跑在哪种网络环境
这是所有操作的起点,错一步,后面全白搭:
- 物理机、VMware、OpenStack 或自建私有云:可直接用 keepalived 在网卡上 add/del VIP,依赖组播 224.0.0.18 协商主备
-
阿里云 ECS、腾讯云 CVM、AWS EC2 等公有云:必须先在控制台申请 HaVip(或等效资源,如 AWS 的 ENI Secondary IP),并手动绑定到主备两台实例(需在同一交换机/VPC 子网内);keepalived.conf 中
virtual_ipaddress只能填这个已绑定的地址,填别的无效
安装 Keepalived 要看版本和功能需求
包管理器安装快,但生产环境建议源码编译,尤其需要健康检查或动态权重时:
- Debian/Ubuntu:
sudo apt-get install -y keepalived(默认不含--enable-vrrp,脚本检测可能不生效) - RHEL/CentOS 7+:
yum install -y keepalived(通常为 1.3.x,2.2.x 起才稳定支持vrrp_script权重调整) - 推荐源码安装(以 2.2.8 为例):
wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gztar zxf keepalived-2.2.8.tar.gz && cd keepalived-2.2.8./configure --prefix=/usr/local --sysconfdir=/etc --enable-vrrp --enable-ipvsmake && sudo make installsudo ln -sf /usr/local/sbin/keepalived /usr/sbin/keepalived
核心配置项不能写错
90% 的 VIP 不漂移问题集中在这几个字段,且日志往往只报一行,排查耗时长:
-
state 和 priority 必须匹配预期角色:主节点写
state MASTER,备节点写state BACKUP;priority 主节点建议 ≥100,备节点 ≤95,差值至少大于advert_int(默认 1 秒) -
interface 填真实网卡名:用
ip -br a查,CentOS 7+ 多为ens33,Ubuntu 22.04 可能是enp0s3,别凭经验写eth0 -
authentication 块必须完全一致:
auth_pass长度 ≤8 字符,两端一模一样,否则日志报Invalid checksum - virtual_router_id 主备必须相同:取值 1–255,同一局域网内不能与其他 VRRP 组冲突
健康检查要用 track_script,不是 check_script
Keepalived 2.0+ 已废弃 check_script,继续用会导致脚本静默不执行,VIP 永远不飘:
- 定义脚本块(全局位置,不在
vrrp_instance内):vrrp_script chk_http {<br> script "/opt/keepalived/check_http.sh"<br> interval 3<br> weight -20<br> } - 在
vrrp_instance中引用:track_script {<br> chk_http<br> } - 脚本必须返回 exit code:0 表示健康,非 0 触发降权或切换;输出内容过长会截断,导致误判,保持 stdout 精简
验证方式因环境而异
别只盯着 ip addr,不同环境有效判断标准完全不同:
-
物理/私有云环境:运行
ip addr show dev ens33看 VIP 是否出现在对应网卡下;用tcpdump -i ens33 host 224.0.0.18确认 VRRP 报文收发正常 -
公有云环境:VIP 是否生效,**必须查控制台中 HaVip 关联的 ECS 实例是否已变更**;再配合
journalctl -u keepalived -n 30看是否有Entering MASTER STATE;防火墙不用开 224.0.0.18 —— 公有云通常禁用组播,keepalived 实际走平台内部心跳
不复杂但容易忽略。











