При добавлении новых узлов Cassandra в кластер мы также запускаем агент DataStax. По прошествии некоторого времени показано, что агент больше не подключен. Всякий раз, когда мы перезапускаем агент, регистрируется следующая ошибка:
ERROR [Initialization] 2015-12-15 10:42:25,309 Can't connect to Cassandra, retrying soon.
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /192.168.10.1:9042 (com.datastax.driver.core.TransportException: [/192.168.10.1:9042] Cannot connect))
IP-адрес 192.168.10.1 - это broadcast_address
узла Кассандра. В rpc_address
отличается, поэтому агент не может подключиться к узлу. Этот неправильный IP-адрес отправляется из OpsCenter агенту, как показано в файле журнала (переформатирован для лучшей читаемости):
INFO [StompConnection receiver] 2015-12-15 10:42:23,492 Got new config from OpsCenter: {
:cassandra_port 9042,
:rollups300_ttl 7776000,
:destinations [],
:restore_req_update_period 1,
:cassandra_rpc_interface "192.168.10.1",
:rollups60_ttl 7776000,
:thrift_port 9160,
:ec2_metadata_api_host "169.254.169.254",
:metrics_enabled 1,
:backup_staging_dir "",
:rollups7200_ttl 7776000,
:ssl_keystore nil,
:metrics_ignored_column_families "",
:cassandra_log_location "/var/log/cassandra/system.log",
:config_md5 "49a3234ff4e1eca80f3b2c2027ae5d9c",
:jmx_port 7199,
:provisioning 0,
:use_ssl 1,
:max_pending_repairs 5,
:rollups86400_ttl -1,
:api_port "61621",
:storage_keyspace "OpsCenter",
:hosts ["192.168.10.1"],
:metrics_ignored_solr_cores "",
:metrics_ignored_keyspaces "system, system_traces, system_auth, dse_auth, OpsCenter",
:rollup_subscriptions [],
:cassandra_install_location ""}
После перезапуска OpsCenter, а затем агента агенту отправляется правильный IP-адрес, и ошибки больше не регистрируются.
Пока узел присоединяется, таблица system.peers не содержит записи для нового узла. Впоследствии он содержит правильные адреса.
Как мы можем заставить новых агентов использовать правильный адрес (rpc_address), кроме перезапуска OpsCenter при каждом добавлении новых узлов?
Обновление: установка хостов в address.yaml не работает
Просто попробовал установить hosts: ["192.168.8.1"]
(который является rpc_address узла) в /var/lib/datastax-agent/conf/address.yaml
. Поведение точно такое же. Кажется, что этот хост перезаписан тем, что предоставляет OpsCenter:
INFO [main] 2015-12-22 08:55:15,207 Loading conf files: /var/lib/datastax-agent/conf/address.yaml
INFO [main] 2015-12-22 08:55:15,258 Java vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.8.0_45
INFO [main] 2015-12-22 08:55:15,258 DataStax Agent version: 5.1.3
INFO [main] 2015-12-22 08:55:15,282 Default config values: {... :agent_rpc_broadcast_address "192.168.10.1", ... :hosts ["192.168.8.1"]}
...
INFO [StompConnection receiver] 2015-12-22 08:55:21,015 Got new config from OpsCenter: {... :cassandra_rpc_interface "192.168.10.1", ... :hosts ["192.168.10.1"] ...}
...
ERROR [Initialization] 2015-12-22 08:55:22,926 Can't connect to Cassandra, retrying soon.
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /192.168.10.1:9042 (com.datastax.driver.core.TransportException: [/192.168.10.1:9042] Cannot connect))
...
WARN [Initialization] 2015-12-22 08:55:32,652 Resetting cluster because {:hosts ["192.168.8.1"]} changed to {:hosts ["192.168.10.1"], :local_interface "192.168.10.1"}