将Cassandra集群扩展至中国数据中心(CGF)

6
我需要在中国内地增加一个新的数据中心以应对防火墙,目前我在美国和欧洲都有数据中心 - 因此该集群已经符合地理位置场景的要求。
目前我已为Cassandra准备好了中国基础设施,但过去几天的网络统计数据有些麻烦,我有点担心:这是否会影响我的当前集群,新的数据中心是否会有效?
我的实际问题如下:
  • Cassandra在复制期间如何处理大量的数据包丢失?(偶尔高达40%)
  • 当两个数据中心之间的网络连接非常差(仅有几千比特/秒和上述延迟)长达数小时时,这会对集群产生什么影响?
    • 中国数据中心是否被认为已死亡?或者Cassandra是否仍然尝试使用有限的带宽?
    • 这会对非中国数据中心造成任何问题吗?例如,它们变得缓慢,导致客户端请求超时。
  • 是否可以强制只有一个非中国数据中心与中国数据中心通信?还是应该相信Cassandra会处理这个问题?(试图避免可能损害所有数据中心)
  • 是否有任何方法可以加快初始数据复制(nodetool rebuild),因为按照当前速度,复制我们当前的数据需要几周时间。

欢迎任何建议或意见,谢谢!


1
为了更快地复制数据,您可以考虑利用快照,并使用sstableloader加载相同的数据。 - Praneeth Gudumasu
1个回答

2
Cassandra在复制过程中如何处理大量的数据包丢失?(偶尔高达40%)
通常情况下,数据包丢失会导致大量的读修复。在某些情况下,它可能会导致请求失败,具体取决于复制因子和一致性。此外,要准备好非常昂贵的修复,这将创建大量微小的SSTable和大量的IO。
我建议在开发环境中进行测试,以了解系统的实际行为。有很多工具可以模拟不良网络。
当两个数据中心之间的网络连接非常糟糕(仅有几千比特/秒和以上的延迟)长达几个小时时,它会对集群产生什么影响?中国数据中心是否被视为死亡?还是Cassandra仍然会尝试使用有限的带宽?这会对非中国数据中心造成任何问题吗?
这在很大程度上取决于故障的严重程度以及您运行的一致性级别/复制因子。在某些情况下,它只会导致集群之间的延迟相对较高。但是,如果连接不好到足以使节点开始将另一个标记为已关闭,则所有数据中心都会出现问题。现有数据中心将因请求超时而受到性能问题的困扰。这将反过来导致请求在内存中停留更长时间,这可能会导致GC。(它还可能会在其他集群中引起一些其他问题)。
如何敏感地检测失败的阈值可以进行调整和微调以适应您的用例。phi_convict_threshold是可以减少将节点标记为已关闭的可能性的设置。您可以在这里找到更多相关信息。如果您发现了最佳的节点未响应而未被标记为关闭的位置,则可以让Cassandra利用它所拥有的一切。

有没有办法强制仅使用我的非中国数据中心与中国数据中心通信?或者我应该相信Cassandra会处理这个问题?(尝试避免可能危及所有数据中心的风险)

没有真正的方法告诉Cassandra限制与哪些数据中心通信。您只能在复制因子中包括的数据中心之间进行通信。

有没有办法加快初始数据复制(nodetool rebuild)的速度,因为按照当前的速度,复制我们当前的数据需要几周时间。

我建议不要使用sstableloader解决方案,因为它的功能与rebuild非常相似,并且需要快照才能运行。如果网络是导致速度缓慢的原因,那么改变流式传输方式并不能产生太大的差异。

在我看来,首先要做的事情是测量系统的瓶颈在哪里。如果慢的网络确实是瓶颈,可以从更多的源流式传输添加更多的节点,但最终仍然会受到缓慢的网络连接的限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接