Кассандра: узлы во 2-м центре данных не могут подключиться - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь настроить Cassandra в двух центрах обработки данных на виртуальных машинах Azure в качестве док-контейнеров.Я направлялся к руководству, расположенному здесь: https://gokhanatil.com/2018/02/build-a-cassandra-cluster-on-docker.html. Однако я не понимаю, что руководство, по-видимому, порождает узлы cas2 и cas3 на одной и той же виртуальной машине, несмотря на указание другого центра данных.Разве они физически не находились бы в том же месте, несмотря на требование другого центра обработки данных?

Я пытался запустить узел cas3 на другой виртуальной машине, указав публичный IP-адрес начального узла в первом центре данных.(CAS1).Я также внес в белый список публичные IP-адреса и порты Cassandra (7000, 7001, 7199, 9042, 9160, 9142) на обеих этих виртуальных машинах в пользовательском интерфейсе Azure, чтобы они могли видеть друг друга.

cas1 и cas2 были созданы наодна и та же виртуальная машина в качестве отдельных контейнеров, может видеть друг друга и оба работают, как говорится в руководстве:

admin@cassandra-1:~$ sudo docker exec -ti cas1 nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.17.0.3  295.15 KiB  256          49.2%             c79d0871-d4a3-4735-a0e0-80304009989d  rack1
UN  172.17.0.2  263.4 KiB  256          50.8%             5990e65d-9a69-4fe1-8879-100382f38349  rack1

cas3, который я порождаю на виртуальной машине в другом регионе, указав CASSANDRA_SEEDS, соответствующий внешнему IP-адресу Azure для cassandra-1, которую хранит VMумирает со следующей ошибкой:

Exception (java.lang.RuntimeException) encountered during startup: Unable to gossip with any peers
java.lang.RuntimeException: Unable to gossip with any peers
        at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1435)
        at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:566)
        at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:823)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:683)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:632)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:388)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:620)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:732)
ERROR [main] 2019-03-28 21:01:19,890 CassandraDaemon.java:749 - Exception encountered during startup
java.lang.RuntimeException: Unable to gossip with any peers
        at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1435) ~[apache-cassandra-3.11.4.jar:3.11.4]
        at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:566) ~[apache-cassandra-3.11.4.jar:3.11.4]
        at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:823) ~[apache-cassandra-3.11.4.jar:3.11.4]
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:683) ~[apache-cassandra-3.11.4.jar:3.11.4]
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:632) ~[apache-cassandra-3.11.4.jar:3.11.4]
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:388) [apache-cassandra-3.11.4.jar:3.11.4]
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:620) [apache-cassandra-3.11.4.jar:3.11.4]
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:732) [apache-cassandra-3.11.4.jar:3.11.4]
INFO  [StorageServiceShutdownHook] 2019-03-28 21:01:19,914 HintsService.java:209 - Paused hints dispatch
WARN  [StorageServiceShutdownHook] 2019-03-28 21:01:19,914 Gossiper.java:1559 - No local state, state is in silent shutdown, or node hasn't joined, not announcing shutdown
INFO  [StorageServiceShutdownHook] 2019-03-28 21:01:19,914 MessagingService.java:981 - Waiting for messaging service to quiesce
INFO  [ACCEPT-/172.17.0.2] 2019-03-28 21:01:19,915 MessagingService.java:1336 - MessagingService has terminated the accept() thread
INFO  [StorageServiceShutdownHook] 2019-03-28 21:01:23,224 HintsService.java:209 - Paused hints dispatch

Я использовал следующие команды для создания 2 контейнеров на первой виртуальной машине:

docker run --name cas1 -p 9042:9042 -e CASSANDRA_CLUSTER_NAME=cluster1 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=datacenter1 -d cassandra
docker run --name cas2 -e CASSANDRA_SEEDS="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' cas1)" -e CASSANDRA_CLUSTER_NAME=cluster1 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=datacenter1 -d cassandra

И следующую команду на 2-й виртуальной машине, где контейнерне удается соединитьсяустановка?

1 Ответ

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

Для вашей проблемы, если вы просто запускаете Cassandra на разных виртуальных машинах, а не в Docker, то это тот случай, когда вы используете мультицентр на разных узлах.Но вы управляете Кассандрой на Докере.Затем возникает проблема, связанная с тем, что контейнеры взаимодействуют через мультихост.

Связь через мультихост для контейнеров Docker - это сложная проблема.Вы должны создать кластер Docker, тогда контейнеры могут взаимодействовать через несколько хостов.Для вас это означает, что Cassandra может взаимодействовать через разные центры обработки данных на разных виртуальных машинах.

Я предлагаю вам попробовать запустить Cassandra на кластере AKS с несколькими узлами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...