内部私有 DNS 名称的连接被拒绝

内部私有 DNS 名称的连接被拒绝

我在 5 个 EC2 节点上设置了一个 Cassandra 集群。这些节点可以使用私有 IP 地址正常通信,但使用私有内部 DNS 名称时会出现连接失败。Localhost 也会失败。

我正在尝试使用 cassandra-stress 工具,但是我得到了Failed to connect over JMX; not collecting these stats,并且当打开详细日志记录时,我得到了以下堆栈:

java.lang.RuntimeException: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: ip-172-1-2-2.eu-west-1.compute.internal; nested exception is:
    java.net.ConnectException: Connection refused (Connection refused)]
    at org.apache.cassandra.stress.util.JmxCollector.connect(JmxCollector.java:99)
    at org.apache.cassandra.stress.util.JmxCollector.<init>(JmxCollector.java:85)
    at org.apache.cassandra.stress.StressMetrics.<init>(StressMetrics.java:62)
    at org.apache.cassandra.stress.StressAction.run(StressAction.java:198)
    at org.apache.cassandra.stress.StressAction.runMulti(StressAction.java:126)
    at org.apache.cassandra.stress.StressAction.run(StressAction.java:72)
    at org.apache.cassandra.stress.Stress.main(Stress.java:109)

当我运行时,cqlsh我必须指定私有 IP 地址(./cqlsh 172.1.2.3),因为使用默认的本地主机失败。

是否需要某种额外的配置来将此内部名称映射到本地主机,或者让它解析每个节点上的私有 IP 地址?

编辑:

运行host ip-172-1-2-3.eu-west-1.compute.internal得到正确的输出:

ip-172-1-2-3.eu-west-1.compute.internal has address 172.1.2.3

因此看起来 DNS 工作正常。

对于我的 cassandra.yaml 设置,我已经listen_address注释掉了,但是正在使用:

listen_interface: eth0
broadcast_address: 172.1.2.3
rpc_address: 172.1.2.3

使用这些设置,复制可以正常工作。我不确定如何配置 JMX 以明确侦听私有 IP 地址。

答案1

您的命令cqlsh 172.1.2.3失败,因为您配置rpc_address为仅监听给定的地址。如果您想监听所有地方的 CQL 流量,则需要将 设置rpc_address0.0.0.0,并将 设置broadcast_rpc_address172.1.2.3- 这一切都在cassandra.yaml本身中描述。

关于 JMX - 它实际上不需要您启用它 - 它会收集一些有关垃圾收集等的数据,如果您刚开始使用,可能还不需要这些数据。我建议专注于测试本身,如中所述本文, 例如。

但是,如果您真的想将 JMX 暴露给外部,则需要仔细研究cassandra-env.sh- 它对如何操作有详细的注释。您只需要确保 JMX 安全,否则任何人都可以对您的集群进行几乎任何操作 - 擦除数据、配置它等。

相关内容