Cassandra создает пул с хостами на разных портах - PullRequest
0 голосов
/ 27 марта 2019

У меня есть 10 узлов Cassandra, работающих в Kubernetes на моем сервере, и 1 контактная точка, предоставляющая сервис через порт 10023.

Однако, когда драйвер datastax пытается установить соединение с другими узлами кластера, он использует открытый порт вместо порта по умолчанию, и я получаю следующую ошибку:

com.datastax.driver.core.ConnectionException: [/10.210.1.53:10023] Pool was closed during initialization

Есть ли способ выставить одну единственную точку контакта и заставить ее взаимодействовать с другими узлами на стандартном порту (9042)?

Я проверил документацию по datastax, если есть что-то, связанное с этим, но я не нашел много.

вот так я подключаюсь к кластеру

Cluster.Builder builder = Cluster.builder();
        builder.addContactPoints(address)
                .withPort(Integer.valueOf(10023))
                .withCredentials(user, password)
                .withMaxSchemaAgreementWaitSeconds(600)
                .withSocketOptions(
                        new SocketOptions()
                                .setConnectTimeoutMillis(Integer.valueOf(timeout))
                                .setReadTimeoutMillis(Integer.valueOf(timeout))
                ).build();
        Cluster cluster = builder.withoutJMXReporting().build();
        Session session = cluster.connect();

1 Ответ

0 голосов
/ 27 марта 2019

После того, как драйвер связывается с первым узлом, он выбирает информацию о кластере и использует эту информацию, и эта информация включает информацию о том, какие порты Cassandra слушает.

Чтобы реализовать то, что вы хотите сделать, вам нужно, чтобы Cassandra прослушивала соответствующий порт - это настраивается с помощью параметра native_transport_port параметра cassandra.yaml.

Кроме того, по умолчанию драйвер Cassandra попытается подключиться ко всем узлам кластера, поскольку он использует политику DCAware / TokenAware l oad балансировка . Если вы хотите использовать только один узел, вам нужно использовать WhiteListPolicy вместо политики по умолчанию. Но не является оптимальным с точки зрения производительности.

Я бы предложил переосмыслить то, как вы выставляете Кассандру клиентам.

...