2

添加新数据中心时,dynamicSnitch 会导致我们在数据尚不存在时从新 dc 读取数据。

我们有一个 cassandra (1.0.11) 集群在 3 个数据中心上运行,我们想添加第四个数据中心。集群配置了 PropertyFileSnitch 和 DynamicSnitch,并启用了 0.0 badness factor。相关的键空间复制因子是 DC1:2、DC2:2、DC3:2。我们的计划是将新数据中心添加到环中,将其添加到模式中并在所有节点上运行滚动修复 -pr,以便新节点将获得所有需要的数据。一旦我们开始这个过程,我们注意到新的数据中心会收到来自其他数据中心的读取调用,因为它的负载较低,而 DynamicSnitch 认为从它读取会更好。问题是数据中心仍然没有数据并且没有返回任何结果。

有没有人遇到过这个问题?有没有办法直接影响特定数据中心的分数,使其不会被 DynamicSnitch 选中?有没有更好的方法在 cassandra 1.0.11 中添加数据中心?有没有人写过处理这些问题的告密者?

谢谢,伊兹克。

4

1 回答 1

3

您可以引导节点而不是在没有引导的情况下添加到环然后修复。前者确保在它拥有所需的所有数据之前不会将任何读取路由到它。(这就是为什么 Cassandra 默认auto_bootstrap: true并且实际上禁用它是一个非常糟糕的主意,我们将它从示例 cassandra.yaml 中删除。)

这个问题以及文档建议首先添加所有节点而不使用引导程序的原因是,如果您为 DC4 配置了 N 个副本,Cassassandra 将尝试将该键空间的整个数据集复制到您添加的前 N ​​个节点,这可能是有问题的!

所以这里是我看到的选项:

  1. 如果您的数据集足够小,请继续使用引导计划
  2. 增加ConsistencyLevel您的读取,以便它们始终会触及一个有数据的副本,以及一个没有数据的副本
  3. 升级到 1.2 并ConsistencyLevel.LOCAL_ONE在您的读取上使用,这将迫使它永远不会发出跨 DC 请求
于 2013-11-14T15:39:51.593 回答