Как переподключить узлы кластера Redis?

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

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

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

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

Спасибо!

2 ответа

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

Первым шагом является изменение текущего IP-адреса pod в 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-server.

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

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

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

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

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