2.10. Требования к катастрофоустойчивому кластеру #

Описываемая функциональность находится в разработке. Для внедрения в промышленную эксплуатацию обратитесь в поддержку.

2.10.1. Основные понятия и сокращения #

БД – база данных.

СУБД – система управления базами данных

ЦОД – центр обработки данных.

ОЦОД – основной центр обработки данных.

РЦОД – резервный центр обработки данных.

ОУК – отказоустойчивый кластер.

КУК — катастрофоустойчивый кластер.

2.10.2. Общее описание решения #

В ОЦОД заказчика размещаются основные сегменты кластера и кластер etcd. Сегмент представляет собой отказоустойчивый кластер из двух узлов с экземплярами СУБД Postgres Pro, один из которых в режиме ведущего, а другой в режиме синхронного резервного. На каждом узле сегмента запущена служба shardmand, которая проверяет экземпляры СУБД Postgres Pro и обменивается информацией с кластером etcd, обеспечивая кластеризацию Shardman. Кластер etcd состоит из трёх узлов, тем самым обеспечивая кворум.

Для обеспечения катастрофоустойчивости в РЦОД заказчика размещается кластер с идентичной конфигурацией и набором компонентов. По умолчанию узлы СУБД резервного кластера Shardman выключены. Непрерывная доставка журналов из ОЦОД в РЦОД осуществляется в асинхронном режиме. При этом используется протокол физической репликации с помощью утилиты pg_receivewal из стандартной поставки СУБД Shardman. Она записывает WAL в стандартный каталог экземпляра $PGDATA/pg_wal. Управление утилитой обеспечивается кластерным программным обеспечением. Узлы СУБД резервного кластера Shardman запускаются службой shardmand, когда обнаруживается точка синхронизации в резервном etcd кластере, в результате чего осуществляется синхронизация изменений WAL до LSN, полученного из точки синхронизации. Кластеры etcd в разных ЦОД изолированы друг от друга, в связи с этим передача информации о появлении новой точки синхронизации осуществляется скриптом периодически на стороне ОЦОД в etcd РЦОД.

Обратите внимание, что для ведущего кластера параметр syncPointMonitorEnabled должен иметь значение true.

2.10.3. Управление #

КУК управляется через утилиту shardmanctl с помощью следующих команд: shardmanctl cluster standby enable, shardmanctl cluster standby disable, shardmanctl cluster standby catchup, shardmanctl config update --from-primary-cluster.

Обратите внимание, что команду shardmanctl probackup restore можно использовать для развёртывания резервного кластера на основании резервной копии ведущего кластера с помощью указания --backup-path пути резервной копии из центра обработки данных. В таком случае не будет поддерживаться использование параметров --schema-only, metadata-only, а также восстановление одного сегмента. Резервный кластер должен находиться в режиме standby на момент выполнения восстановления. По завершении команды при отставании от кластера ОЦОД необходимо запустить команду shardmanctl cluster standby catchup.

2.10.4. Ключи etcd #

Ключ shardman/<cluster_name>/data/lsns/<shard_name>/<node_address> etcd содержит список LSN для контрольной точки экземпляра кластера.

[
"0/60085F0",
"0/8E67C98",
"0/8E59148",
"0/8E49CF8",
"0/8E3AC50"
]

Ключ shardman/<cluster_name>/data/syncpoints etcd содержит список точек синхронизации. Для резервных кластеров его необходимо скопировать с ведущего кластера.

[
        {
        "time": "2025-07-25T10:52:45.548891626Z",
        "CSN": 1753440765536815000,
        "LSNs": {
        "1": "0/8E3AC50",
        "2": "0/E96FC60"
        }
    },
    {
        "time": "2025-07-25T10:51:45.560671484Z",
        "CSN": 1753440705541502000,
        "LSNs": {
        "1": "0/60085F0",
        "2": "0/6009268"
        }
    }
]

Ключ shardman/<cluster_name>/data/wal-sync-state etcd выводит последнюю точку синхронизации, содержащую все сегменты WAL со всеми необходимыми LSN.

{
    "lastUpdated": "2025-07-25T10:55:11.644732497Z",
    "targetSyncpoint": {
    "time": "2025-07-25T10:51:45.560671484Z",
    "CSN": 1753440705541502000,
    "LSNs": {
    "1": "0/60085F0",
    "2": "0/6009268"
    }
}
}

Ключ shardman/<cluster_name>/data/last-replay-lsn/<shard_name>/<node_address> etcd выводит последний применённый LSN и соответствующий ему CSN точки синхронизации.

{
    "LSN": "0/6008648",
    "SyncpointCSN": "1753440705541502000",
    "UpdatedTime": "2025-07-25T10:54:15.40782001Z"
}

2.10.5. WAL-sync monitor #

На резервном кластере есть специальный WAL-sync monitor, который собирает информацию о входящих с ведущего кластера точках синхронизации. Он также проверяет наличие всех LSN в полученных сегментах WAL. Если всё в порядке, он создаёт запись в etcd о новой успешной точке синхронизации для резервного кластера.

