У нас есть два центра обработки данных (192.X.X.X и 10.X.X.X), между которыми возможны сплетни (порт 7001), но не бережливость или собственный протокол. OpsCenter работает на узле в первом центре обработки данных (192.X.X.X).
После обновления OpsCenter 5.1.3 до OpsCenter 5.2.0 в CentOS 6.6 на панели инструментов отображается только сообщение «Невозможно подключиться к кластеру».
В opscenterd.log
В файле показаны повторяющиеся попытки подключения к кластеру.
Он начинается с подключения к начальному узлу:
2015-08-10 11:52:04+0200 [Cluster_01] DEBUG: Connecting to cluster, contact points: ['192.168.0.100', '192.168.0.101']; protocol version: 2 2015-08-10 11:52:04+0200 [] DEBUG: Host 192.168.0.100 is now marked up 2015-08-10 11:52:04+0200 [] DEBUG: Host 192.168.0.101 is now marked up 2015-08-10 11:52:04+0200 [Cluster_01] DEBUG: [control connection] Opening new connection to 192.168.0.100 2015-08-10 11:52:04+0200 [] INFO: Starting factory 2015-08-10 11:52:04+0200 [Cluster_01] DEBUG: [control connection] Established new connection , registering watchers and refreshing schema and topology 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Refreshing node list and token map using preloaded results
Следующая часть повторяется для каждого узла в другом центре обработки данных, а также для каждого узла из локального центра обработки данных, которого нет в списке начальных узлов:
2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Found new host to connect to: 10.0.0.1 2015-08-10 11:52:05+0200 [Cluster_01] INFO: New Cassandra host 10.0.0.1 discovered 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Handling new host 10.0.0.1 and notifying listeners 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Not adding connection pool for new host 10.0.0.1 because the load balancing policy has marked it as IGNORED 2015-08-10 11:52:05+0200 [] DEBUG: Host 10.0.0.1 is now marked up
Журнал продолжается немного до закрытия управляющего соединения:
2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Finished fetching ring info 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Rebuilding token map due to topology changes 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Attempting to use preloaded results for schema agreement 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Schemas match 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] user types table not found 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Fetched schema, rebuilding metadata 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Control connection created 2015-08-10 11:52:05+0200 [] DEBUG: Initializing new connection pool for host 192.168.0.100 2015-08-10 11:52:05+0200 [] INFO: Starting factory 2015-08-10 11:52:05+0200 [] INFO: Starting factory 2015-08-10 11:52:05+0200 [] DEBUG: Finished initializing new connection pool for host 192.168.0.100 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Added pool for host 192.168.0.100 to session 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Shutting down Cluster Scheduler 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Not executing scheduled task due to Scheduler shutdown 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Shutting down control connection 2015-08-10 11:52:05+0200 [] DEBUG: Closing connection (46700368) to 192.168.0.100 2015-08-10 11:52:05+0200 [] DEBUG: Closed socket to 192.168.0.100 2015-08-10 11:52:05+0200 [] DEBUG: Closing connection (44407568) to 192.168.0.100 2015-08-10 11:52:05+0200 [] DEBUG: Closed socket to 192.168.0.100 2015-08-10 11:52:05+0200 [] DEBUG: Connect lost: [Failure instance: Traceback (failure with no frames): : Connection was closed cleanly. ] 2015-08-10 11:52:05+0200 [] DEBUG: Closing connection (47567568) to 192.168.0.100 2015-08-10 11:52:05+0200 [] INFO: Stopping factory 2015-08-10 11:52:05+0200 [] DEBUG: Closed socket to 192.168.0.100 2015-08-10 11:52:05+0200 [] DEBUG: Connect lost: [Failure instance: Traceback (failure with no frames): : Connection was closed cleanly. ] 2015-08-10 11:52:05+0200 [] INFO: Stopping factory 2015-08-10 11:52:05+0200 [] DEBUG: Connect lost: [Failure instance: Traceback (failure with no frames): : Connection was closed cleanly. ] 2015-08-10 11:52:05+0200 [] INFO: Stopping factory
Затем происходит нечто странное: устанавливается соединение с первым узлом в другом центре обработки данных:
2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: Connecting to cluster, contact points: ['10.0.0.1']; protocol version: 2 2015-08-10 11:52:05+0200 [] DEBUG: Host 10.0.0.1 is now marked up 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG: [control connection] Opening new connection to 10.0.0.1 2015-08-10 11:52:05+0200 [] INFO: Starting factory 2015-08-10 11:52:07+0200 [] TRACE: Sending heartbeat. 2015-08-10 11:52:10+0200 [Cluster_01] WARN: [control connection] Error connecting to 10.0.0.1: errors=Timed out creating connection, last_host=None 2015-08-10 11:52:10+0200 [Cluster_01] ERROR: Control connection failed to connect, shutting down Cluster: ('Unable to connect to any servers', {'10.0.0.1': OperationTimedOut('errors=Timed out creating connection, last_host=None',)}) 2015-08-10 11:52:10+0200 [Cluster_01] DEBUG: Shutting down Cluster Scheduler 2015-08-10 11:52:10+0200 [Cluster_01] DEBUG: Shutting down control connection 2015-08-10 11:52:10+0200 [Cluster_01] DEBUG: Not executing scheduled task due to Scheduler shutdown 2015-08-10 11:52:10+0200 [] WARN: No cassandra connection available for hostlist ['192.168.0.100', '192.168.0.101'] . Retrying.
Это, конечно, не работает, поскольку мы не хотим, чтобы клиенты общались через центры обработки данных.
Даже с такой конфигурацией кластера OpsCenter по-прежнему пытается подключиться к другому (неправильному) центру обработки данных:
[cassandra] seed_hosts = 192.168.0.100,192.168.0.101 username = opscenter password = XXX local_dc_pref = DC1 used_hosts_per_remote_dc = 0
Эта установка работала без проблем для всех версий OpsCenter до 5.2.0. Является ли новым требованием, чтобы все узлы были доступны через собственный протокол из OpsCenter? Разве я не могу указать OpsCenter подключаться только к его локальному центру обработки данных?
Я могу подтвердить вашу ошибку, и ее можно будет отследить как OPSC-6299 (извините, нет общедоступного трекера ошибок, но его можно использовать для связи с Datastax или будущих ссылок на тикеты).
Суть в том, что OpsCenter должен соблюдать эту политику балансировки нагрузки, она действительна, но в этом случае есть ошибка.