简体   繁体   中英

How do I properly configure Cassandra in EC2 to connect to it?

I have an AWS EC2 instance with Centos 8 .

Inside this instance, I have successfully installed the Cassandra ( 3.11.10 ) database.

Inside this database, I have successfully created keyspace via this CQL query:

create keyspace if not exists dev_keyspace with replication={'class': 'SimpleStrategy', 'replication_factor' : 2};

Then I edited configurion file ( /etc/cassandra/default.conf/cassandra.yaml ):

cluster_name: "DevCluster"
seeds: <ec2_private_ip_address>
listen_address: <ec2_private_ip_address>
start_rpc: true
rpc_address: 0.0.0.0
broadcast_rpc_address: <ec2_private_ip_address>
endpoint_snitch: Ec2Snitch

After that, restarted database:

Datacenter: eu-central
======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address                   Load       Tokens       Owns (effective)  Host ID                               Rack
UN  <ec2_private_ip_address>  75.71 KiB  256          100.0%            XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  1a

When I try to connect to the Cassandra database with such credentials it raise an error:

host: <ec2_public_ip_address>
port: 9042
keyspace: dev_keyspace
username: cassandra (default)
password: cassandra (default)

ERROR :

All host(s) tried for query failed (tried: /<ec2_private_ip_address>:9042 (com.datastax.driver.core.exceptions.TransportException: [/<ec2_private_ip_address>:9042] Cannot connect))

What did I forget to configure? Let me know if you need more information.

You won't be able to access your cluster remotely because you've configured Cassandra to only listen for clients on the private IP with this setting:

broadcast_rpc_address: <ec2_private_ip_address>

For the node to accept requests from external clients, you need to set the following in cassandra.yaml :

listen_address: private_ip
rpc_address: public_ip

Note that you don't need to set the broadcast RPC address. You will need to restart Cassandra for the changes to take effect.

You will also need to define a security group with inbound rules on the AWS Management Console to allow ingress to your EC2 instances on port 9042 . Cheers!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM