我们在亚马逊上有一个包含3个节点的小型测试集群。一切似乎都在使用cqlsh。但是当我尝试从我的笔记本电脑(当然在亚马逊以外)调试我的应用程序时,我得到'频道已关闭'错误,并且它开始永远重试。我知道这可能是由cassandra.ymal中的配置引起的,因为它在我的Eclipse控制台中显示了一些私有IP。试过很多不同的方法,但仍然遇到同样的问题。感谢对此的任何意见。如何从客户端摆脱私有IP 10.251.x.x?
以下是一些背景信息, 版本: [cqlsh 4.0.1 | Cassandra 2.0.4 | CQL规范3.1.1 |节俭协议19.39.0]
卡桑德拉驱动器芯-2.0.0-rc1.jar
在cassandra.ymal中:
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "54.203.x.x,54.203.x.y"
listen_address:10.251.a.b
broadcast_address:54.203.x.x
native_transport_port:9042
endpoint_snitch:Ec2MultiRegionSnitch
在Eclipse控制台中:
DEBUG [main](ControlConnection.java:145) - [控制连接]已成功连接到/54.203.x.x
DEBUG [Cassandra Java Driver worker-0](Session.java:379) - 将/54.203.x.x添加到查询主机列表
DEBUG [Cassandra Java Driver worker-1](Session.java:379) - 将/10.251.a.c添加到查询主机列表
DEBUG [Cassandra Java Driver worker-1](Connection.java:103) - [/10.251.ac-1]连接到/10.251.ac时出错(连接超时:/10.251.ac:9042)
DEBUG [Cassandra Java Driver worker-1](Session.java:390) - 创建池到/10.251.a.c时遇到错误([/10.251.a.c]无法连接)
DEBUG [Cassandra Java Driver worker-1](Cluster.java:1064) - /10.251.a.c已关闭,安排连接重试
DEBUG [新I / O工作者#4](Connection.java:194) - 取消与/10.251.a.c的连接
com.datastax.driver.core.TransportException:[/10.251.a.b]频道已关闭 at com.datastax.driver.core.Connection $ Dispatcher.channelClosed(Connection.java:548) ...
答案 0 :(得分:1)
您的Java驱动程序似乎通过调用“describe cluster”来使用自动发现来获取群集中所有节点的列表。在使用Ec2Snitch的AWS中,产生私有ips,显然无法在AWS外部工作。这里有关于这个主题的讨论:
https://datastax-oss.atlassian.net/browse/JAVA-145
最后的表扬引起了我的注意。它表示您可以使用驱动程序的LoadBalancingPolicy来限制节点。希望这包括指定特定的IP,以便它不会自动发现。