cassandra - 使用中国数据中心 (CGF) 扩展 Cassandra 集群
问题描述
我需要用一个新的数据中心来扩展我的集群,以便在中国大陆,在防火墙后面。目前我在美国和欧洲有数据中心——所以集群已经符合地理位置方案的要求。
至此,我已经为 Cassandra 准备好了中国的基础设施,但过去几天的网络统计数据有点麻烦,我有点害怕:这是否会影响我当前的集群,以及如何影响新的数据中心功能?
我对此的实际问题是:
- Cassandra 如何在复制过程中处理大量丢包?(有时高达 40%)
- 当两个数据中心之间的网络连接非常糟糕(只有几千位/秒和上述延迟)几个小时时,它如何影响集群?
- 中国的dc会被认为死了吗?还是 Cassandra 仍会尝试使用有限的带宽?
- 这会对非中国数据中心造成任何问题吗?例如,它们变慢,导致客户端请求超时。
- 是否有可能以某种方式强制执行,只有我的一个非中国数据中心与中国数据中心通信?还是我应该相信 Cassandra 会处理这个问题?(尽量避免可能损害我所有的数据中心)
- 有什么方法可以加快初始数据复制(
nodetool rebuild
),因为以目前的速度复制我们当前的数据需要数周时间。
欢迎任何建议或意见,谢谢!
解决方案
Cassandra 如何在复制过程中处理大量丢包?(有时高达 40%)
通常丢包会引起大量的读修复。在某些情况下,它可能会导致请求失败,具体取决于复制因素和一致性。此外,准备好进行非常昂贵的维修,这将创建大量微小的 SSTables 和大量的 IO。
我建议对开发需求进行测试,以查看系统中的实际行为。有很多工具可以模拟不良网络。
当两个数据中心之间的网络连接非常糟糕(只有几千位/秒和上述延迟)几个小时时,它如何影响集群?中国的dc会被认为死了吗?还是 Cassandra 仍会尝试使用有限的带宽?这会对非中国数据中心造成任何问题吗?
这在很大程度上取决于您运行的一致性级别/复制因子的糟糕程度和程度。在某些情况下,它只会在集群之间造成相当高的延迟。但是,如果连接足够糟糕,节点将开始将另一个标记为关闭 - 那么您正在查看所有数据中心中的问题。您现有的数据中心将因请求超时而产生性能问题。这反过来会导致请求在内存中保留更长时间,从而导致 GC。(它也可能在您的其他集群中导致许多其他问题)
可以调整和微调故障检测器的灵敏度阈值以适合您的用例。phi_convict_threshold 是一个可以降低节点被标记为关闭的可能性的设置。您可以在此处找到更多相关信息。如果您发现由于无响应而没有标记节点的最佳位置,您可以让 Cassandra 充分利用它所需要处理的东西。
是否有可能以某种方式强制执行,只有我的一个非中国数据中心与中国数据中心通信?还是我应该相信 Cassandra 会处理这个问题?(尽量避免可能损害我所有的数据中心)
实际上并没有办法告诉 Cassandra 限制与哪些数据中心对话。您有点卡在复制因子中包含的数据中心之间的通信。
有什么方法可以加快初始数据复制(nodetool 重建),因为以目前的速度复制我们当前的数据需要数周时间。
我建议不要使用 sstableloader 的解决方案,因为它的功能与重建非常相似,并且需要快照才能运行。如果网络是导致速度慢的原因,那么改变流媒体的方式不会有太大的不同。
在我看来,首先要做的是测量系统的瓶颈在哪里。如果慢速网络确实是瓶颈,则可以同时添加更多节点以从更多来源进行流式传输,但最终您仍然会受到慢速网络连接的阻碍。
推荐阅读
- python - 得到一组三个随机变量服从从 0 到 1 的均匀分布,其中 X1+X2+X3=1
- c++ - 返回值子对象的生命周期延长?
- typescript - 打字稿??象征
- operators - 数组枚举的 JSON 模式 AND/OR
- apache-spark - 使用带有窗口的多个条件按组更新列
- c++ - (C++)关于 AVL-Tree 的 Romove(x) 函数有什么问题?当我测试它时它引起了一些中断
- keras - 使用 Keras 过拟合的 InceptionV3 迁移学习太快了
- java - 在 Amaon 的 java SDK 中正确使用 UpdateSecretRequest
- javascript - FirebaseError:使用无效数据调用函数 Query.where()。不支持的字段值:未定义
- javascript - 将现有网站链接重定向到应用程序博览会反应原生