2.10.6. Топология репликации #

Потоковая физическая репликация обеспечивается в следующих случаях:

  • Между узлами СУБД Postgres Pro сегменты в ОЦОД обеспечивается синхронная потоковая физическая репликация

  • Между узлами сегментов СУБД Postgres Pro в РЦОД обеспечивается синхронная потоковая физическая репликация

  • Между узлами сегментов СУБД Postgres Pro разных ЦОД обеспечивается асинхронная потоковая физическая репликация

2.10.7. Требования к оборудованию и сети #

В ОЦОД и РЦОД оборудование должно быть идентичным по системным ресурсам и конфигурации для всех компонентов катастрофоустойчивого кластера.

Связанность сети между ЦОД должна обеспечиваться прямой оптоволоконной линией. Пропускная способность канала должна быть не менее 20 Гбит/с. Также необходимо предусмотреть резервный канал.

2.10.8. Механизмы репликации #

Для обеспечения работы ОУК/КУК Shardman используется встроенный в Postgres Pro протокол потоковой физической репликации. Репликация на РЦОД асинхронная.

Автоматическое восстановление ОУК Shardman после сбоя обеспечивается кластерным программным обеспечением.

Восстановление КУК после сбоя предусмотрено только в ручном полуавтоматическом режиме.

2.10.9. Мониторинг и управление #

Мониторинг и управление кластером Shardman в рамках ЦОДа обеспечивается с помощью утилиты shardmanctl.

Для получения статуса кластера, работающего в режиме резерва, выполните команду shardmanctl status.

2.10.10. Безопасность #

2.10.10.1. Шифрование данных при передаче (TLS/SSL) #

Требуется обеспечить защищённый канал между ЦОДами.

2.10.10.2. Аутентификация и авторизация между узлами #

Аутентификация между узлами обеспечивается штатными средствами СУБД Postgres Pro.

2.10.10.3. Защита от несанкционированного доступа к резервным серверам #

Защита от несанкционированного доступа к резервным серверам обеспечивается средствами ОС и сети.

2.10.11. Тестирование и откат #

Рекомендуется периодически производить тестовое переключение.

2.10.11.1. Проверка целостности данных после аварийного переключения #

Проверка целостности данных после аварийного переключения обеспечивается утилитой резервного копирования shardmanctl probackup.

2.10.11.2. Переключение на РЦОД #

При отказе основного ЦОД, администратор убеждается в его недоступности и инициирует процедуру повышения резервных узлов до состояния рабочих. Для этого резервный кластер переводится из режима standby в режим master. Данная операция осуществляются централизованно с помощью командной утилиты shardmanctl, никаких дополнительных ручных операций не требуется.

2.10.11.3. Восстановление ОЦОД #

Для восстановления географически удалённых узлов в ОЦОД требуется создать резервную копию основного кластера и восстановить её на данные узлы. Резервная копия может быть создана любым способом – холодная РК, РК с использованием репозитория pg_probackup. Каждый из этих способов подразумевает перенос резервной копии в ОЦОД. После восстановления каталога БД из резервной копии, запускается pg_receivewal, который подключается к специально созданному слоту репликации ведущего или резервного сегмента в РЦОД и начинает приём WAL сегментов в асинхронном режиме, записывая их сразу в каталог $PGDATA/pg_wal основного узла.

На кластере РЦОД раз в заданный интервал времени скриптом создаётся точка синхронизации, которая записывается в etcd РЦОД, а также отправляется в etcd ОЦОД. Узлы резервного кластера в ОЦОД при появлении записи о точке синхронизации в etcd проверяют, получен ли WAL, содержащий данную запись. При наличии записи в WAL на всех узлах резервного кластера в ОЦОД кластерным ПО выполняется запуск сервера СУБД в режиме восстановления с проигрыванием журналов до точки синхронизации. По достижении резервным узлом точки синхронизации применение WAL останавливается, производится проверка, что все узлы успешно применили записи, после чего сервер СУБД останавливается и повторяются цикл получения WAL, проверки наличия точки синхронизации, запуск СУБД в режиме восстановления.

2.10.11.4. Переключение обратно на ОЦОД #

Чтобы переключиться обратно на ОЦОД, создаётся и переносится резервная копия кластера из РЦОД в ОЦОД, запускаются узлы в режиме резерва, после получения недостающих WAL происходит выключение узлов кластера в РЦОД и повышение узлов кластера в основном ЦОД.

2.10.12. Резервное копирование в рамках георезервирования #

В рамках географически распределённой системы для кластера РЦОД необходимо предусмотреть аналогичное хранилище резервных копий, как и для ОЦОД, а также настроить регулярную синхронизацию основного хранилища в резервное.

2.10.12.1. Хранение резервных копий в географически распределенных хранилищах #

Глубина хранения резервных копий определяется политикой резервного копирования.

2.10.13. Документация и регламенты #

За более подробной информацией по аварийному переключению и инструкциями по штатному переключению обратитесь в поддержку Prostres Pro.