keepalived在ipv6下双机热备原理同ipv4,基于vrrpv3,需启用ipv6栈、配置全局单播地址、放行ff02::12组播、设置version 3及virtual_ipaddress含dev和scope字段,并推荐用curl -6脚本做ipv6健康检查。

Keepalived 在 IPv6 环境下实现双机热备,原理与 IPv4 完全一致,仍基于 VRRP 协议(VRRPv3 支持 IPv6),但需显式启用 IPv6 栈、配置 IPv6 地址、调整内核参数,并确保网络层连通性。实际部署中,IPv6 的组播地址、接口识别和健康检查方式略有差异,稍不注意会导致 VIP 不漂移或状态异常。
IPv6 环境基础准备
两台服务器需运行支持 IPv6 的 Linux 发行版(如 openEuler 24、CentOS 8+、RHEL 9),并确认以下条件已满足:
- IPv6 已启用:执行
sysctl net.ipv6.conf.all.disable_ipv6返回0;若为1,需在/etc/sysctl.conf中设net.ipv6.conf.all.disable_ipv6 = 0并执行sysctl -p - 网卡已分配全局单播 IPv6 地址(非仅 link-local),例如
2001:db8::101/64和2001:db8::102/64 - 防火墙放行 VRRPv3 组播流量:目标地址为
ff02::12(VRRPv3 IPv6 组播地址),协议号为112;以 firewalld 为例:firewall-cmd --permanent --add-rich-rule='rule protocol value="112" accept'firewall-cmd --reload - 关闭或调低 SELinux 影响(
setenforce 0或设为 permissive)
Keepalived 配置要点(IPv6 专用)
主备节点均使用相同 virtual_router_id,但必须将 interface 指向实际承载 IPv6 的物理网卡(如 ens33),且需在 vrrp_instance 块中明确启用 IPv6 支持:
- 主节点(priority 100)配置节选:
global_defs {
router_id NGINX_V6_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
# 关键:启用 IPv6 模式(VRRPv3)
version 3
# 使用 IPv6 虚拟地址(必须带前缀长度)
virtual_ipaddress {
2001:db8::100/64 dev ens33 scope global
}
authentication {
auth_type PASS
auth_pass 1111
}
}- 备节点仅修改两处:
state BACKUP、priority 90;其余(含version 3和virtual_ipaddress格式)必须完全一致 -
注意:
virtual_ipaddress行中的dev ens33和scope global是 IPv6 下必需字段,缺一不可;否则 Keepalived 启动时会报错或 VIP 不生效
IPv6 健康检查适配(推荐脚本方式)
默认的 VRRP 通告仅检测链路层可达性,无法感知 Nginx 是否真正响应 IPv6 请求。建议添加自定义脚本检查 IPv6 HTTP 服务:
- 创建检查脚本(主备节点同步):
/etc/keepalived/check_nginx6.sh
#!/bin/bash
# 检查本地 IPv6 地址上的 Nginx 是否返回 200
curl -6 -s --connect-timeout 2 -o /dev/null -w "%{http_code}" http://[::1] | grep -q "200"- 赋权并测试:
chmod +x /etc/keepalived/check_nginx6.sh && /etc/keepalived/check_nginx6.sh - 在 keepalived.conf 的
vrrp_instance外部添加:
vrrp_script chk_nginx6 {
script "/etc/keepalived/check_nginx6.sh"
interval 2
weight -30
fall 3
rise 2
}
# 然后在 VI_1 块内引用:
track_script {
chk_nginx6
}- 该脚本使用
-6强制走 IPv6,[::1]是 IPv6 回环地址,避免依赖 DNS 或外部解析
验证与排错关键点
启动 Keepalived 后,通过以下命令快速确认状态是否正常:
- 查看 VIP 是否绑定:
ip -6 addr show dev ens33 | grep 2001:db8::100(仅 Master 应显示) - 抓包确认 VRRPv3 通告:
tcpdump -i ens33 ip6 and proto 112 -nn,应看到源为本地 IPv6、目的为ff02::12的周期性包 - 检查 Keepalived 日志:
journalctl -u keepalived -f,关注是否出现VRRP_Instance(VI_1) Entering MASTER STATE或received an invalid VRRP packet - 手动模拟故障:
systemctl stop nginx,观察约 6 秒(3×fall×interval)后 VIP 是否漂移到 Backup 节点











