Резервный кластер (Standby cluster)
Эта страница переведена при помощи нейросети GigaChat.
Patroni также поддерживает запуск каскадной репликации в удаленный дата-центр (регион) с использованием функции, называемой «резервный кластер» (standby cluster). Этот тип кластеров имеет:
- «лидер standby» (standby leader), который ведет себя практически как обычный лидер кластера, за исключением того, что он реплицируется с удаленного узла. -каскадные реплики, которые реплицируются с лидера standby.
Лидер standby удерживает и обновляет блокировку лидера в DCS. Если блокировка лидера истекает, каскадные реплики выполнят выборы для выбора другого лидера из standby.
Между резервным кластером и первичным кластером, с которого он реплицируется, нет дальнейших взаимосвязей; в частности, они не должны использовать одно и то же пространство имен (scope) DCS, если они используют один и тот же DCS. Они не знают ничего друг о друге, кроме информации о репликации. Кроме того, резервный кластер не отображается в выводе команд patronictl list или patronictl topology на первичном кластере.
Ради гибкости можно указать методы создания реплики и восстановления записей WAL, когда кластер находится в «режиме standby», предоставив ключ создания реплик в разделе standby_cluster. Это отличается от создания реплик, когда кластер отсоединен и функционирует как нормальный кластер, что контролируется параметром create_replica_methods в разделе postgresql. Оба набора методов создания реплик — «standby» и «нормальные» — ссылаются на ключи в разделе postgresql.
Для настройки такого кластера необходимо указать раздел standby_cluster в конфигурации Patroni:
bootstrap:
dcs:
standby_cluster:
host: 1.2.3.4
port: 5432
primary_slot_name: patroni
create_replica_methods:
- basebackup
Обратите внимание: эти опции будут применены только один раз во время бутстрапа кластера, и единственный способ изменить их впоследствии — через DCS.
Patroni ожидает найти postgresql.conf или postgresql.conf.backup в каталоге PGDATA удаленного первичного узла и не запустится, если не найдет его после выполнения basebackup. Если удаленный первичный узел хранит свой postgresql.conf в другом месте, необходимо скопировать его в каталог PGDATA.
Если используются слоты репликации в резервном кластере, также необходимо создать соответствующий слот репликации на первичном кластере. Это не будет сделано автоматически реализацией резервного кластера. Можно использовать функцию постоянных слотов репликации Patroni на первичном кластере для поддержания слота репликации с тем же именем, что и primary_slot_name, или его значением по умолчанию, если primary_slot_name не предоставлен.
В случае, если удаленный сайт не предоставляет единую конечную точку, которая подключается к первичному узлу, можно перечислить все хосты исходного кластера в разделе standby_cluster.host. Когда standby_cluster.host содержит несколько хостов, разделенных запятыми, Patroni будет:
- добавлять
target_session_attrs=read-writeвprimary_conninfoна узле-лидере standby. - использовать
target_session_attrs=read-writeпри попытке определить, нужно ли запускатьpg_rewind, или при выполненииpg_rewindна всех узлах резервного кластера. - Важно отметить: для успешной работы
pg_rewindкластер должен быть инициализирован с контрольными суммами страниц данных (опция--data-checksumsдляinitdb) и/илиwal_log_hintsдолжен быть установлен вon. В противном случаеpg_rewindне будет работать корректно.
Также существует возможность реплицировать резервный кластер с другого резервного кластера или с участника-standby первичного кластера: для этого необходимо определить один хост в разделе standby_cluster.host. Однако следует учитывать, что в этом случае pg_rewind не сможет выполниться в резервном кластере.