Как переключить резервный сервер в мастер на PostgreSQL 13?

Вопрос или проблема

Для высокой доступности на базе данных был построен кластер Active-Standby (реплика) на Postgresql-13. Вставка данных корректно передается на сервер ‘реплика’, это нормально. Теперь я хочу проверить случай, как я могу поменять роли на двух серверах. Для этого я удалил файл /var/lib/postgresql/13/main/standby.signal, также для применения изменений перезапустил postgrsql.service. Что-то говорит мне, что я делаю что-то не так. Итак,

  1. как сделать мастера из реплики,
  2. как затем из старого мастера (который временно был недоступен) вернуть мастера назад без потери данных?

Извините за мой английский.

Я пришел сюда, чтобы найти решение для postgresql 17. В моей конфигурации есть один основной сервер и один резервный сервер. Когда основной сервер выходит из строя, мне нужно было переключить резервный сервер на основной.

Это так же просто, как одна команда:

pg_ctl promote -D /var/lib/postgresql/17/main

Если вы на ubuntu, вы можете напрямую вызвать pg_ctl с полным путем:

/usr/lib/postgresql/17/bin/pg_ctl promote -D /var/lib/postgresql/17/main

Директория данных может быть разной для разных платформ. В моем случае /var/lib/postgresql/17/main — это директория.

Кроме того, я выполнил команду от имени пользователя postgres. Не уверен, сможет ли root или другой пользователь сделать то же самое.

Во время режима ожидания сервер не позволяет записи, однако после повышения он действует как основной, поэтому также может выполнять записи. После выполнения конфигураций, связанных с репликацией, можно запустить другой резервный сервер, который сможет реплицировать данные из нового основного.

Ответ или решение

Чтобы переключить режим работы сервера PostgreSQL 13 с резервного (standby) на основной (master), необходимо следовать определённым шагам и учесть важные аспекты. Ниже приведены детальные инструкции по выполнению этой задачи, а также информация о том, как вернуть старый основной сервер в статус основного без потери данных.

1. Как сделать основной сервер из резервного

Для начала необходимо удостовериться, что резервный сервер находится в режиме ожидания (standby) и правильно настраивается для получения обновлений из основного сервера. Чтобы сделать его основным, выполните следующие шаги:

  • Промоте резервный сервер:
    Используйте команду pg_ctl promote, чтобы выполнить промоцию резервного сервера до статуса основного. Важно сразу после этого перезапустить PostgreSQL, чтобы изменения вступили в силу:

    sudo -u postgres pg_ctl promote -D /var/lib/postgresql/13/main
  • Проверка состояния:
    После выполнения команды проверьте, что сервер стал основным. Вы можете сделать это, используя запрос к базе данных:

    SELECT pg_is_in_recovery();

    Если команда вернёт false, значит сервер успешно стал основным.

  • Настройки репликации:
    После того как резервный сервер стал основным, необходимо настроить его, чтобы он мог принимать записи. Это включает в себя редактирование файла конфигурации PostgreSQL (postgresql.conf) и файлу pg_hba.conf для обеспечения необходимых разрешений.

2. Как вернуть старый основной сервер в статус основного без потери данных

После того как вы переключили резервный сервер на основной, старый основной сервер может вернуть свои функции основного сервера. Чтобы сделать это без потери данных:

  • Подготовка старого основного сервера:
    Убедитесь, что старый основной сервер стал пассивным и не принимает записи. Для этого проверьте его состояние:

    SELECT pg_is_in_recovery();

    Если вернуло false, значит сервер ещё основной, и его нужно будет подготовить к восстановлению.

  • Настраиваем резервное копирование:
    Чтобы вернуть старый основной сервер в статус резервного, необходимо сделать его репликой. Вы можете использовать потоковую репликацию, чтобы синхронизировать данные старого основного сервера с новым. Для этого отключите старый основной сервер и создайте резервную копию с помощью pg_basebackup:

    sudo -u postgres pg_basebackup -h <адрес_нового_основного_сервера> -D /var/lib/postgresql/13/main -U <пользователь>
  • Настройка standby:
    После завершения копирования необходимых данных, добавьте файл recovery.conf в каталог данных старого основного сервера. В этом файле укажите параметры подключения к новому основному серверу:

    standby_mode = 'on'
    primary_conninfo = 'host=<адрес_нового_основного_сервера> user=<пользователь> password=<пароль>'
    trigger_file = '/tmp/postgresql.trigger.5432'
  • Перезапустите сервер:
    После настройки перезапустите сервер для активации режима ожидания:

    sudo systemctl restart postgresql

Заключение

Следуя указанным шагам, вы сможете эффективно переключать роли между основным и резервным серверами PostgreSQL 13 без потери данных. Не забывайте регулярно делать резервные копии и поддерживать конфигурацию в актуальном состоянии для обеспечения высокой доступности и надежности вашей системы.

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

Капча загружается...