OpsCenter 无法识别同一网络中的 Cassandra 节点

OpsCenter cannot recognize Cassandra nodes in the same network

我正在试验 Datestax OpsCenter 5.2 和 Cassandra 2.1.7。我遇到的一个麻烦是 OpsCenter 守护程序(即服务器)似乎尝试使用 broadcast_rpc_address 连接到 Cassandra 代理,但被安全组阻止了(因为 broadcast_rpc_address 是 public AWS 上的 IP)。

详情

集群有3个节点(10.0.0.0/24是AWS上VPC的子网,52.x.x.x是publicIP)

节点 0

cassandra.yaml: broadcast_address=10.0.0.100, rpc_address=10.0.0.100, broadcast_rpc_address=52.2.3.100

address.yaml: stomp_interface=10.0.0.99, local_interface=10.0.0.100, agent_rpc_broadcast_address=10.0.0.100

节点 1

cassandra.yaml: broadcast_address=10.0.0.101, rpc_address=10.0.0.101, broadcast_rpc_address=52.2.3.101

address.yaml: stomp_interface=10.0.0.99, local_interface=10.0.0.101, agent_rpc_broadcast_address=10.0.0.101

节点 2

cassandra.yaml: broadcast_address=10.0.0.102, rpc_address=10.0.0.102, broadcast_rpc_address=52.2.3.102

address.yaml: stomp_interface=10.0.0.99, local_interface=10.0.0.102, agent_rpc_broadcast_address=10.0.0.102

OpsCenter 节点

部署在同一子网中

ip=10.0.0.99

症状

将“10.0.0.100、10.0.0.101、10.0.0.102”添加到 OpsCenter Web 控制台上的 "Add Cluster" window 后,我在 opscenterd.log 中得到以下内容:

2015-09-04 11:05:38+0000 []  INFO: New Cassandra host 52.2.3.100 discovered
2015-09-04 11:05:38+0000 []  INFO: New Cassandra host 52.2.3.101 discovered
...
2015-09-04 11:05:43+0000 []  WARN: [control connection] Error connecting to 52.2.3.100: errors=Timed out creating connection, last_host=None
2015-09-04 11:05:43+0000 [] ERROR: Control connection failed to connect, shutting down Cluster: ('Unable to connect to any servers', {'52.2.3.100': OperationTimedOut('errors=Timed out creating connection, last_host=None',)})

注意 OpsCenter 尝试通过 broadcast_rpc_address 连接到节点,这被安全组阻止了。尽管我已将 agent_rpc_broadcast_address 设置为子网 IP。

问题 1

这是 OpsCenter 的正确行为吗?为什么不使用agent_rpc_broadcast_address

问题二

如果我将 broadcast_rpc_address 更改为子网 IP,则 OpsCenter 连接正常。但这会阻止我的客户端连接,因为非种子节点会将其子网 IP 由种子节点报告给客户端,客户端无法访问。

我也可以把安全组开放给OpsCenter服务器,但是有风险,需要通过网关

那么这种情况应该怎么解决呢?

想法

这个问题的核心是如何"intelligently"根据客户端是在子网内部还是外部来决定连接到哪个IP。我看到的所有文档都没有说明这是如何工作的。

感谢您的帮助。

加法 1

如果您也能说明客户端和 OpsCenter 如何使用 rpc(thrift) 和 native(binary) 协议,将不胜感激。

我的印象是不推荐使用 rpc,取而代之的是本机协议,但这会影响节点间和客户端节点连接吗?

Question 1

Is this the correct behavior of OpsCenter? Why agent_rpc_broadcast_address is not used?

现在是。 OpsCenter(通过底层 python 驱动程序)从 Cassandra 本身获取 rpc 地址,因此它获取无法访问的 broadcast_rpc_address 的值。 agent_rpc_broadcast_address 用于连接到代理,而不是 Cassandra 节点本身。

我不确定为什么要阻止从同一子网(甚至是同一安全组?)访问广播地址,同时还允许从子网外部访问它。

Would be grateful if you could also clarify how rpc(thrift) and native(binary) protocol are used by client and OpsCenter.

从 5.2 开始,OpsCenter 不使用 thrift 与 Cassandra 通信,opscenterd 依赖本机协议,代理依赖本机协议 + jmx。