Как переподключить узлы кластера 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-адрес.
- Убедитесь, что блоки кластера стабильны и не дают сбой.
- Вручную отредактируйте node.conf в одном из модулей. Установите правильные IP-адреса вместо устаревших.
- Перезапустите модуль, с которым вы редактируете
redis-cli shutdown
, Kubernetes создаст новый стручок для этого. IP нового модуля будет установлен по сценарию, который я добавил выше.
По моему мнению, вам вообще не следует полагаться на внутренний IP-адрес Pods, когда вы ссылаетесь на ваш кластер Redis в любом месте вашего приложения. Стручки смертельны, это означает, что они предназначены для разрушения. Поэтому, когда умирает узел, они тоже уничтожаются. Когда узел воскресает, POD воссоздаются с новыми IP-адресами.
Надлежащим способом нацеливания на ваши POD будет использование их DNS-имен (как описано здесь), если вы создали кластер Redis как приложение с сохранением состояния.