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

4
本月我们将把应用程序部署到生产环境,我们的堆栈将包括一个由三个节点组成的、单数据中心的Cassandra 1.2集群。为此,我们一直在努力确定初始Cassandra.yaml设置。在这个过程中,我遇到了一个有趣的情况,但我一直没有找到答案。
这与在每个节点的Cassandra.yaml文件中设置-seeds参数有关。所有我阅读的内容都说最佳实践是:
  1. 每个数据中心至少有两个种子节点。这很明智,因为其中一个节点可能会下线,而其他节点可以通过第二个种子节点进行连接。
  2. 这两个种子节点应该对于所有(在我们的情况下是3个)节点都相同。
在我测试的这个部署中,我一开始让所有三个节点都有一个种子节点——节点1的IP地址。我的意图是将所有三个节点的种子节点更改为node1和node2的IP地址。首先,我按照以下步骤将node3更改为:
  • 停用节点。
  • 关闭Cassandra。
  • 将-seeds值更改为ip_node1,ip_node2。
  • 启动Cassandra。
  • 运行nodetool status以确保节点已重新加入集群。
接下来我对node2做了同样的操作。但发生了一些意外情况。当我重新启动node2上的Cassandra时,它没有加入现有的环中。相反,它启动了自己的单节点环。很明显,它使用了自己的IP地址作为两个种子参数中的一个,并认为它是新环中的第一个节点。
我感到惊讶的是,Cassandra没有选择另一个种子值(node 2)的种子参数。我唯一能想到让它加入现有数据中心的方法是将其种子节点设置为集群中的另一个或两个节点。
显然,解决这个问题的一个可行方法是将每个节点的种子节点值配置为集群中其他两个节点的IP地址。但由于几个来源建议不要这样做,因此我想问一下应该如何处理。所以,我的问题是:
  1. 如果节点在种子列表中,Cassandra是否总是使用自己的IP地址作为种子?
  2. 像我提出的那样配置集群——这违反了最佳实践——是否会带来巨大问题?
1个回答

0

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

它们应该都是相同的,除了像listen_address这样的东西。

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

我只是想提一下,这是一个好东西需要检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接