Как решить проблему с кластером redis "Ожидание присоединения кластера"?

У меня есть 3 машины и я создаю 6 узлов для кластера Redis, я успешно создал его несколько месяцев назад, но сейчас он упал, я стараюсь изо всех сил, чтобы исправить это, но это не работает, поэтому я очищаю все данные и воссоздаю их с нуля Когда я использую следующую команду для создания кластера, он блокируется здесь, и ожидающий узел присоединяется к кластеру, я провожу некоторые исследования для этого, я очищаю свои данные, регистрируюсь снова и снова, делаю это снова и снова, но это все еще не работает.

redis-trib.rb create --replicas 1 10.2.1.208:6379 10.2.1.208:6380 10.2.1.209:6379 10.2.1.209:6380 10.2.1.15:6379 10.2.1.15:6380

показать результат

redis-trib.rb create --replicas 1 10.2.1.208:6379 10.2.1.208:6380 10.2.1.209:6379 10.2.1.209:6380 10.2.1.15:6379 10.2.1.15:6380
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.2.1.208:6379
10.2.1.209:6379
10.2.1.15:6379
Adding replica 10.2.1.209:6380 to 10.2.1.208:6379
Adding replica 10.2.1.208:6380 to 10.2.1.209:6379
Adding replica 10.2.1.15:6380 to 10.2.1.15:6379
M: 73b3b99bb17de63aa99eaf592376f0a06feb3d66 10.2.1.208:6379
   slots:0-5460 (5461 slots) master
S: 05b33ed6691797faaf7ccec1541396472b9d2866 10.2.1.208:6380
   replicates f14702ebb1462b313dd7eb4809ec50e30e4eef36
M: f14702ebb1462b313dd7eb4809ec50e30e4eef36 10.2.1.209:6379
   slots:5461-10922 (5462 slots) master
S: 3a9f433a8503281b0ddfc6ec69016908735053b8 10.2.1.209:6380
   replicates 73b3b99bb17de63aa99eaf592376f0a06feb3d66
M: 2fd97e8842828dba6b425b6a30e764fb06915737 10.2.1.15:6379
   slots:10923-16383 (5461 slots) master
S: c46db592d49bc1e9d8b5efb27b9799929c5186a4 10.2.1.15:6380
   replicates 2fd97e8842828dba6b425b6a30e764fb06915737
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...........................................................................^C/usr/local/bin/redis-trib.rb:652:in `sleep': Interrupt
        from /usr/local/bin/redis-trib.rb:652:in `wait_cluster_join'
        from /usr/local/bin/redis-trib.rb:1305:in `create_cluster_cmd'
        from /usr/local/bin/redis-trib.rb:1695:in `<main>'

6 ответов

Ссылка на официальный сайт Redis

Каждый узел Redis Cluster требует двух открытых соединений TCP. Например, обычный TCP-порт Redis, используемый для обслуживания клиентов. 6379плюс порт, полученный путем добавления 10000 к порту данных, так 16379 в этом примере.

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

Клиенты никогда не должны пытаться связаться с портом шины кластера, но всегда с обычным командным портом Redis, однако убедитесь, что вы открыли оба порта в брандмауэре, иначе узлы кластера Redis не смогут обмениваться данными. Если вы не откроете оба TCP-порта, ваш кластер не будет работать должным образом.

Смещение порта командного порта и шины кластера является фиксированным и всегда 10000,

Я использовал AWS, но не открыл 16379 портов 16380, которые вызвали эту проблему.

Если между этими 6 узлами нет проблем с межсетевым экраном, вы можете проверить настройку привязки в redis.conf.

Конечно, вы должны связать службу redis с LAN IP, но есть еще одна вещь:

!!! УДАЛИТЬ 127.0.0.1 или ПЕРЕМЕСТИТЬ 127.0.0.1 К КОНЦУ ПОСЛЕ ЛВС IP.!!!

Именно так bind 10.2.1.x 127.0.0.1 или же bind 10.2.1.x

Я столкнулся с этой проблемой, когда создавал кластер между 3 узлами на 3 серверах, ожидая, что кластер присоединится навсегда. Это ошибка в Redis, может быть, по крайней мере в Redis 5.0, когда вы помещаете 127.0.0.1 перед IP-адресом локальной сети.

Вы также можете столкнуться с этой проблемой, если используете 127.0.0.1 в качестве имени хоста вместо IP-адреса. В этом случае вам нужно будет изменить его, чтобы использовать IP-адрес в качестве имени хоста. /questions/19412263/redis3-klaster-beskonechen-v-ozhidanii-prisoedineniya-klastera/19412265#19412265

Ни один из этих ответов не сработал для меня, но я нашел следующий блог, который помог:

https://linux.m2osw.com/redis-infamous-waiting-cluster-join-message

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

Решение состоит в том, чтобы остановить сервер redis, а затем удалить файл nodes.conf, фактическое имя которого определено в вашем файле redis.conf. Мой на самом деле назывался nodes-6379.conf. Затем перезапустите сервер Redis. Сделайте это на всех узлах.

Установлен cluster-announce-ipв redis.configк тому же значению bind.

Я испробовал здесь все возможные предложения, но это, наконец, сработало для меня в моей настройке kubernetes/docker.

Действительно, в разделе redis.conf я нашел:

      ########################## CLUSTER DOCKER/NAT support  ########################

> # In certain deployments, Redis Cluster nodes address discovery fails, because
> # addresses are NAT-ted or because ports are forwarded (the typical case is
> # Docker and other containers).
> #
> # In order to make Redis Cluster working in such environments, a static
> # configuration where each node knows its public address is needed. The
> # following four options are used for this scope, and are:
> #
> # * cluster-announce-ip ...

Это может быть из-за копирования виртуальных машин/контейнеров с предустановленным Redis. Когда вы устанавливаете Redis, он создает конфигурацию с предварительно созданными идентификаторами, и появляется та же конфигурация:

      # cat /etc/redis/redis.conf
...
cluster-config-file nodes-6379.conf
...

Вы можете проверить это и удалить, если это так:

      # rm /var/lib/redis/nodes-6379.conf

И после перезапуска redis. Эти пути для Ubuntu. Ссылка на пост, который мне помогает https://linux.m2osw.com/redis-infamous-waiting-cluster-join-message .

Другие вопросы по тегам