【发布时间】:2014-12-10 20:26:58
【问题描述】:
我们本月将应用部署到生产环境,我们的堆栈将包括一个 3 节点、单数据中心 Cassandra 1.2 版集群。出于对此的预期,我们一直在制定最初的 Cassandra.yaml 设置。在执行此操作时,我遇到了一个有趣的情况,我无法找到答案。
这与在每个节点 Cassandra.yaml 文件中设置 -seeds 参数有关。我所做的所有阅读都表明最佳做法是:
- 每个数据中心至少有 2 个种子。这是有道理的,因此其中一个节点可以关闭,而其他节点可以由第二个种子播种。
- 这两个种子对于所有(在我们的例子中是 3 个)节点应该是相同的。
在我对此进行测试的部署中,我开始时所有三个节点都有一个种子,即节点 1 的 IP 地址。我的意图是将所有三个节点的种子更改为 node1 和 node2 的 IP 地址。首先,我通过以下方式完成了节点 3:
- 停用节点。
- 关闭 Cassandra。
- 将 -seeds 值更改为 ip_node1,ip_node2
- 启动 Cassandra。
- 正在运行 nodetool 状态以确保将节点添加回集群。
接下来,我按照与节点 3 完全相同的步骤执行节点 2。但是发生了一些意想不到的事情。当我在节点 2 上重新启动 Cassandra 时,它没有加入现有的环。相反,它开始了自己的单节点环。很明显,在我传递给它的两个种子参数中,它使用了自己的 IP 地址,因此认为它是新环中的第一个节点。
我很惊讶 Cassandra 没有选择我传递给它的另一个种子值(节点 2)的种子参数。我可以让它加入现有数据中心的唯一方法是将其种子设置为集群中的一个或两个其他节点。
一个明显的解决方法是将我的三个节点种子值中的每一个配置为集群中其他两个节点的 IP 地址。但由于有几个消息来源表明这不是“最佳实践”,我想我会问应该如何处理。所以我的问题是:
- Cassandra 在种子列表中总是使用自己的 IP 地址作为种子是否正常?
- 按照我建议的方式配置集群是否违反最佳实践是一个大问题?
【问题讨论】:
标签: cassandra