12.2.3 虚拟IP与虚拟MAC工作原理
虚拟IP(VIP)是对外提供服务的统一访问地址,由VRRP组内当前MASTER节点持有并对外通告。客户端始终访问VIP而非具体主机物理IP,从而在主备切换时无需修改业务配置。VIP的绑定由Keepalived在MASTER节点上动态添加到指定网卡(如eth0或bond0),切换时在MASTER上添加、在BACKUP上删除,确保同一时刻只有一个节点对外提供服务。
虚拟MAC(VMAC)用于确保二层网络中VIP的ARP解析稳定一致。VRRP定义了固定格式的虚拟MAC地址:00:00:5E:00:01:VRID(IPv4),其中VRID为VRRP组号。MASTER节点会使用VMAC向交换机/客户端发布ARP响应,使VIP解析到VMAC,再由MASTER主机以该VMAC进行数据帧收发。切换时,新MASTER接管VMAC并发送无偿ARP(Gratuitous ARP),推动网络设备与客户端更新ARP缓存,降低访问中断时间。
关键命令示例:观察VIP/VMAC与ARP行为#
以下示例在MASTER上查看VIP与VMAC绑定、在客户端侧查看ARP缓存变化:
# MASTER节点:查看VIP是否绑定到网卡
ip addr show dev eth0
# MASTER节点:查看VIP对应的二层邻居条目与MAC
ip neigh show | grep 10.0.0.100
# 客户端:查看VIP的ARP缓存(切换前后对比)
arp -n | grep 10.0.0.100
# MASTER/新MASTER:主动发送无偿ARP,加速ARP更新
# -A 表示ARP Announcement(GARP),-I 指定网卡
arping -A -I eth0 10.0.0.100 -c 3
预期效果:
- ip addr show 中可看到 10.0.0.100 绑定在MASTER网卡上。
- arp -n 显示VIP对应MAC为 00:00:5e:00:01:VRID。
- 切换后,客户端ARP缓存快速更新为新MASTER的VMAC。
配置示例:指定VIP并开启GARP刷新#
Keepalived配置片段(示例路径:/etc/keepalived/keepalived.conf):
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
garp_master_delay 1
garp_master_repeat 3
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
}
排错与验证#
- VIP未绑定
- 检查Keepalived服务与配置:
bash systemctl status keepalived grep -n "virtual_ipaddress" -n /etc/keepalived/keepalived.conf - 客户端ARP未更新导致访问中断
- 触发GARP并清理客户端ARP缓存:
```bash
# MASTER触发GARP
arping -A -I eth0 10.0.0.100 -c 5
# 客户端清理ARP缓存并重试
ip neigh flush 10.0.0.100
ping -c 2 10.0.0.100
3. **MAC异常(非VRRP格式)**
- 检查VRID配置一致性(MASTER与BACKUP必须一致):bash
grep -n "virtual_router_id" /etc/keepalived/keepalived.conf
```
练习#
- 在两台主机上配置同一VRID与VIP,验证MASTER上
ip addr有VIP、BACKUP无VIP。 - 模拟MASTER故障(停止Keepalived),观察客户端
arp -n是否更新到新MASTER的VMAC。 - 修改
garp_master_repeat为 1 与 5,对比切换后ARP更新时间差异并记录结果。