Cassandra EC2 Все хосты попытались выполнить запрос - PullRequest
1 голос
/ 04 мая 2020

Мой экземпляр Cassandra работает на AWS EC2. Я создал загрузочное приложение Spring в моей локальной системе, где я пытаюсь подключиться к этой базе данных и запросить данные. Каждый раз, когда я получаю сообщение об ошибке:

com.datastax.driver.core.exceptions.NoHostAvailableException: все хосты пытались выполнить запрос (пытался: /aaa.zz.yy.xx:9042

В моем приложении для весенней загрузки есть следующие зависимости:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-cassandra</artifactId>
        </dependency>
        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-core</artifactId>
        </dependency>

Я создаю свое соединение следующим образом:

@Bean 
    public Session session() {
        Cluster cluster = Cluster.builder().withPort(9042).addContactPoint("aaa.zz.yy.xx").withoutJMXReporting().build();
        cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(60000);
        return cluster.connect(keyspace_name);
      }

На моем cassandra.yaml file:

rpc_address: aaa.zz.yy.xx
rpc_port: 9160

Я даже добавил входящее правило в свой EC2, где я указал свой локальный системный IP-адрес (где работает загрузочное приложение Spring).

Что я делаю не так?

РЕДАКТИРОВАТЬ: TLDR: Что я делал неправильно, так это то, что я использовал частный IP в своем коде. Когда я переключился на publi c IP, он работал.

1 Ответ

2 голосов
/ 04 мая 2020

rpc_port - это комиссионный порт. Я предполагаю, что вы используете cql.

Попробуйте с .withPort(9042) это native_transport_port. По умолчанию: 9042. Порт, в котором собственный транспорт CQL прослушивает клиентов.

Также используйте контактный адрес publi c вместо частного при попытке соединения с локального m / c.

Я добавляю свои правки здесь:

  1. использовать publi c ip-адрес ec2 в методе: addContactPoint (publi c ip экземпляра EC2 - это тот, который мы используем в putty например, для подключения к EC2: ec2-203-0-113-25.compute-1.amazon aws .com)
  2. используйте порт 9042 в коде: withPort
  3. в yaml файл на EC2, rp c: адрес должен быть частным IP-адресом

При использовании Spring Boot в pom. xml для подключения к кассандре достаточно только 1 зависимости:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-cassandra</artifactId>
        </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...