redis-cluster - добавить подчиненный узел в существующий кластер с удаленного компьютера, навсегда зависшего
Я пытаюсь подключить кластер из 8 реплик на один адрес к существующему кластеру на другой адрес.
Все серверы реплики работают в режиме кластера.
Когда я пытаюсь сделать либо:
./redis-trib.rb add-node --slave REPLICA_IP:6380 MASTER_IP:6380
или же
./redis-cli --cluster add-node REPLICA_IP:6380 MASTER_IP:6380 --cluster-slave
Я получаю тот же результат;
Waiting for the cluster to join...........................
который висит бесконечно.
Два сервера могут определенно видеть друг друга, и я могу подключиться к любому соответствующему узлу redis-узла (реплике или ведущему) с любого сервера Порты обнаружения / связи (16830 и т. Д.) Также открыты и доступны для связи. Вывод этих команд также предполагает, что кластер был найден, поскольку он показывает каждый из узлов и их правильные идентификаторы узлов.
Вот полный вывод любой команды add-node:
>>> Adding node REPLICA_IP:6380 to cluster MASTER_IP:6380
>>> Performing Cluster Check (using node MASTER_IP:6380)
M: 043a5fa4fdca929d3d87f953906dc7c1f030926c MASTER_IP:6380
slots:[0-2047] (2048 slots) master
M: e104777d31630eef11a01e41c7d3a6c98e14ab64 MASTER_IP:6386
slots:[12288-14335] (2048 slots) master
M: 9c807d6f57a9634adcdf75fa1943c32c985bda1c MASTER_IP:6384
slots:[8192-10239] (2048 slots) master
M: 0f7ec07deff97ca23fe67109da2365d916ff1a67 MASTER_IP:6383
slots:[6144-8191] (2048 slots) master
M: 974e8b4051b7a8e33db62ba7ad62c7e54abe699d MASTER_IP:6382
slots:[4096-6143] (2048 slots) master
M: b647bb9d732ff2ee83b097ffb8b49fb2bccd366f MASTER_IP:6387
slots:[14336-16383] (2048 slots) master
M: a86ac1d5e783bed133b153e471fdd970c17c6af5 MASTER_IP:6381
slots:[2048-4095] (2048 slots) master
M: 6f859b03f86eded0188ba493063c5c2114d7c11f MASTER_IP:6385
slots:[10240-12287] (2048 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master MASTER_IP:6380
>>> Send CLUSTER MEET to node REPLICA_IP:6380 to make it join the cluster.
Waiting for the cluster to join
............................
Если я бегу CLUSTER MEET
вручную, а затем CLUSTER NODES
Я могу временно увидеть другой узел в состоянии "рукопожатие" со статусом "отключен", а затем он исчезает. Он показывает идентификатор узла, который не совпадает с тем, что есть на самом деле.
3 ответа
Я понял:
Используя tcpdump, я подтвердил, что оба сервера многократно общались друг с другом как на портах сервера Redis, так и на портах рукопожатия, в то время как команда add-slave зависла навсегда.
но в конфигах redis для каждого узла у меня было:
bind 0.0.0.0
но как на мастерах, так и на репликах конфиг должен читать:
bind SERVER_IP
для того, чтобы CLUSTER MEET работал правильно.
В моем случае у каждого узла был одинаковый MMID, поэтому он ждал вечно.
Что я делал, я настроил EC2 ami и запустил 3 сервера из AMI и, используя пользовательские данные, я перенастроил кластер redis с помощью сценария оболочки и перезапустил сервер, каждый сервер получил тот же идентификатор, что и сервер, на котором я создал AMI.
M: b29aff425cdfa94272cdce1816939a9692c71e12 10.0.134.109:6379
slots:[0-5460] (5461 slots) master
M: b29aff425cdfa94272cdce1816939a9692c71e12 10.0.175.235:6379
slots:[5461-10922] (5462 slots) master
M: b29aff425cdfa94272cdce1816939a9692c71e12 10.0.155.10:6379
slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
Итак, на каждом узле я сделал CLUSTER RESET HARD
; оно работает
https://redis.io/commands/cluster-reset
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
M: 36a129fab85d2aed310bfd7cc141035de420fa92 10.0.134.109:6379
slots:[0-5460] (5461 slots) master
M: 773bc76e903da27efbd965bca26366fa20878397 10.0.175.235:6379
slots:[5461-10922] (5462 slots) master
M: 10a79173d1f7a9c568bdfa3b955b6e133d2dceaa 10.0.155.10:6379
slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 10.0.134.109:6379)
M: 36a129fab85d2aed310bfd7cc141035de420fa92 10.0.134.109:6379
slots:[0-5460] (5461 slots) master
M: 773bc76e903da27efbd965bca26366fa20878397 10.0.175.235:6379
slots:[5461-10922] (5462 slots) master
M: 10a79173d1f7a9c568bdfa3b955b6e133d2dceaa 10.0.155.10:6379
slots:[10923-16383] (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Если между узлами нет проблем с брандмауэром, вы можете проверить настройку привязки в redis.conf.
Конечно, вы должны привязать службу redis к LAN IP, но еще одно:
Удалить или переместить
127.0.0.1
до конца после LAN IP!
Именно так:
bind 10.2.1.x 127.0.0.1
или же
bind 10.2.1.x