![keepalived 可以在具有 IPv6 地址的两个节点之间共享一个虚拟 IPv4 地址吗?](https://linux22.com/image/776058/keepalived%20%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%85%B7%E6%9C%89%20IPv6%20%E5%9C%B0%E5%9D%80%E7%9A%84%E4%B8%A4%E4%B8%AA%E8%8A%82%E7%82%B9%E4%B9%8B%E9%97%B4%E5%85%B1%E4%BA%AB%E4%B8%80%E4%B8%AA%E8%99%9A%E6%8B%9F%20IPv4%20%E5%9C%B0%E5%9D%80%E5%90%97%EF%BC%9F.png)
我所处的环境严重缺乏 IPv4 地址,但 IPv6 地址却很多。我在 IPv6 上运行着各种不错的服务,其中包括 MySQL 复制。现在,我只希望 2 台服务器拥有一个可供外界访问的 IPv4 地址。我尝试了以下配置:
在 Debian 11 上运行 Keepalived v2.1.5。
global_defs {
@server01 router_id server01
@server02 router_id server02
}
vrrp_instance vlan0 {
@server02 state MASTER
@server02 priority 110
@server01 state BACKUP
@server01 priority 100
interface eth0
virtual_router_id 123
@server02 unicast_src_ip 2000:4000:6000:8000::102
@server01 unicast_src_ip 2000:4000:6000:8000::101
unicast_peer {
@server01 2000:4000:6000:8000::102
@server02 2000:4000:6000:8000::101
}
authentication {
auth_type PASS
auth_pass secret
}
virtual_ipaddress {
172.1.2.3 dev eth0
}
}
但这给了我以下错误:
(vlan0): address family must match VRRP instance [172.1.2.3] - ignoring
(vlan0) No VIP specified; at least one is required
我所尝试做的事情可以实现吗?如果可以,如何实现?感觉我遗漏了一些细节...
答案1
正如 keepalived 所说,您不能在一个实例上混合使用地址系列。VRRP 在邻居发现实现方面太深奥,以至于无法抽象出地址系列。将 IPv4 VIP 替换为 IPv6 VIP。
借助高可用性上的 IPv6 寻址,您可以在其基础上提供 IPv4 服务。
如果应用程序可以代理或中继,则将代理放在前面。IPv4 和 IPv6 前端,IPv6 仅后端。VRRP 保持单栈,这可能会简化事情。
或者如果必须,使用 NAT。为 IPv4 创建另一个 VRRP 实例。可能是 RFC1918 地址。NAT 服务地址到 VIP。双栈加 NAT 不会减少技术债务,但这可能是您想要的操作方式。