Переключение с лидера на реплику в ADPG
Как упоминалось в статье Обзор архитектуры ADPG, ADPG использует Patroni для создания кластера на основе потоковой репликации PostgreSQL и реализации отказоустойчивости (High Availability,HA). Если необходимо переключиться с ноды-лидера кластера ADPG на реплику, можно сделать это вручную, с помощью команды patronictl switchover.
Эту команду можно использовать только в полностью исправном кластере, в котором присутствует:
-
нода-лидер;
-
синхронизированная реплика.
Выполните следующие шаги для переключения лидера:
-
Запустите действие кластера Check, чтобы убедиться в его рабочем состоянии. Если ошибок не обнаружено, можно перейти к следующим пунктам.
-
Подключитесь к одной из нод сервиса ADPG под пользователем
postgres
:$ sudo su - postgres
-
Выполните команду patronictl list для отображения членов кластера (cluster members):
$ patronictl -c /etc/adpg16-patroni/adpg16-patroni.yml list
где
/etc/adpg16-patroni/adpg16-patroni.yml
— путь к файлу конфигурации Patroni.Результат:
+ Cluster: test_adpg_cluster (7397708120470393282) ---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +----------------------------------+--------------+---------+---------+----+-----------+ | test_adpg_cluster_eek-adpg-adpg1 | 10.92.40.49 | Leader | running | 10 | | | test_adpg_cluster_eek-adpg-adpg2 | 10.92.42.110 | Replica | running | 10 | 0 | | test_adpg_cluster_eek-adpg-adpg3 | 10.92.42.217 | Replica | running | 10 | 0 | +----------------------------------+--------------+---------+---------+----+-----------+
-
Выполните команду
patronictl switchover
:$ patronictl -c <путь к patroni.yml> switchover --leader <текущий лидер> --candidate <новый лидер>
Используйте в качестве параметров имена членов кластера из списка выше:
$ patronictl -c /etc/adpg16-patroni/adpg16-patroni.yml switchover --leader test_adpg_cluster_eek-adpg-adpg1 --candidate test_adpg_cluster_eek-adpg-adpg3
Следующий текст будет выведен:
When should the switchover take place (e.g. 2024-08-02T15:28 ) [now]:
Нажмите
Enter
, чтобы подтвердить, что лидер должен быть переключен немедленно.Напечатайте
y
в ответ на следующее сообщение:Are you sure you want to switchover cluster test_adpg_cluster, demoting current master test_adpg_cluster_eek-adpg-adpg1? [y/N]:
Результат:
2024-08-02 14:29:02.22919 Successfully switched over to "test_adpg_cluster_eek-adpg-adpg3" + Cluster: test_adpg_cluster (7397708120470393282) ---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +----------------------------------+--------------+---------+---------+----+-----------+ | test_adpg_cluster_eek-adpg-adpg1 | 10.92.40.49 | Replica | stopped | | unknown | | test_adpg_cluster_eek-adpg-adpg2 | 10.92.42.110 | Replica | running | 10 | 0 | | test_adpg_cluster_eek-adpg-adpg3 | 10.92.42.217 | Leader | running | 10 | | +----------------------------------+--------------+---------+---------+----+-----------+
-
Выполните следующую команду, чтобы убедиться, что лидер был изменен:
$ patronictl -c /etc/adpg16-patroni/adpg16-patroni.yml list
В столбце
Role
отображается, является ли узел лидером или репликой:+ Cluster: test_adpg_cluster (7397708120470393282) ---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +----------------------------------+--------------+---------+---------+----+-----------+ | test_adpg_cluster_eek-adpg-adpg1 | 10.92.40.49 | Replica | running | 11 | 0 | | test_adpg_cluster_eek-adpg-adpg2 | 10.92.42.110 | Replica | running | 11 | 0 | | test_adpg_cluster_eek-adpg-adpg3 | 10.92.42.217 | Leader | running | 11 | | +----------------------------------+--------------+---------+---------+----+-----------+
При выполнении команды switchover увеличивается timeline (столбец
TL
). Его увеличение на всех нодах — признак того, что все прошло успешно. -
Выполните действие кластера Check, чтобы убедиться, что кластер работает корректно.