glusterfs geo-replication - 具有两个接口的服务器 - 公布的私有IP

glusterfs geo-replication - server with two interfaces - private IP advertised

我一直在尝试使用 glusterfs 服务器设置异地复制。在我的测试环境和暂存环境中,一切都按预期工作,但后来我尝试了生产并卡住了。

假设我有

gluster fs 服务器在 public ip 1.1.1.1

gluster fs slave 在 public 2.2.2.2 上,但是这个 IP 在接口 eth1 上 gluster fs 从服务器上的 eth0 是 192.168.0.1。

所以当我在 1.1.1.1 上启动命令时(防火墙和 ssh 密钥设置正确)

gluster volume geo-replication vol0 2.2.2.2::vol0 create push-pem

我收到一个错误。

无法获取从卷详细信息。请检查从集群和从卷。 异地复制命令失败

在这种情况下错误不是那么重要,问题是从属 IP 地址

2015-03-16T11:41:08.101229+00:00 xxx kernel: TCP LOGDROP: IN= OUT=eth0 SRC=1.1.1.1 DST=192.168.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=24243 DF PROTO=TCP SPT=1015 DPT=24007 WINDOW=14600 RES=0x00 SYN URGP=0 

正如您在上面的防火墙丢弃日志中看到的,slave gluster daemon 的端口 24007 在从属服务器接口 eth0 的私有 IP 上发布,应该是 eth1 私有 IP 的 IP。所以master连接不上会超时

有没有办法强制 gluster 服务器通告接口 eth1 或只绑定到它?

我使用 cfengine 和 ansible 来推送配置,因此绑定到接口可能是比 IP 更好的解决方案,但无论哪种解决方案都行。

提前致谢。

GlusterFS 没有网络层的概念。检查你的路线。如果您的地理复制从站的下一跳在 eth1 上,则 gluster 将在该接口上为从站 IP 地址打开一个端口。

还要确保您的防火墙配置为在此端口上转发异地复制流量。

我遇到过这个问题,但在不同的环境中。 我试图对两个节点进行地理复制,这两个节点都位于 NAT 之后(不同区域的 AWS 实例)。

当主机通过 public IP 连接到从机以检查卷 compatability/size 和其他详细信息时,它会检索从机的主机名,该主机名通常解析为仅有意义的内容在那个偏远地区。

然后它在稍后设置会话时使用该主机名拨回从属服务器,但失败了,因为该主机名解析为不同区域中的私有 IP。

我解决这个问题的方法是在创建卷、探测对等点和建立地理复制时使用主机名,然后添加一个 /etc/hosts 条目映射从属主机名,该主机名通常解析为其私有 IP public IP,而不是私有IP。

这会让您到达建立会话的地步,但实际上我没有任何运气让它同步,因为它在很长一段时间内再次使用了错误的 IP。

编辑:

实际上,我已经 运行 通过在两侧添加 /etc/hosts hack 来实现它。