Переключение с лидера на реплику в ADPG

Как упоминалось в статье Обзор архитектуры ADPG, ADPG использует Patroni для создания кластера на основе потоковой репликации PostgreSQL и реализации отказоустойчивости (High Availability,HA). Если необходимо переключиться с ноды-лидера кластера ADPG на реплику, можно сделать это вручную, с помощью команды patronictl switchover.

Эту команду можно использовать только в полностью исправном кластере, в котором присутствует:

  • нода-лидер;

  • синхронизированная реплика.

Выполните следующие шаги для переключения лидера:

  1. Запустите действие кластера Check, чтобы убедиться в его рабочем состоянии. Если ошибок не обнаружено, можно перейти к следующим пунктам.

  2. Подключитесь к одной из нод сервиса ADPG под пользователем postgres:

    $ sudo su - postgres
  3. Выполните команду 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 |
    +----------------------------------+--------------+---------+---------+----+-----------+
  4. Выполните команду 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 |           |
    +----------------------------------+--------------+---------+---------+----+-----------+
  5. Выполните следующую команду, чтобы убедиться, что лидер был изменен:

    $ 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). Его увеличение на всех нодах — признак того, что все прошло успешно.

  6. Выполните действие кластера Check, чтобы убедиться, что кластер работает корректно.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней