12.1.6 高可用拓扑模式与设计取舍
高可用拓扑模式与设计取舍#
本节对Keepalived常见高可用拓扑进行对比,并给出可执行配置示例、关键命令、排错思路与练习。
原理草图(拓扑对比)
1) 单活主备:简单、成本低#
适用:业务可接受短暂切换,优先简化运维。
配置示例(两台节点,VIP=10.0.0.10)
/etc/keepalived/keepalived.conf(Master)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24 dev eth0
}
}
/etc/keepalived/keepalived.conf(Backup)
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24 dev eth0
}
}
关键命令与预期效果
# 安装并启动(以CentOS/RHEL为例)
yum -y install keepalived
systemctl enable --now keepalived
# 查看VIP是否在Master上
ip addr show dev eth0 | grep 10.0.0.10
# 预期:Master显示VIP,Backup不显示
2) 双活主备:资源利用高,复杂度更高#
适用:上游或应用可访问多VIP,且有会话保持能力。
示例:两台节点分别主各自VIP
NodeA(主VIP1)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 61
priority 150
virtual_ipaddress { 10.0.0.10/24 dev eth0 }
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 62
priority 100
virtual_ipaddress { 10.0.0.11/24 dev eth0 }
}
NodeB(主VIP2)
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 61
priority 100
virtual_ipaddress { 10.0.0.10/24 dev eth0 }
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 62
priority 150
virtual_ipaddress { 10.0.0.11/24 dev eth0 }
}
流量验证
# 两台都应有一个VIP
ip addr show dev eth0 | egrep '10.0.0.10|10.0.0.11'
3) 三节点仲裁:降低脑裂风险#
适用:跨机房或链路不稳定场景。
思路示例:通过第三节点做外部检测,结合track_script调整优先级。
/etc/keepalived/keepalived.conf(主备同配)
vrrp_script chk_quorum {
script "/usr/local/bin/check_quorum.sh"
interval 2
weight -50
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 71
priority 150
track_script { chk_quorum }
virtual_ipaddress { 10.0.0.10/24 dev eth0 }
}
/usr/local/bin/check_quorum.sh
#!/bin/bash
# 能ping通仲裁节点则返回0,反之返回1
ping -c1 -W1 10.0.0.99 >/dev/null 2>&1
预期效果:仲裁不可达时,主节点优先级下降,触发备节点接管。
4) 多VIP分组:业务隔离与故障域缩小#
适用:不同业务域、不同切换策略。
示例:分组与一致性控制
vrrp_instance VI_APP1 {
state MASTER
interface eth0
virtual_router_id 81
priority 150
virtual_ipaddress { 10.0.1.10/24 dev eth0 }
}
vrrp_instance VI_APP2 {
state MASTER
interface eth0
virtual_router_id 82
priority 150
virtual_ipaddress { 10.0.2.10/24 dev eth0 }
}
设计取舍要点(命令与指标)#
- 切换时延:
advert_int、脚本检查频率决定切换速度。 - 抖动控制:禁抢占或延迟抢占,避免频繁切换。
- 命令检查:
# 查看keepalived状态与日志
systemctl status keepalived
journalctl -u keepalived -f
# 查看VRRP组与VIP
ip -4 addr show dev eth0
排错清单(典型问题)#
- VIP不漂移:检查
virtual_router_id是否一致、auth_pass是否一致、组播是否被交换机/安全组拦截。 - 频繁切换:检查
track_script是否返回非0、链路抖动、CPU过高导致心跳延迟。 - 双活冲突:检查是否意外开启抢占,或优先级设置错误。
常用排错命令解释
# 抓VRRP报文(确认心跳与选举)
tcpdump -ni eth0 vrrp
# 查看keepalived配置语法
keepalived -t -f /etc/keepalived/keepalived.conf
练习#
- 在两台虚拟机上搭建单活主备,模拟关闭Master网卡,记录VIP漂移时间。
- 改为双活主备,验证两台各自拥有一个VIP。
- 添加
track_script并模拟仲裁不可达,观察优先级降低与切换行为。