【问题标题】:ERROR Session: Error creating pool to /127.0.0.1:9042错误会话:创建池到 /127.0.0.1:9042 时出错
【发布时间】:2015-11-07 20:52:51
【问题描述】:

当我遇到此错误时,我正在尝试在 cassandra 中插入值:

15/08/14 10:21:54 INFO Cluster: New Cassandra host /a.b.c.d:9042 added
15/08/14 10:21:54 INFO Cluster: New Cassandra host /127.0.0.1:9042 added
INFO CassandraConnector: Connected to Cassandra cluster: Test Cluster
15/08/14 10:21:54 ERROR Session: Error creating pool to /127.0.0.1:9042
com.datastax.driver.core.TransportException: [/127.0.0.1:9042] Cannot connect
        at com.datastax.driver.core.Connection.<init>(Connection.java:109)
        at com.datastax.driver.core.PooledConnection.<init>(PooledConnection.java:32)
        at com.datastax.driver.core.Connection$Factory.open(Connection.java:586)
        at com.datastax.driver.core.SingleConnectionPool.<init>(SingleConnectionPool.java:76)
        at com.datastax.driver.core.HostConnectionPool.newInstance(HostConnectionPool.java:35)
        at com.datastax.driver.core.SessionManager.replacePool(SessionManager.java:271)
        at com.datastax.driver.core.SessionManager.access$400(SessionManager.java:40)
        at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:308)
        at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:300)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.net.ConnectException: Connection refused: /127.0.0.1:9042

我的复制因子是 1。Cass 集群中有 5 个节点(它们都已启动)。 rpc_address:0.0.0.0,broadcast_rpc_address:127.0.0.1

我认为我应该从上面看到 5 个节点中的每一个的 5 个“INFO 集群:新 Cassandra 主机..”行。 但我看到的是 127.0.0.1,我不知道为什么。

我还注意到,在 cassandra.yaml 文件中,所有 5 个节点都列在种子下。 (我知道不建议这样做,但我没有设置此集群)

seed_provider:
class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
seeds: "ip1, ip2, ip3, ip4, ip5"

其中 ipx 是节点 x 的 ipaddr。

在 cassandra-topology.properties 下,它只说了以下内容,并没有提及 5 个节点中的任何一个。

# default for unknown nodes                                                                                                                     

default=DC1:r1

谁能解释为什么我看到 ERROR Session: Error Creating pool to /127.0.0.1:9042 错误。

对 Cassandra 有点陌生.. 提前致谢!

【问题讨论】:

  • 为什么是 30418? Cassandra 监听的典型端口是 9042。
  • @rs_atl 这是出于防火墙的原因,但我知道这不是导致问题的原因。我已将其更改为 9042,因此不会引起任何混淆。谢谢!

标签: configuration cassandra


【解决方案1】:

我认为问题在于您的 rpc_broadcast_address 设置为 127.0.0.1。你这样做有什么特别的原因吗?

java 驱动程序使用 system.peers 表来查找用于连接主机的 IP 地址。如果设置了 rpc_broadcast_address,这将出现在 system.peers 中,并且驱动程序将尝试使用它。如果 rpc_broadcast_address 未设置,将使用 rpc_address。无论哪种情况,您都需要将其中一个地址设置为您的客户可以访问的地址。如果你设置了 rpc_address,你会想要移除 broadcast_rpc_address。

【讨论】:

  • 如果 rpc_address 设置为 0.0.0.0,则必须设置 broadcast_rpc_address。但它应该设置为您希望客户端连接的地址,而不是 127.0.0.1。
  • @AndyTolbert 我明白你在说什么。我将更改 broadcast_rpc_address 并查看它的作用。但是我仍然对为什么我看到 127.0.0.1 被添加为新的 Cassandra 主机感到困惑。我认为将所有其他配置为 Cassandra 集群一部分的节点(通常在“cassandra-topology.properties”中提到)添加为新的 Cassandra 主机。为什么 127.0.0.1 是其中之一?
  • broadcast_rpc_address 是 Cassandra 发送给驱动程序的内容,也是驱动程序用来唯一标识主机的内容。 cassandra-topology.properties 中的地址是 Cassandra 节点用于相互通信的地址。驱动程序对这些地址一无所知(它们甚至可能位于客户端无法访问的专用网络上)。
猜你喜欢
  • 1970-01-01
  • 2017-04-03
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2023-01-30
  • 1970-01-01
相关资源
最近更新 更多