Режим приостановки/возобновления для кластера
Цель
В некоторых случаях Patroni должен временно прекратить управление кластером, сохраняя при этом состояние кластера в DCS. Возможные сценарии использования — редкие операции с кластером, такие как обновление до новой версии или восстановление после повреждения. В ходе таких операций узлы часто запускаются и останавливаются по причинам, неизвестным Patroni, некоторые узлы могут даже временно повышаться до статуса первичного сервера, что нарушает предположение о наличии только одного первичного сервера. Поэтому Patroni должен уметь «отключаться» от работающего кластера, реализуя эквивалент режима обслуживания, как в Pacemaker.
Реализация
Когда Patroni работает в режиме паузы, он не изменяет состояние PostgreSQL, за исключением следующих случаев:
- Для каждого узла ключ участника в DCS обновляется с текущей информацией о кластере. Это заставляет Patroni выполнять запросы только на чтение на узле-участнике, если участник работает.
- Для первичного сервера PostgreSQL с блокировкой лидера Patroni обновляет блокировку. Если узел с блокировкой лидера перестаёт быть первичным сервером (i.e. демотирован вручную), Patroni освободит блокировку вместо того, чтобы снова повысить узел до статуса первичного.
- Разрешены ручной неплановый перезапуск, ручное неплановое переключение при отказе/плановое переключение и повторная инициализация. Плановые действия запрещены. Плановое переключение разрешено только в том случае, если указан узел, на который нужно переключиться.
- Если Patroni обнаруживает «параллельные» первичные серверы, он выдаёт предупреждение, но не демотирует первичный сервер без блокировки лидера.
- Если в кластере отсутствует блокировка лидера, первичный сервер, работающий в данный момент, получает блокировку. Если существует более одного первичного сервера, то первым получившим блокировку первичным сервером побеждает. Если первичных серверов вообще нет, Patroni не пытается повышать реплики до статуса первичного. Исключение из этого правила: если блокировка лидера отсутствует из-за того, что старый первичный сервер сам понизил свой статус в результате ручного повышения, то блокировку лидера может получить только узел-кандидат, упомянутый в запросе на повышение. После выдачи новой блокировки лидера (i.e. после ручного повышения реплики) Patroni обеспечивает, что реплики, которые ранее стримили данные с предыдущего лидера, переключатся на новый лидер.
- При остановке Postgres Patroni не пытается запустить его. При остановке Patroni не пытается остановить экземпляр Postgres, которым управляет.
- Patroni не будет пытаться удалять слоты репликации, которые не представляют участников другого кластера или не указаны в конфигурации постоянных слотов.
Руководство пользователя
patronictl поддерживает команды pause и resume .
Можно также отправить запрос PATCH на ключ {namespace}/{cluster}/config с {"pause": true/false/null}