Linux 配置 VIP (Virtual IP) 指南
VIP (Virtual IP) 是一种不绑定在特定物理网卡上的 IP 地址,通常用于实现高可用性 (High Availability) 和 负载均衡,当主服务器发生故障时,VIP 可以快速漂移到备用服务器,确保服务不中断。
配置方法一:手动临时配置 (快速测试)
这种方法适用于临时测试,重启后配置会丢失。
-
添加 VIP 命令:
使用ip addr命令将 VIP 绑定到现有网卡上(假设网卡名为eth0,VIP 为168.1.100)。sudo ip addr add 192.168.1.100/24 dev eth0 -
删除 VIP 命令:
sudo ip addr del 192.168.1.100/24 dev eth0 -
验证配置:
ip addr show eth0
配置方法二:使用 Keepalived 实现自动漂移 (生产环境推荐)
Keepalived 是最常用的 VIP 管理工具,基于 VRRP (Virtual Router Redundancy Protocol) 协议,能够实现主备自动切换。
安装 Keepalived
- CentOS/RHEL:
sudo yum install keepalived -y - Ubuntu/Debian:
sudo apt-get install keepalived -y
配置主节点 (Master)
编辑配置文件 /etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
state MASTER # 角色为 MASTER
interface eth0 # 绑定网卡
virtual_router_id 51 # 实例 ID,主备必须一致
priority 100 # 优先级,数值越大优先级越高
advert_int 1 # 检查间隔(秒)
authentication {
auth_type PASS
auth_pass 1111 # 认证密码,主备必须一致
}
virtual_ipaddress {
192.168.1.100 # 要配置的 VIP 地址
}
}
配置备节点 (Backup)
编辑配置文件 /etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
state BACKUP # 
角色为 BACKUP
interface eth0 # 绑定网卡
virtual_router_id 51 # 实例 ID,必须与主节点一致
priority 90 # 优先级,必须低于主节点
advert_int 1 # 检查间隔
authentication {
auth_type PASS
auth_pass 1111 # 认证密码,必须与主节点一致
}
virtual_ipaddress {
192.168.1.100 # 要配置的 VIP 地址
}
}
启动并设置开机自启
在两台机器上分别执行:
sudo systemctl start keepalivedsudo systemctl enable keepalived
验证与测试
-
检查 VIP 绑定情况:
在 Master 节点执行ip addr,应能看到168.1.100,在 Backup 节点执行则看不到。 -
模拟故障切换:
- 在 Master 节点停止服务:
sudo systemctl stop keepalived。 - 在 Backup 节点执行
ip addr,VIP 应自动漂移到 Backup 节点。 - 重新启动 Master 节点服务,VIP 将自动回漂到 Master 节点(因为其优先级更高)。
- 在 Master 节点停止服务:
关键注意事项
- 防火墙设置:Keepalived 使用 VRRP 协议(组播),如果开启了防火墙,必须允许 VRRP 流量,否则会导致脑裂(两台机器同时持有 VIP)。
sudo ufw allow in on eth0 to 224.0.0.18(Ubuntu)sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p vrrp -j ACCEPT(CentOS)
- 网卡名称:请务必确认
interface参数与实际网卡名称(如ens33,eth0)一致。 - 优先级:Master 的
priority必须高于 Backup,否则无法实现主备逻辑。 - 脑裂风险:若主备之间网络中断,两台机器都会认为对方宕机从而同时抢占 VIP,导致服务异常,建议配置健康检查脚本或确保网络链路稳定。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/492594.html



