Как переподключить узлы кластера Redis? - PullRequest
0 голосов
/ 15 февраля 2019

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

Мне нужно найти решение для такого аварийного случая, как этот.Давайте предположим, что все узлы были переназначены с разными ips, как я могу настроить узлы для доступа к другим ips?

Слэвы легко сбрасываются с помощью команды CLUSTER RESET, но хозяева содержат слоты и данные, которые должныне удаляется.

Должен ли я вручную перезаписать node.conf?Боюсь, это сделает это еще хуже?У меня есть известный способ с этим бороться?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

По моему мнению, вам вообще не следует полагаться на внутренний IP-адрес Pods при обращении к кластеру Redis в любом месте вашего приложения.Стручки смертельны, это означает, что они предназначены для разрушения.Поэтому, когда умирает узел, они тоже уничтожаются.Когда узел восстанавливается, POD воссоздаются с новыми IP-адресами.

Надлежащим способом нацеливания на ваши POD будет использование их DNS-имен (как объяснено здесь ), если вы создали свой кластер Redis какГосударственное приложение.

0 голосов
/ 15 февраля 2019

Нашли решение:

Первый шаг - изменить текущий IP-адрес модуля в node.conf при запуске модуля.Вы можете добиться этого с помощью этого скрипта

#!/bin/sh
    CLUSTER_CONFIG="/data/nodes.conf"
    if [ -f ${CLUSTER_CONFIG} ]; then
      if [ -z "${POD_IP}" ]; then
        echo "Unable to determine Pod IP address!"
        exit 1
      fi
      echo "Updating my IP to ${POD_IP} in ${CLUSTER_CONFIG}"
      sed -i.bak -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${CLUSTER_CONFIG}
    fi
    exec "$@"

Вы должны запустить любой модуль, вызвав этот сценарий и передав ему исходную команду запуска redis-сервера.

Теперь каждый модуль в кластере имеетустановлен правильный IP-адрес.

  1. Убедитесь, что блоки кластера стабильны и не дают сбой.
  2. Вручную отредактируйте node.conf в одном из модулей.Установите правильные IP-адреса вместо устаревших.
  3. Перезапустите модуль, который вы редактировали, с помощью redis-cli shutdown.Kubernetes создаст новый стручок для этого.IP нового модуля будет установлен с помощью сценария, который я добавил выше.
...