Динамические настройки конфигурации
Эта страница переведена при помощи нейросети GigaChat.
Динамическая конфигурация хранится в DCS (распределенном хранилище конфигурации) и применяется на всех узлах кластера.
Чтобы изменить динамическую конфигурацию, можно использовать либо инструмент patronictl edit-config, либо REST API Patroni:
loop_wait
– количество секунд, в течение которых цикл будет спать. Значение по умолчанию: 10, минимальное возможное значение: 1;ttl
– время жизни для получения блокировки лидера (в секундах). Представьте это как продолжительность времени до начала процесса автоматического восстановления после сбоя. Значение по умолчанию: 30, минимальное возможное значение: 20;retry_timeout
– тайм-аут для повторных попыток операций DCS и PostgreSQL (в секундах). Проблемы с DCS или сетью короче этого значения не приведут к понижению уровня лидера Patroni. Значение по умолчанию: 10, минимальное возможное значение: 3.
При изменении значений loop_wait
, retry_timeout
или ttl
необходимо следовать правилу:
loop_wait + 2 * retry_timeout <= ttl
-
maximum_lag_on_failover
– максимальное количество байт, на которое может отставать последователь от лидера для участия в выборах лидера. -
maximum_lag_on_syncnode
– максимальное количество байт, на которое синхронный последователь может отставать перед тем, как он будет считаться нездоровым кандидатом и заменен здоровым асинхронным последователем. Patroni использует максимальную реплику LSN, если имеется более одного последователя, в противном случае она будет использовать текущую LSN Wal-лидера. По умолчанию установлено значение-1
, Patroni не предпримет действий по замене синхронного нездорового последователя при значении равном нулю или ниже. Установите значение достаточно высоким, чтобы Patroni не менял синхронных последователей слишком часто во время высокой нагрузки транзакций. -
max_timelines_history
– максимальное количество элементов истории временных линий, хранящихся в DCS. Значение по умолчанию:0
. Когда установлено значение0
, сохраняется полная история в DCS. -
primary_start_timeout
– количество времени, в течение которого основному серверу разрешается восстанавливаться после сбоев до того, как произойдет отказ (в секундах). По умолчанию300
секунд. При установке значения0
отказ происходит сразу же после обнаружения сбоя, если это возможно. При использовании асинхронной репликации отказ может привести к потере транзакций. Наихудшее время отказа основного сервера составляет:loop_wait
+primary_start_timeout
+loop_wait
, если толькоprimary_start_timeout
не равен нулю, в этом случае это простоloop_wait
. Установите значение в соответствии с компромиссом между устойчивостью и доступностью. -
primary_stop_timeout
– количество секунд, в течение которых Patroni разрешено ожидать при остановке PostgreSQL, и оно эффективно только тогда, когда включен режим синхронности. Если установлено значение> 0
и включен режим синхронности, Patroni отправляет сигналSIGKILL
постмастеру, если операция остановки выполняется дольше, чем значение, установленное параметромprimary_stop_timeout
. Установите значение в соответствии с компромиссом между устойчивостью и доступностью. Если параметр не установлен или установлен<= 0
, тоprimary_stop_timeout
не применяется. -
synchronous_mode
– включает режим синхронной репликации. В этом режиме выбирается синхронная копия, и только последний лидер и синхронная копия могут участвовать в выборах лидера. Синхронный режим гарантирует, что успешно завершенные транзакции не будут потеряны при отказе, за счет потери доступности для записи, когда Patroni не может обеспечить устойчивость транзакций. См. документацию о режимах репликации для получения подробной информации. -
synchronous_mode_strict
– предотвращает отключение синхронной репликации, если нет доступных синхронных копий, блокируя все клиентские записи на основном узле. См. документацию о режимах репликации для получения подробной информации. -
failsafe_mode
– включает Режим отказоустойчивости DCS. По умолчанию установлено значениеfalse
. -
postgresql
–-
use_pg_rewind
– использовать лиpg_rewind
. По умолчанию установлено значениеfalse
. -
use_slots
– использовать ли слоты репликации. По умолчанию установлено значениеtrue
для PostgreSQL 9.4+. -
recovery_conf
– дополнительные параметры конфигурации, записываемые вrecovery.conf
при настройке ведомого сервера. В PostgreSQL 12 больше нет файлаrecovery.conf
, но можно продолжать использовать этот раздел, потому что Patroni обрабатывает его прозрачно. -
parameters
– список параметров настройки для PostgreSQL. -
pg_hba
– список строк, которые Patroni будет использовать для генерацииpg_hba.conf
. Patroni игнорирует этот параметр, если параметрhba_file
PostgreSQL установлен в нестандартное значение:- host all all 0.0.0.0/0 md5
.- host replication replicator 127.0.0.1/32 md5
– строка, подобная этой, необходима для репликации.
-
pg_ident
– список строк, которые Patroni будет использовать для генерацииpg_ident.conf
. Patroni игнорирует этот параметр, еслиident_file
параметр PostgreSQL установлен на значение, отличное от значения по умолчанию:- mapname1 systemname1 pguser1
.- mapname1 systemname2 pguser2
.
-
-
standby_cluster
– если этот раздел определен, то это означает, что необходимо загрузить резервный кластер.host
– адрес удаленного узла.port
– порт удаленного узла.primary_slot_name
– какой слот на удаленном узле следует использовать для репликации. Этот параметр является необязательным, значение по умолчанию выводится из имени экземпляра (см. функциюslot_name_from_member_name
).create_replica_methods
– упорядоченный список методов, которые могут быть использованы для загрузки резервного лидера с удаленного основного сервера, может отличаться от списка, определенного в PostgreSQL.restore_command
– команда для восстановления записей WAL с удаленного основного узла на узлы в кластере-резерве, может отличаться от списка, определенного в PostgreSQL.archive_cleanup_command
– команда очистки для ведущего резервного узла.recovery_min_apply_delay
– сколько времени нужно подождать перед фактическим применением записей WAL на ведущем резервном узле.
-
slots
– определение постоянных слотов репликации. Эти слоты будут сохранены во время переключения/сбоя. Постоянные слоты, которых не существует, будут созданы Patroni. Начиная с PostgreSQL 11 постоянные физические слоты создаются на всех узлах и их положение обновляется каждыеloop_wait
секунды. Для версий PostgreSQL старше 11 постоянные физические слоты репликации поддерживаются только на текущем основном узле. Логические слоты копируются с основного узла на резервный при перезапуске, а затем их позиция обновляется каждыеloop_wait
секунд (при необходимости). Копирование файлов логического слота выполняется через соединениеlibpq
и использование либо функции отката, либо учетных данных суперпользователя (см. разделpostgresql.authentication
). Всегда есть вероятность того, что позиция логического слота на реплике немного отстает от бывшей основной, поэтому приложение должно быть готово к тому, что некоторые сообщения могут быть получены повторно после сбоя. Самый простой способ сделать это - отслеживатьconfirmed_flush_lsn
. Включение постоянных слотов репликации требует, чтобыpostgresql.use_slots
было установлено наtrue
. Если определены постоянные слоты логической репликации, Patroni автоматически включитhot_standby_feedback
. Поскольку отказоустойчивость логических слотов репликации небезопасна в PostgreSQL 9.6 и более ранних версиях, а в версии PostgreSQL 10 отсутствуют некоторые важные функции, эта функция работает только с PostgreSQL 11+.-
my_slot_name
– имя постоянного слота репликации. Если имя постоянного слота совпадает с именем текущего узла, он не будет создан на этом узле. Если добавить постоянный физический слот репликации, имя которого совпадает с именем члена Patroni, Patroni обеспечит, чтобы созданный слот не был удален даже в том случае, если соответствующий член станет недоступным, ситуация, которая обычно приводит к удалению слота Patroni. Хотя это может быть полезно в некоторых ситуациях, например, когда необходимо, чтобы слоты репликации, используемые членами, сохранялись во время временных сбоев или при импорте существующих членов в новый кластер Patroni (см. Преобразование автономного сервера в кластер Patroni для получения подробной информации), оператор должен соблюдать осторожность, чтобы эти совпадения имен не сохранялись в DCS, когда слот больше не требуется из-за его влияния на нормальное функционирование Patroni.type
– тип слота. Может бытьphysical
илиlogical
. Если слот является логическим, также необходимо определитьdatabase
иplugin
.database
– имя базы данных, в которой должны быть созданы логические слоты.plugin
– имя плагина для логического слота.
-
-
ignore_slots
– список наборов свойств слотов репликации, для которых Patroni должен игнорировать совпадающие слоты. Эта конфигурация полезна, когда некоторые слоты репликации управляются вне Patroni. Любое подмножество совпадающих свойств приведет к тому, что слот будет проигнорирован.name
– имя слота репликации.type
– тип слота. Может бытьphysical
илиlogical
. Если слот логический, можно определитьdatabase
и/илиplugin
.database
– имя базы данных (при сопоставлении слотаlogical
).plugin
– плагин логической декодировки (при сопоставлении слотаlogical
).
slots
- это хеш-карта, а ignore_slots
- массив. Например:
slots:
permanent_logical_slot_name:
type: logical
database: my_db
plugin: test_decoding
permanent_physical_slot_name:
type: physical
...
ignore_slots:
- name: ignored_logical_slot_name
type: logical
database: my_db
plugin: test_decoding
- name: ignored_physical_slot_name
type: physical
...
Если топология кластера статична (фиксированное количество узлов, которые никогда не меняют свои имена), можно настроить постоянные физические слоты репликации с именами, соответствующими именам узлов, чтобы избежать переработки файлов WAL при временном отключении реплики:
slots:
node_name1:
type: physical
node_name2:
type: physical
node_name3:
type: physical
...
Постоянные слоты репликации синхронизируются только от primary
/standby_leader
до узлов-реплик. Это означает, что приложения должны использовать их только из ведущего узла. Использование их на узлах-репликах вызовет бесконечный рост pg_wal
на всех остальных узлах в кластере. Исключение составляют постоянные физические слоты, соответствующие именам членов Patroni, если таковые имеются. Они будут синхронизироваться между всеми узлами, поскольку они используются для репликации между ними.