我正在尝试使用Cassandra和Opscenter。在Opscenterd的日志文件中,我找到了这一行
2015-07-29 16:10:16 + 0000 []错误:调用CreateClusterConfController时出现问题(SingleNodeProvisioningError):由于单节点群集的限制,OpsCenter将无法与Datastax Agent通信,除非列表 cassandra.yaml中的en_address / broadcast_address设置为172.17.42.1。请在继续之前确保这些匹配。
因为我在不同的Docker容器中部署了Cassandra和Opscenter,所以我必须将listen_address
设置为容器的内部IP(因为坐在容器中的Cassandra对其主机一无所知)和broadcast_address
到相应主机的网桥IP。如果您在单独网关后面的计算机上部署Cassandra(例如AWS EC2,其中每个实例都有私有IP和公共IP),这是正常的设置。
问题1 :单节点群集的限制究竟是什么?
问题2 :在这种情况下,我该如何解决问题?
由于
答案 0 :(得分:2)
问题1:单节点集群的限制究竟是什么?
OpsCenter(通过底层python驱动程序)正在从Cassandra的system
表(即system.peers
和system.local
)中读取集群信息,其中大部分信息来自system.peers
,包括每个节点的广播接口。
但是,该表不包含有关节点本身的信息,仅包含有关其节点的信息。当没有对等体时,无法从Cassandra本身获取广播地址,这就是OpsCenter用来将实际的Cassandra实例与内部表示相关联的方法。在这种情况下,OpsCenter使用您指定的任何地址作为种子(此处为172.17.42.1
),当代理使用不同的IP报告时(他们通过JMX获取Cassandra的广播地址),OpsCenter将丢弃这些消息。
问题2:在这种情况下,我该如何解决问题?
尝试将local_address
中的address.yaml
设置为172.17.42.1
,这应该可以解决问题。