单点故障指系统中某个关键组件或节点失效后,导致整个服务无法正常运行的问题,常见于数据库、负载均衡、核心业务服务等场景。VIP高可用方案通过主备节点共享虚拟IP,当主节点故障时自动将VIP漂移到备节点,实现服务无感知切换,是解决单点故障的主流方案之一。

VIP高可用核心原理
VIP(Virtual IP)即虚拟IP地址,本身不绑定在具体物理网卡上,而是由高可用组件动态分配到存活的主节点。主流的VIP高可用实现工具是Keepalived,它基于VRRP(虚拟路由冗余协议)实现主备节点间的状态通信和VIP漂移,核心逻辑如下:
- 主备节点运行Keepalived服务,通过心跳包定期检测彼此存活状态
- 主节点持有VIP,对外提供服务,备节点处于待命状态
- 主节点故障后,备节点检测到心跳中断,自动接管VIP并继续对外提供服务
- 主节点恢复后,可根据配置决定是否重新抢回VIP
VIP高可用搭建准备
环境要求
准备两台同网段的Linux服务器,分别作为主节点和备节点,系统版本建议为CentOS 7及以上,同时需要准备一个未被占用的同网段IP作为VIP。本文示例中环境信息如下:
| 节点角色 | 服务器IP | 系统版本 |
|---|---|---|
| 主节点 | 192.168.0.10 | CentOS 7.9 |
| 备节点 | 192.168.0.11 | CentOS 7.9 |
| VIP | 192.168.0.100 | - |
软件安装
两台节点都需要安装Keepalived服务,执行以下命令完成安装:
# 安装依赖和Keepalived yum install -y keepalived # 安装完成后查看版本 keepalived -v
Keepalived配置文件修改
主节点配置
主节点的Keepalived配置文件路径为/etc/keepalived/keepalived.conf,修改内容如下:
global_defs {
# 通知邮件配置,按需开启
notification_email {
admin@ipipp.com
}
notification_email_from keepalived@ipipp.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
# 节点标识,同集群内唯一
router_id node_master
}
# VRRP实例配置
vrrp_instance VI_1 {
# 节点状态,主节点为MASTER
state MASTER
# 绑定的网卡名称,根据实际网卡调整
interface eth0
# 虚拟路由ID,同集群内一致
virtual_router_id 51
# 优先级,主节点高于备节点
priority 100
# 心跳检测间隔,单位秒
advert_int 1
# 认证配置,同集群内一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP配置,可配置多个
virtual_ipaddress {
192.168.0.100
}
}
备节点配置
备节点配置文件结构和主节点基本一致,仅需要调整节点状态、标识、优先级三个参数:
global_defs {
notification_email {
admin@ipipp.com
}
notification_email_from keepalived@ipipp.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node_backup
}
vrrp_instance VI_1 {
# 备节点状态为BACKUP
state BACKUP
interface eth0
virtual_router_id 51
# 优先级低于主节点
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.100
}
}
服务启动与验证
启动Keepalived服务
两台节点分别执行以下命令启动服务并设置开机自启:
# 启动Keepalived systemctl start keepalived # 设置开机自启 systemctl enable keepalived # 查看服务状态 systemctl status keepalived
VIP验证
在主节点执行以下命令查看网卡是否绑定了VIP:
ip addr show eth0
正常情况下可以看到eth0网卡下除了自身IP,还会出现192.168.0.100的VIP地址。此时从同网段其他机器ping该VIP,能够正常通断。
故障切换验证
手动停止主节点的Keepalived服务模拟故障:
systemctl stop keepalived
此时再次在备节点查看eth0网卡信息,会发现VIP已经漂移到备节点,ping VIP依然正常,说明主备切换生效。重新启动主节点的Keepalived服务,若配置未开启抢占模式,VIP会保持在备节点;若开启抢占模式,VIP会回到主节点。
常见问题排查
- VIP未生效:检查网卡名称是否配置正确,防火墙是否放通了VRRP协议(协议号112)
- 主备同时持有VIP:检查virtual_router_id、认证密码是否一致,避免同网段存在其他相同配置的Keepalived集群
- 切换延迟过高:可适当调小advert_int参数,缩短心跳检测间隔,但过小会增加网络开销
VIP高可用单点故障Keepalived负载均衡主备切换修改时间:2026-07-02 04:48:33