【问题标题】:Cassandra multinode cluster setup issueCassandra 多节点集群设置问题
【发布时间】:2016-03-08 02:26:46
【问题描述】:

我正在尝试使用 OpenJDK 在 CentOS 7 上设置 Cassandra 多节点集群。

我有 2 个节点:

  • node1 10.99.189.49
  • node2 10.99.189.50

到目前为止,我做了以下事情:

  1. 从 PlanetCassandra 网站下载了 Cassandra 的压缩包
  2. 将其提取到 Documents 文件夹中。
  3. 创建了 YAML 文件中提到的所有必要目录(data/saved_cache、data/commitlog、data/data)。

我在我的 conf/cassandra.yaml 文件中做了 3 处更改,如下所示:

在节点 10.99.189.49:

seeds: "10.99.189.49" 
listen_address: 10.99.189.49
rpc_address: 10.99.189.49

在节点 10.99.189.50:

seeds: "10.99.189.49" 
listen_address: 10.99.189.50
rpc_address: 10.99.189.50

现在我在节点 10.99.189.49 上运行 cassandra 然后我在另一个节点上运行 cassandra。

Cassandra 在两个节点上都正常启动 但 当我这样做时:

bin/nodetool status

我只能看到其中的一个节点。

谁能指出我做错了什么或遗漏了什么?

【问题讨论】:

  • 是否在日志中看到节点正在相互通信的任何证据?或者,那么日志中有明显的错误吗?
  • 还要确保cluster_name 相同。
  • @Aaron 是的 cluster_name 是一样的。
  • @mikea 不,日志中没有明显的错误:(
  • 你确定节点可以互相看到,并且所有必要的端口(7000、7199、9042)在它们之间都是开放的吗?从 0.49 开始,尝试telnet 10.99.189.50 7000

标签: cassandra


【解决方案1】:

所以我开始在 cmets 中添加提示,并且第三次我想我会开始将它们全部放在一个实际的答案中。

DataStax 很好地记录了它应该如何工作。确保您已经阅读了这些文档(特别是第一个文档)并且遵循了所有步骤:

除了上面提到的所有内容之外,请确保每个节点上的 cluster_name 相同。

我发现使用 GossipingPropertyFileSnitch 更容易完成这项工作。在每个节点的 cassandra.yaml 中设置:

endpoint_snitch: GossipingPropertyFileSnitch

然后确保您的每个节点在 cassandra-rackdc.properties 文件中指定相同的默认数据中心:

dc=DC1

让您的第一个节点 (.49) 启动并运行。使用nodetool status 进行验证。

同时验证您是否拥有opened the necessary ports in your firewall。从 0.49 开始,尝试telneting 到 Cassandra 需要的端口上的另一个节点。我推荐 7000,因为这是非 SSL 节点间通信的端口。

telnet 10.99.189.50 7000

一旦您确定一切正常并且一切都配置正确,然后调出 0.50。我记得读过你应该至少等待 2 分钟才能启动另一个节点,所以这样做只是为了安全起见。跟踪日志以确保它与其他节点握手,或查看任何错误:

tail -f /var/log/cassandra/system.log

注意:您的日志位置可能会有所不同。我假设你正在运行 2.2。如果您使用的是不同版本的 Cassandra,请注明。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    在两个节点上使用

    seeds: "10.99.189.49,10.99.189.50" 
    

    同时重启两个节点 cassandra

    【讨论】:

    • 但我不希望其他节点成为种子,我为什么要使用它??能告诉我原因吗?