“No cluster leader” после перезапуска Consul

Я уже описывал это проблему в своей прошлой статье, но тогда я ещё не понимал всей сути. Сейчас я зашёл в своих исследованиях немного дальше и могу предложить лучшее решение.

Так вот. Проблема в том, что после перезапуска minikube консул не может выбрать лидера, а соответственно находится в нерабочем состоянии. В прошлой статье я описывал процесс удаления persistent volumes, что, разумеется, помогает, но не подходит в большинстве реальных ситуаций, так как мы хотим сохранить данные, которые были в Consul.

Правильное решение проблемы описано в официальной документации в статье про Outage Recovery.

Не буду слишком сильно вдаваться в подробности. Расскажу лишь, что на самом деле нужно сделать, чтобы завести Consul после перезапуска.

Для начала нам нужно подготовить файл “peers.json” примерно такого содержания:

Это был файл для Raft протокола версии 2, как написано в документации. Мне помог файл именно с таким форматом. Как вы можете видеть, в этом файле описаны адреса нод консула с портами. Если же у вас Raft протокол версии 3 и позже, то формат файла становится таким:

Ещё раз повторюсь, что мне помог файл первого формата, к тому же у меня был только одна нода Consulа, так что у меня он выглядел вот так:

Адреса нод Consul-а можно узнать командой:

Где вместо consul-consul-0 нужно подставить имя пода с Consul. В нашем случае IP будет 172.17.0.17.

Теперь нам нужно запихнуть этот файл в каталог, указанный в  -data-dir . В моём случае это файл нужно было разместить по адресу “/var/lib/consul/raft/peers.json”. Вы можете проверить правильность пути тем, что в каталоге, куда вы собираетесь поместить “peers.json”, уже должен находиться файл “peers.info”. У меня Consul был развёрнут внутри Kubernetes, поэтому я проверял вот такой командой:

Копируем файл во все  поды с Consul-ом по указанному выше пути (в моём случае был только один pod):

Перезапускаем поды, для чего удаляем их и ждём, пока replicaset его пересоздаст:

Смотрим логи:

В логах обязательно увидим надпись:

Эта надпись означает, что лидер был успешно выбран. Consul в рабочем состоянии.

Эту процедуру нужно проделывать после каждого перезапуска Consul-а. Видимо, предполагается, что Consul будет рамботать всегда, и остановки будут происходить только во время внезапных отключений электричества. Мне, правда, всё равно не понятно, зачем было делать такую сложную процедуру восстановления. Почему он не может восстановиться сам и выбрать лидера без нашего вмешательства, но это, скорее всего, из-за того, что я чего-нибудь ещё более глобального не понимаю.

 

“No cluster leader” после перезапуска Consul: 2 комментария

  1. Привет! Подскажите пожалуйста, так сам peers.json надо править на хосте или в самой поде?
    После удаления он разве останется актуальным?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *