12.2.2 选举机制与优先级/抢占
选举机制与优先级/抢占#
本节聚焦 VRRP 的选举与抢占行为,给出原理草图、完整配置示例、验证命令、排错与练习,帮助你在 Keepalived 场景中稳定控制主备切换。
1. 原理草图:优先级与抢占如何决定 Master#
2. 选举规则与优先级计算(带命令解释)#
- 优先级范围:1–254;255 为 Address Owner(节点自身配置 VIP)。
- 同优先级:比较IP 地址,数值更高者获胜。
- Master Down Interval:
(3 × advert_int) + skew_time,优先级越高skew_time越小。
查看本机 VRRP 实例与优先级(通过配置确认):
# Keepalived 配置路径
sudo grep -n "vrrp_instance\|priority\|advert_int" /etc/keepalived/keepalived.conf
# 解释:
# vrrp_instance -> 实例名称
# priority -> 优先级
# advert_int -> 通告间隔(秒)
3. 完整示例:双节点选举与抢占#
场景:A 为主(priority 150),B 为备(priority 100),开启抢占。
VIP:192.168.10.100/24,绑定在 eth0。
节点A
/etc/keepalived/keepalived.conf
global_defs {
router_id LVS_A
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
preempt
virtual_ipaddress {
192.168.10.100/24 dev eth0
}
}
节点B
/etc/keepalived/keepalived.conf
global_defs {
router_id LVS_B
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
preempt
virtual_ipaddress {
192.168.10.100/24 dev eth0
}
}
启动并验证:
# 启动服务
sudo systemctl enable --now keepalived
# 验证 VIP 是否在 Master 上
ip -4 a show dev eth0 | grep 192.168.10.100
# 解释:
# ip -4 a show dev eth0 -> 查看接口IPv4地址
# grep VIP -> 判断 VIP 是否漂移到该节点
预期效果:
- 节点A持有 VIP;
- A 关闭后,VIP 漂移到 B;
- A 恢复后(抢占开启),VIP 回到 A。
4. 抢占开关对比(含配置与效果)#
关闭抢占,避免主机恢复即切回:
vrrp_instance VI_1 {
...
nopreempt
}
效果:高优先级节点恢复后不会抢占,直到当前 Master 故障。
5. 通告与选举验证(抓包/日志)#
使用 tcpdump 观察 VRRP 通告:
sudo tcpdump -nn -i eth0 vrrp
# 解释:
# -nn -> 不解析主机名/端口
# -i -> 指定接口
# vrrp -> 过滤 VRRP 协议(IPv4 协议号 112)
查看 Keepalived 日志(不同系统路径可能不同):
# Debian/Ubuntu
sudo journalctl -u keepalived -f
# CentOS/RHEL
sudo tail -f /var/log/messages | grep keepalived
6. 常见故障与排错#
- VIP 不漂移
1) 检查两端virtual_router_id是否一致
2) 检查接口名是否一致eth0/ens33
3) 确认防火墙放行 VRRP(协议 112)
放行 VRRP(示例:firewalld):
sudo firewall-cmd --permanent --add-protocol=vrrp
sudo firewall-cmd --reload
- 频繁切换
1) 检查网络抖动
2) 提高advert_int(如 1 -> 2)
3) 禁用抢占nopreempt
7. 练习#
1) 将节点B优先级改为 160,观察 Master 变化并记录日志关键行。
2) 开启 nopreempt,模拟 A 恢复后 VIP 是否回切。
3) 将 advert_int 改为 2,测算 Master Down Interval 并验证切换时间。