1
votes

We have a small test cluster with 3 nodes on Amazon. Everything seems working with cqlsh. But when I try to debug my app from my laptop (outside of Amazon of course), I'm getting 'Channel has been closed' errors, and it starts retrying forever. I know it's likely caused by the config in cassandra.ymal, as it shows some private IPs in my Eclipse console. Tried many different ways but still getting the same problem. Appreciate any input on this. How to get rid of the private IPs 10.251.x.x from the client?

Here are some context, Versions: [cqlsh 4.0.1 | Cassandra 2.0.4 | CQL spec 3.1.1 | Thrift protocol 19.39.0]

cassandra-driver-core-2.0.0-rc1.jar

In 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

In Eclipse console:

DEBUG [main] (ControlConnection.java:145) - [Control connection] Successfully connected to /54.203.x.x

DEBUG [Cassandra Java Driver worker-0] (Session.java:379) - Adding /54.203.x.x to list of queried hosts

DEBUG [Cassandra Java Driver worker-1] (Session.java:379) - Adding /10.251.a.c to list of queried hosts

DEBUG [Cassandra Java Driver worker-1] (Connection.java:103) - [/10.251.a.c-1] Error connecting to /10.251.a.c (connection timed out: /10.251.a.c:9042)

DEBUG [Cassandra Java Driver worker-1] (Session.java:390) - Error creating pool to /10.251.a.c ([/10.251.a.c] Cannot connect)

DEBUG [Cassandra Java Driver worker-1] (Cluster.java:1064) - /10.251.a.c is down, scheduling connection retries

DEBUG [New I/O worker #4] (Connection.java:194) - Defuncting connection to /10.251.a.c

com.datastax.driver.core.TransportException: [/10.251.a.b] Channel has been closed at com.datastax.driver.core.Connection$Dispatcher.channelClosed(Connection.java:548) ...

1

1 Answers

1
votes

It seem that your Java driver is using auto discovery by calling "describe cluster" to get a list of all nodes in your cluster. In AWS using Ec2Snitch, that yields to private ips which obviously won't work from outside of AWS. There is a discussion on this topic here:

https://datastax-oss.atlassian.net/browse/JAVA-145

The last commend got my attention. It says you can do something with LoadBalancingPolicy of the driver to limit the nodes. Hope this includes specifying the specific IPs so it does not auto discover.