×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

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

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

3.14.3. Отработка отказа в механизме логической репликации

Для обеспечения непрерывной репликации данных на узлы-подписчики в случае сбоя издателя необходимо наличие физического резервного сервера, соответствующего узлу-издателю. Логические слоты на основном сервере, соответствующие подпискам, могут быть синхронизированы с резервным сервером при указании значения failover = true в процессе создания подписок. Подробности см. в Раздел 5.12.2.3 . Использование параметра Отработка отказа гарантирует бесшовный переход этих подписок после повышения роли резервного сервера. Подписчики могут продолжать работу с публикациями на новом основном сервере.

Так как синхронизация слотов происходит асинхронно, перед выполнением отработки отказа необходимо убедиться, что слоты репликации были полностью синхронизированы с резервным сервером. Для обеспечения успешной отработки отказа резервный сервер должен опережать подписчика. Это может быть достигнуто путем настройки synchronized_standby_slots.

Чтобы подтвердить готовность резервного сервера к отработке отказа, выполните следующие шаги для проверки синхронизации всех необходимых слотов логической репликации с резервным сервером:

  1. На узле-подписчике выполните следующий SQL-запрос, чтобы определить слоты репликации, которые должны быть синхронизированы с резервным сервером, планируемым к повышению. Данный запрос вернет соответствующие слоты репликации, связанные с подписками, для которых активирована функция отработки отказа.

    test_sub=# SELECT
                   array_agg(quote_literal(s.subslotname)) AS slots
               FROM  pg_subscription s
               WHERE s.subfailover AND
                     s.subslotname IS NOT NULL;
     slots
    -------
     {'sub1','sub2','sub3'}
    (1 row)
    
  2. На узле-подписчике выполните следующий SQL-запрос, чтобы определить слоты синхронизации таблиц, которые должны быть синхронизированы с резервным сервером, планируемым к повышению. Данный запрос необходимо выполнить в каждой базе данных, содержащей подписки с включенной функцией отработки отказа. Обратите внимание, что слот синхронизации таблицы должен быть синхронизирован с резервным сервером только при условии завершения копирования таблицы (см. Раздел 7.2.55). Обеспечение синхронизации слотов синхронизации таблиц в других сценариях не требуется, так как в этих случаях они будут либо удалены, либо повторно созданы на новом основном сервере.

    test_sub=# SELECT
                   array_agg(quote_literal(slot_name)) AS slots
               FROM
               (
                   SELECT CONCAT('pg_', srsubid, '_sync_', srrelid, '_', ctl.system_identifier) AS slot_name
                   FROM pg_control_system() ctl, pg_subscription_rel r, pg_subscription s
                   WHERE r.srsubstate = 'f' AND s.oid = r.srsubid AND s.subfailover
               );
     slots
    -------
     {'pg_16394_sync_16385_7394666715149055164'}
    (1 row)
    
  3. Проверьте, что определенные выше слоты логической репликации существуют на резервном сервере и готовы к отработке отказа.

    test_standby=# SELECT slot_name, (synced AND NOT temporary AND NOT conflicting) AS failover_ready
                   FROM pg_replication_slots
                   WHERE slot_name IN
                       ('sub1','sub2','sub3', 'pg_16394_sync_16385_7394666715149055164');
      slot_name                                 | failover_ready
    --------------------------------------------+----------------
      sub1                                      | t
      sub2                                      | t
      sub3                                      | t
      pg_16394_sync_16385_7394666715149055164   | t
    (4 rows)
    

Если все слоты присутствуют на резервном сервере и результат (failover_ready) приведенного выше SQL-запроса истинен (true), то существующие подписки могут продолжать работу с публикациями на новом основном сервере.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению