单节点 Cassandra 集群有什么限制?

What is the limitation with one-node Cassandra cluster?

我正在试验 Cassandra 和 Opscenter。在 Opscenterd 的日志文件中,我找到了这一行

2015-07-29 16:10:16+0000 [] ERROR: Problem while calling CreateClusterConfController (SingleNodeProvisioningError): Due to a limitation with one-node clusters, OpsCenter will not be able to communicate with the Datastax Agent unless list en_address/broadcast_address in cassandra.yaml are set to 172.17.42.1. Please ensure these match before continuing.

因为我在不同的 Docker 容器中部署了 Cassandra 和 Opscenter,所以我必须将 listen_address 设置为容器的内部 IP(因为位于容器中的 Cassandra 对其主机一无所知)和 broadcast_address 到相应主机的网桥 IP。如果您在单独网关后面的机器上部署 Cassandra(例如 AWS EC2,其中每个实例都有一个私有 IP 和一个 public IP),这是正常设置。

问题一:单节点集群的局限性是什么?

问题 2:在这种情况下,我应该如何解决这个问题?

谢谢

Question 1: What exactly is the limitation with one-node cluster?

OpsCenter(通过底层 python 驱动程序)正在从 Cassandra 的 system table(即 system.peerssystem.local)读取集群信息,其中大部分信息来自 system.peers,包括每个节点的广播接口。

但是,table 不包含有关节点本身的信息,仅包含有关其对等节点的信息。当没有对等点时,就无法从 Cassandra 本身获取广播地址,这就是 OpsCenter 用来将实际 Cassandra 实例绑定到内部表示的方法。在这种情况下,OpsCenter 使用您指定的任何地址作为种子(172.17.42.1 此处),当代理使用不同的 IP 报告时(他们通过 JMX 获取 Cassandra 的广播地址),OpsCenter 将丢弃这些消息。

Question 2: How should I workaround the problem in this case?

尝试将 address.yaml 中的 local_address 设置为 172.17.42.1,这应该可以解决问题。