12.2.1 VRRP协议概述与设计目标
VRRP(Virtual Router Redundancy Protocol)在局域网内通过多台路由器/服务器组成“虚拟路由器”,对外提供稳定的VIP,从而避免单点故障。Keepalived基于VRRP完成主备切换,使业务侧始终指向同一网关地址,达到透明切换。
设计目标
1)高可用:主节点故障时,备节点在超时后接管VIP。
2)透明:客户端无需改配置,VIP与虚拟MAC稳定。
3)可控:通过优先级、抢占、健康检查决定主备。
原理草图(VRRP主备与VIP)
安装示例(以Keepalived演示VRRP)
说明:VRRP本身是协议,本节用Keepalived作为实现载体进行演示。
# Debian/Ubuntu
sudo apt update
sudo apt -y install keepalived
# RHEL/CentOS
sudo yum -y install keepalived
# 检查版本与服务状态
keepalived -v
systemctl enable --now keepalived
命令解释:
- keepalived -v 查看版本,确认已安装。
- systemctl enable --now 设置开机自启并立即启动。
最小可运行示例(主/备两台)
主节点
/etc/keepalived/keepalived.conf
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.100/24 dev eth0
}
}
备节点
/etc/keepalived/keepalived.conf
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.100/24 dev eth0
}
}
应用配置并验证:
# 重载配置
sudo systemctl restart keepalived
# 在主节点查看VIP是否生效
ip addr show dev eth0 | grep 10.0.0.100
命令解释:
- virtual_router_id 必须一致,否则无法组成同一VRRP组。
- priority 越大越优先成为Master。
- advert_int 通告间隔,备节点超时未收到通告将切换。
观察VRRP通告报文(示例)
# 使用tcpdump抓取VRRP(协议号112)
sudo tcpdump -i eth0 vrrp
预期效果:看到周期性VRRP Advertisement报文;若主节点停机,备节点开始发通告并接管VIP。
手动模拟VIP(理解协议透明性)
# 临时添加VIP到网卡(模拟接管)
sudo ip addr add 10.0.0.100/24 dev eth0
# 删除VIP
sudo ip addr del 10.0.0.100/24 dev eth0
命令解释:
- ip addr add/del 用于理解VIP如何绑定到网卡上。
常见排错要点
1)VIP不漂移:
- 检查virtual_router_id是否一致。
- 检查auth_pass一致性。
- 确认interface是否为实际业务网卡。
2)抓不到VRRP报文:
- 交换机是否隔离组播/VRRP报文。
- 使用tcpdump -i eth0 vrrp确认。
3)抢占不符合预期:
- 检查priority,确认是否启用抢占策略(后续章节详述)。
练习
1)将主节点priority从150改为90,观察VIP是否漂移到备节点。
2)调整advert_int为2,测量切换时间变化。
3)使用tcpdump记录切换前后报文变化,并写出时间线。