keepalived的单播模式

本文档整理了 Keepalived 单播(unicast)模式的配置示例、测试步骤、行为说明以及常见问题排查要点,适用于两台跨网络或无法使用组播(multicast)环境下的 VRRP 通告。
1. 为什么使用单播(unicast)
-
组播模式占用资源少且配置简单,但组播报文通常无法跨越不同子网或受网络设备(路由器、防火墙)限制。
-
当主/备节点处于不同网络(跨网络)或网络不支持组播时,需改用单播模式,通过指定对端 IP 进行点对点发送 VRRP 通告。
3.配置示例
下面示例为两台主机:KA1 (172.25.254.50) 与 KA2 (172.25.254.60),VIP 为 172.25.254.100。
- KA1(主机 1)
bash
#在KA1中
[root@KA1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
timinglee_zln@163.com
}
notification_email_from timinglee_zln@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 1
vrrp_gna_interval 1
#vrrp_mcast_group4 224.0.0.44 #关闭组播
}
vrrp_instance WEB_VIP {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
unicast_src_ip 172.25.254.50 #指定单播源地址,通常是本机IP
unicast_peer {
172.25.254.60 #指定单播接收地址
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:0
}
}

[root@KA1 ~]# systemctl restart keepalived.service
#在KA2中
[root@KA2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
timinglee_zln@163.com
}
notification_email_from timinglee_zln@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 1
vrrp_gna_interval 1
#vrrp_mcast_group4 224.0.0.44 #关闭组播
}
vrrp_instance WEB_VIP {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
unicast_src_ip 172.25.254.60 #指定单播源地址,通常是本机IP
unicast_peer {
172.25.254.50 #指定单播接收地址
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:0
}
}

[root@KA2 ~]# systemctl restart keepalived.service
#测试
#在KA1中开启独立shell监控播报信息
[root@KA1 ~]# tcpdump -i eth0 -nn src host 172.25.254.50 and dst 172.25.254.60

#在KA2中开启独立shell监控播报信息
[root@KA2 ~]# tcpdump -i eth0 -nn src host 172.25.254.60 and dst 172.25.254.50
#在KA1正常时
#ka2播报信息不显示通告内容

[root@KA1 ~]# systemctl stop keepalived.service
#vip会被迁移到KA2,KA2上开始显示播报内容

[root@KA1 ~]# systemctl start keepalived.service
#vip因为优先级被KA1抢占,KA2中播报停止

6. 常见问题与排查建议
-
无法收到对端单播报文
- 确认两端 IP 能互通(ping),路由正常,防火墙(iptables/nftables)或安全组没有阻止 VRRP/UDP 报文(VRRP 使用 IP 协议号 112,或在单播实现上可能为 UDP --- 视 keepalived 版本与实现)。
- 检查系统是否开启了 rp_filter(反向路径过滤),若开启可能丢弃非本子网的入站包:cat /proc/sys/net/ipv4/conf/*/rp_filter。必要时在对应接口上禁用或调整 rp_filter。
- 确认
unicast_src_ip填写了正确可达的 IP(接口 IP)。 - 检查网络设备(交换机/路由器)是否过滤或修改了单播报文。
-
VIP 无法漂移 / 抢占不生效
- 检查 priority 设置,确认优先级高的一端配置正确。
- 检查是否存在
nopreempt或类似配置阻止抢占。 - 查看 keepalived 日志(通常在 /var/log/messages 或 systemd journal):journalctl -u keepalived -f
-
组播关闭但仍收到组播报文
- 确保
vrrp_mcast_group4注释或设为合适值;在单播模式下不应依赖组播。
- 确保
-
认证失败(auth_pass)
- 确认两端
auth_pass一致且auth_type相同。
- 确认两端
7. 小结
- 单播模式适用于跨网络或组播不可用的场景,通过显式指定对端 IP 来发送 VRRP 通告。
- 关键字段:unicast_src_ip、unicast_peer、virtual_router_id、priority、advert_int、authentication、virtual_ipaddress。
- 测试时使用 tcpdump 验证单播报文,结合 systemctl stop/start 验证 VIP 漂移与抢占行为。
- 关键字段:unicast_src_ip、unicast_peer、virtual_router_id、priority、advert_int、authentication、virtual_ipaddress。
- 测试时使用 tcpdump 验证单播报文,结合 systemctl stop/start 验证 VIP 漂移与抢占行为。
- 排查重点:网络连通性、防火墙、rp_filter、keepalived 日志与配置一致性。