三节点数据中心中的Cassandra种子值

时间:2014-10-15 16:59:09

标签: cassandra

我们本月将我们的应用程序部署到生产中,我们的堆栈将包括一个3节点,单数据中心Cassandra 1.2版集群。为此,我们一直在制定最初的Cassandra.yaml设置。在这样做时,我遇到了一个有趣的情况,我无法找到答案。

这与在每个节点Cassandra.yaml文件中设置-seeds参数有关。我所做的所有阅读都说最佳做法是:

  1. 每个数据中心至少有2个种子。这是有道理的,这样其中一个节点可以关闭,其他节点可以由第二个种子播种。
  2. 对于所有(在我们的例子中为3个)节点,这两个种子应该是相同的。
  3. 在我测试的部署中,我开始时所有三个节点都有一个种子,节点1的IP地址。我的目的是将所有三个节点的种子更改为node1和node2的IP地址。首先,我做了节点3:

    • 停用该节点。
    • 关闭卡桑德拉。
    • 将-seeds值更改为ip_node1,ip_node2
    • 启动Cassandra。
    • 运行nodetool status以确保将节点添加回群集。

    接下来,我按照与节点3完全相同的步骤执行了节点2.但是发生了意外情况。当我在节点2上重新启动Cassandra时,它没有加入现有的环。相反,它开始了自己的单节点环。很明显,在我传递它的两个种子参数中,它使用了自己的IP地址,因此认为它是新环中的第一个节点。

    我很惊讶Cassandra没有选择我通过它的另一个种子值的种子参数(节点2)。我可以让它加入现有数据中心的唯一方法是将其种子设置为集群中的一个或两个其他节点。

    显而易见的是,将我的三个节点种子值中的每一个配置为群集中其他两个节点的IP地址。但由于有几个消息来源表示这不是“最佳实践”,我想我会问这应该如何处理。所以我的问题是:

    1. 如果Cassandra在种子列表中总是使用自己的IP地址作为种子,这是正常的吗?
    2. 按照我建议的方式配置群集,这与最佳做法是一个巨大的问题吗?

1 个答案:

答案 0 :(得分:0)

这可能不是您问题的解决方案,但您是否比较了所有 cassandra.yaml 文件?

listen_address之外,它们应该都是一样的。

你可能在cluster name中也有空格或拼写错误吗?

我只是认为我会把它作为一件好事来检查。