Hi,
The driver needs a separate IP address for each node that it connects to. If you hide your nodes behind an ELB, the driver will see them as a single host, so that defeats its built-in load balancing and failover logic.
So if you want to connect directly, you need a public IP for each node.
You can declare it as the broadcast_rpc_address in cassandra.yaml, but that means all applications will have to go through these addresses.
If you only have one "external" application, and other "internal" applications that should use the private addresses, an alternate solution is to use an
AddressTranslator in the external app. The
Address resolution section in our docs has more information about that.
As an alternative, you could have an extra layer between your external application and your database, such as a REST service.