首页 > 解决方案 > Cassandra 是否会阻止现有数据中心在重新加入集群时提供读取请求?

问题描述

我知道 Cassandra 足够聪明,不会在新节点被引导并加入集群时不服务任何读取请求,直到所有数据都被复制到节点。

问题是,对于重新加入集群的现有数据中心,Cassandra 的行为是否相同?特别适用于以下场景:

如果我有 2 个 DC,并且 DC1 用于所有读/写,而 DC2 仅用于备份。如果 DC1 出现故障并且 DC2 接管所有写入。当 DDC1 现在回来时,Cassandra 是否会阻止 DC1 读取请求,直到所有数据都已完全复制。

标签: cassandradatastax-enterprise

解决方案


问题是,对于重新加入集群的现有数据中心,Cassandra 的行为是否相同?

如果您遵循标准数据中心构建过程,即建立空节点,然后通过该nodetool rebuild过程流式传输数据,那么答案是“不一定”。重建节点与引导节点的工作方式不同,因此它可能仍会尝试服务请求。

当然,硬币的另一面是,您的应用程序团队不应该部署或激活任何默认或“粘”到新或“重新加入”数据中心的服务,直到你给他们 ok。这就是为什么所有客户端应用程序都应该指定默认数据中心并使用 NetworkTopologyStrategy 作为其键空间的原因之一。

如果我有 2 个 DC,并且 DC1 用于所有读/写,而 DC2 仅用于备份。如果 DC1 出现故障并且 DC2 接管所有写入。当 DC1 现在回来时,Cassandra 是否会阻止 DC1 读取请求,直到所有数据都被完全复制?

在这种情况下,答案是“否”,它不会阻止 DC1 服务请求。如果一个应用程序粘在 DC1 上,并且它存在,那么无论其数据是否不同步,它都会处理请求。如果是我,我会使用 Reaper 来确保在 DC1 上运行修复,并告诉我的应用程序团队将他们的应用程序/服务配置为仅使用 DC2,除非另有说明。


推荐阅读