远程连接到单节点 Cassandra 集群(在 EC2 实例上)

Remotely connecting to a single node Cassandra clustor (on an EC2 instance)

我是 运行 中型 Ubuntu EC2 实例上的单节点 Cassandra 集群。在对 cassandra.yaml 进行任何更改之前,我可以使用 cqlsh

连接到 cassandra

和运行 netstat -ltn 日志:

Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:38807 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:7000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:35835 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:7199 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9160 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9042 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN

并且检查 Cassandra 服务状态显示它是 活动的 (运行)

尝试使用 cqlsh <instance public IP> 远程连接到实例超时,我假设这是因为它没有在实例 public IP 上侦听客户端。

到目前为止我已经累了:

注意:我保持 seeds: "127.0.0.1" 不变,因为我没有其他种子或节点。

进行上述任何更改后,我不再能够在本地使用 cqlshcqlsh <public IP> 访问 Cassandra(并且远程仍然无法连接),即使在实例终端本身中也是如此,我会我得到 连接被拒绝。此外,netstat -ltn 现在记录:

Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:38807 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN

并且 Cassandra 服务状态显示为 active (exited)

我希望能够远程连接到实例,但是在对 cassandra.yaml 进行任何更改后,我无法再连接到它,即使是在本地也是如此。

此外,我在实例上为端口 80、22、9042 和 7000 设置了 安全组

知道为什么会发生这种情况或我该如何解决它吗?

对于同时拥有私有和public IP地址的节点,您只需设置:

listen_address: private_ip
rpc_address: public_ip

如果在另一个区域中有节点,则只需将 broadcast_address 设置为节点的 public IP,这样节点就可以通过 EC2 上的 WAN 相互通信。这意味着您需要回滚您配置的所有其他属性。

listen_address 用于节点间通信(gossip 在端口 7000 上),这就是它设置为私有 IP 的原因。

Apps/clients(cqlsh 只是另一个客户端)连接到 rpc_address 上的节点,因此需要将其设置为 public 可访问的 IP .

我最近在 post https://community.datastax.com/questions/8867/ 中回答了一个类似的问题,如果您对更详细的信息感兴趣的话。干杯!