我一直在尝试使用 glusterfs 服务器设置异地复制。在我的测试环境和暂存环境中,一切都按预期工作,但后来我尝试了生产并卡住了。
假设我有
Gluster FS 服务器位于公共 IP 1.1.1.1 上
gluster fs slave 在公共 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
正如您在上面的防火墙丢弃日志中看到的,从属 gluster 守护程序的端口 24007 在从属服务器上接口 eth0 的私有 IP 上通告,并且应该是 eth1 私有 IP 的 IP。所以主控无法连接,会超时
有没有办法强制 gluster 服务器通告接口 eth1 或仅绑定到它?
我使用 cfengine 和 ansible 来推送配置,因此绑定到接口可能是比 IP 更好的解决方案,但无论哪种解决方案都可以。
提前谢谢你。
我遇到了这个问题,但在不同的上下文中。我试图异地复制两个节点,这两个节点都位于 NAT(不同区域中的 AWS 实例)后面。
当主站通过公共IP连接到从站以检查卷兼容性/大小和其他详细信息时,它会检索从站的主机名,该主机名通常会解析为仅在该远程区域中有意义的名称。
然后,它在以后设置会话时使用该主机名回拨回从属服务器,这将失败,因为该主机名解析为不同区域中的私有 IP。
我对此问题的解决方法是在创建卷、探测对等方和建立异地复制时使用主机名,然后添加一个/etc/hosts 条目映射从属主机名,该主机名通常解析为其私有 IP 到其公共 IP,而不是它的私有 IP。
这让你达到了建立会话的地步,但我实际上没有任何运气让它同步,因为它在很长一段时间内再次使用了错误的 IP。
编辑:
我实际上已经设法通过在双方添加/etc/hosts hacks 来让它运行。
GlusterFS没有网络层的概念。检查您的路线。如果异地复制从属服务器的下一跃点位于 eth1 上,则 gluster 将在该接口上为从属 IP 地址打开一个端口。
此外,请确保防火墙配置为转发此端口上的异地复制流量。