【发布时间】:2015-11-30 13:07:02
【问题描述】:
我正在试验 Datestax OpsCenter 5.2 和 Cassandra 2.1.7。我遇到的一个问题是 OpsCenter 守护程序(即服务器)似乎试图使用 broadcast_rpc_address 连接到 Cassandra 代理,该安全组已阻止(因为 broadcast_rpc_address 是 AWS 上的公共 IP)。
详情
集群有3个节点(10.0.0.0/24是AWS上VPC的子网,52.x.x.x是公网IP)
节点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
症状
在 OpsCenter Web 控制台的“添加集群”窗口中添加“10.0.0.100, 10.0.0.101, 10.0.0.102”后,我在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?
问题 2
如果我将 broadcast_rpc_address 更改为子网 IP,则 OpsCenter 连接正常。但这会阻止我的客户端连接,因为非种子节点的子网 IP 将由种子节点报告给客户端,客户端无法访问。
我也可以向 OpsCenter 服务器开放安全组,但这样做有风险,需要通过网关。
那么在这种情况下我应该如何解决这个问题呢?
想法
这个问题的核心是如何根据客户端是在子网内部还是外部来“智能”地决定连接哪个IP。我看到的所有文档都没有说明这是如何工作的。
感谢您的帮助。
加法1
如果您能阐明客户端和 OpsCenter 如何使用 rpc(thrift) 和 native(binary) 协议,我们将不胜感激。
我的印象是 rpc 已被弃用以支持本机协议,但这会影响节点间和客户端节点连接吗?
【问题讨论】:
-
注释掉broadcast_rpc_address,它可能会工作
-
@LHWizard,评论 broadcast_rpc_address 将导致客户端尝试连接到子网 IP(对于任何非种子节点)。对于不在子网中的客户端,这将失败。
-
我的目的是让 a) 同一子网中的 OpsCenter 和 b) 子网外的客户端都工作。
-
您可以尝试将 rpc_address 设置为 0.0.0.0
-
您在问题 2 中的陈述也是错误的。种子不会向客户端报告 IP 地址。
标签: cassandra cassandra-2.0 datastax datastax-java-driver opscenter