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
    }
}

排错与验证#

  1. VIP未绑定
    - 检查Keepalived服务与配置:
    bash systemctl status keepalived grep -n "virtual_ipaddress" -n /etc/keepalived/keepalived.conf
  2. 客户端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
```

练习#

  1. 在两台主机上配置同一VRID与VIP,验证MASTER上 ip addr 有VIP、BACKUP无VIP。
  2. 模拟MASTER故障(停止Keepalived),观察客户端 arp -n 是否更新到新MASTER的VMAC。
  3. 修改 garp_master_repeat 为 1 与 5,对比切换后ARP更新时间差异并记录结果。