keepalived 可以在具有 IPv6 地址的两个节点之间共享一个虚拟 IPv4 地址吗?

keepalived 可以在具有 IPv6 地址的两个节点之间共享一个虚拟 IPv4 地址吗?

我所处的环境严重缺乏 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 不会减少技术债务,但这可能是您想要的操作方式。

相关内容