为什么GlusterFS复制卷不build议在不同数据中心的主机上使用?

我可以find关于GlusterFS复制卷的任何教程,假设两个(所有)砖块都在同一个专用networking上,这也导致他们必须在同一个数据中心得出结论。

例如“问题出在您想要复制到的存储位于远程networking上,可能位于不同的位置时,GlusterFS不能很好地工作,这是因为GlusterFS不能在复制之间存在高延迟节点“。 是来自https://github.com/GlusterFS/Notes的报价

另外https://gluster.readthedocs.io/en/latest/Administrator%20Guide/Geo%20Replication/表示复制卷不适用于地理复制,但是GlusterFS中真正的“地理复制”机制只能创build只读奴隶不会在任何情况下工作。

所以问题是,为什么不推荐一般,因为我还没有find一个在不同networking上的主机复制卷的例子,甚至不同的数据中心。

我也可以解释为什么我想使用复制卷。 我在德国法兰克福的一个数据中心有一台vServer(OpenVZ),在德国纽伦堡有一台。 两者都与DE-CIX,Deutsche Telekom等有多个对等,并且vServers之间的等待时间<4 ms,在我看来不能被认为是高延迟,无论GlusterFS的定义如何。

我在两台服务器上运行iRedmail服务,MariaDB复制到仅存储邮件configuration的Master-Master复制中。 邮件存储位于磁盘上,我正在使用GlusterFS复制卷进行复制。 到目前为止,我没有看到任何问题(邮件存储大约20 GB的电子邮件,包括附件),并想知道我是否幸运,或者是否有问题,我只是没有发现。 无论如何,我更喜欢遵循在这种情况下我没有做过的最佳实践,而且我想知道您对不同数据中心的主机使用GlusterFS复制卷的想法以及“高延迟”实际意味着什么。

这个问题适用于许多types的数据存储,而不仅仅是GlusterFS。 这是因为距离增加会增加延迟。 build议在同一个子网上也是为了减less由于networking跳跃造成的延迟。

为了保持数据同步,各种服务器必须确保所有服务器具有相同的数据视图。 对于数据读取,延迟效应通常不是问题。 但是,如果多个服务器在同步之前写入同一个块,则会发生严重的数据损坏。 当数据块正在更新时,如果正在更新的数据块被读取,则在不同的服务器数据上的后续更新可能会丢失之前,可能会丢失更改。

locking机制可以用来降低腐败的风险。 但是,随着延迟增加,分布式锁需要更长时间才能获得和释放。 在这种情况下,延迟服务器之间的往返时间。 数据中心之间的通信有三个因素。

邮件数据存储往往是相对较多的阅读。 通常,连接到不同服务器的多个客户端不太可能正在更新相同的文件或目录。 传入的电子邮件和读取它们的客户端之间可能会有一些争用,但延迟不应该是一个重大的问题。 Maildir格式商店应该具有相对较低的争用其他格式。 但是,他们有相对较高的重命名和移动活动,这可能会导致问题,如果你的节点断开连接。

  • 距离:导线数据以毫微秒30厘米,毫微秒300米,或毫秒300公里的速度通过导线传播。 随着距离增加,这会增加显着的延迟
  • 交换时间:每个交换机一个包经过需要检查,路由,排队和传输包。 这增加了额外的等待时间,随着交换机变得越来越忙。
  • networking拥塞:由于stream量排队时间较长,可能会重新路由,networking可能会发生拥塞,从而导致额外的延迟。 如果拥塞不好,则延迟可能足够长以触发分组重传。