Перейти к основному содержимому

Режим паузы/возобновления для кластера

примечание

Эта страница переведена при помощи нейросети GigaChat.

Цель

При определенных обстоятельствах Patroni необходимо временно отказаться от управления кластером, сохраняя при этом состояние кластера в DCS. Возможные сценарии использования — это нестандартные активности на кластере, такие как мажорные обновления версии или восстановление после повреждений. Во время таких активностей узлы часто запускаются и останавливаются по причинам, неизвестным Patroni, некоторые узлы могут быть даже временно повышены, что нарушает предположение о запуске только одного первичного узла. Поэтому Patroni должен иметь возможность «отсоединиться» от работающего кластера, реализуя эквивалент режима обслуживания в Pacemaker.

Реализация

Когда Patroni работает в режиме паузы, он не изменяет состояние PostgreSQL, за исключением следующих случаев:

  • Для каждого узла ключ участника в DCS обновляется текущей информацией о кластере. Это приводит к тому, что Patroni выполняет запросы только на чтение на узле-участнике, если участник работает.
  • Для первичного узла PostgresSQL с блокировкой лидера Patroni обновляет блокировку. Если узел с блокировкой лидера перестает быть первичным (то есть вручную понижается), Patroni освободит блокировку вместо того, чтобы снова повысить узел.
  • Разрешены ручной незапланированный перезапуск, ручной незапланированный failover/switchover и reinitialize. Никакие запланированные действия не разрешены. Ручное переключение разрешено только если указан узел, на который нужно переключиться.
  • Если Patroni обнаруживает «параллельные» первичные узлы, он выдает предупреждение, но не понижает первичный узел без блокировки лидера.
  • Если в кластере нет блокировки лидера, работающий первичный узел захватывает блокировку. Если первичных узлов более одного, то выигрывает первый первичный узел, захвативший блокировку. Если первичных узлов нет вообще, Patroni не пытается повысить какие-либо реплики. Есть исключение из этого правила: если блокировки лидера нет, потому что старый первичный узел понизил себя из-за ручного повышения, то только узел-кандидат, указанный в запросе на повышение, может захватить блокировку лидера. Когда новая блокировка лидера предоставлена (то есть после ручного повышения реплики), Patroni убеждается, что реплики, которые потоково передавали данные от предыдущего лидера, переключатся на нового.
  • Когда PostgresSQL остановлен, Patroni не пытается его запустить. Когда Patroni остановлен, он не пытается остановить управляемый им экземпляр PostgresSQL.
  • Patroni не будет пытаться удалить слоты репликации, которые не представляют другого участника кластера или не перечислены в конфигурации постоянных слотов.

Использование

patronictl поддерживает команды pause и resume.

Также можно отправить запрос PATCH к ключу {namespace}/{cluster}/config с содержимым {"pause": true/false/null}.