Динамическая конфигурация
Динамическая конфигурация хранится в распределенном хранилище конфигурации и применяется на всех узлах кластера. Изменения вступают в силу асинхронно (при следующем цикле пробуждения) для каждого узла, либо после принудительного перечитывания конфигурации (reload).
Если узел требует перезапуска для применения конфигурации (для параметров СУБД с контекстом postmaster), устанавливается флаг pending_restart. Статус узла отображает "restart_pending": true.
Пример отображения необходимости перезагрузки
Пример вывода информации о кластере с расширенными столбцами:
$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list $CLUSTERNAME --extended
Пример вывода:
+ Cluster: $CLUSTERNAME (<cluster_id>) ----------+----+-------------+-----+------------+-----+-----------------+------------------------+-------------------+------+
| Member | Host | Role | State | TL | Receive LSN | Lag | Replay LSN | Lag | Pending restart | Pending restart reason | Scheduled restart | Tags |
+---------+----------------+---------+-----------+----+-------------+-----+------------+-----+-----------------+------------------------+-------------------+------+
| srv1 | 127.0.0.1:5432 | Leader | running | 5 | | | | | | | | |
| srv2 | 127.0.0.1:5433 | Replica | streaming | 5 | 0/40004E8 | 0 | 0/40004E8 | 0 | * | | | |
| srv3 | 127.0.0.1:5434 | Replica | streaming | 5 | 0/40004E8 | 0 | 0/40004E8 | 0 | | | | |
+---------+----------------+---------+-----------+----+-------------+-----+------------+-----+-----------------+------------------------+-------------------+------+
Секция bootstrap
Секция bootstrap в конфигурационном файле /etc/pangolin-manager/postgres.yml используется только один раз — при первой инициализации нового кластера.
Параметры первичной организации кластера, которые загружаются только один раз при инициализации из секции bootstrap:
ttlloop_waitretry_timeoutmaximum_lag_on_failovermax_timelines_historysynchronous_modesynchronous_mode_strict
Загружаются только один раз при инициализации нового кластера, они прописаны в секции bootstrap в конфигурационном файле /etc/pangolin-manager/postgres.yml.
После того как Pangolin Manager впервые инициализировал кластер и настройки были сохранены в хранилище конфигурации, все будущие изменения в разделеbootstrap файла конфигурации будут игнорироваться. Редактирование параметров динамической конфигурации уже работающего кластера возможно только через edit-config или REST API.
Секция bootstrap содержит:
-
dcs— начальная динамическая конфигурация, которая будет записана в указанное хранилище конфигураций при создании кластера. Можно поместить любой из параметров, описанных в разделе «Справочник конфигурационных параметров». -
initdb— (необязательный) опции для утилитыinitdbпри первичной инициализации.- data-checksums– должна быть включена при необходимости использованияpg_rewind.- encoding: UTF8– кодировка по умолчанию для новых баз данных.- locale: UTF8– локаль по умолчанию для новых баз данных.
-
method— метод инициализации (по умолчаниюinitdb). -
post_bootstrap/post_init— скрипт, выполняемый после инициализации кластера.
Распределенное хранилище конфигурации
Существует два поддерживаемых решения в СУБД Pangolin в качестве распределенного хранилища:
- сторонний компонент etcd,
- встроенный в Pangolin Manager компонент Pangolin DCS.
Настройка стороннего компонента etcd происходит в секции etcd.
Если необходимо, чтобы Pangolin Manager работал с кластером etcd через протокол версии 3, необходимо использовать раздел конфигурацииetcd3.
Настройка Pangolin DCS осуществляется параметрами в секции pangolin_dcs в конфигурационном файле Pangolin Manager /etc/pangolin-manager/postgres.yml.
Схема работы компонента Pangolin DCS:

Подробнее о компоненте в соответствующем разделе данного документа.
Изменение динамической конфигурации
Изменить динамическую конфигурацию можно с помощью утилиты pangolin-manager-ctl edit-config или REST API.
Примеры
Вывод настроек кластера
Посмотреть динамическую конфигурацию, которая хранится в DCS и применяется ко всем узлам, можно командой show-config:
$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config
Пример вывода:
loop_wait: 10
maximum_lag_on_failover: 1048576
postgresql:
parameters:
auth_activity_period: '60'
authentication_max_workers: '16'
logical_decoding_work_mem: 64MB
max_connections: '110'
max_locks_per_transaction: '64'
max_prepared_transactions: '3'
max_replication_slots: '10'
max_wal_senders: '10'
max_worker_processes: '32'
track_commit_timestamp: false
wal_keep_size: 8GB
wal_level: replica
wal_log_hints: true
use_pg_rewind: true
use_slots: true
retry_timeout: 60
synchronous_mode: true
synchronous_mode_strict: false
ttl: 135
Изменение настроек кластера
Для динамического изменения настроек всего кластера предназначена команда edit-config.
Пример увеличения разрешенного количества подключений (параметр max_connections):
-
Измените параметр через
pangolin-manager-ctl edit-config:[postgres@srv1 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --pg max_connections="111" --force---
+++
@@ -5,7 +5,7 @@
auth_activity_period: '60'
authentication_max_workers: '16'
logical_decoding_work_mem: 64MB
- max_connections: '110'
+ max_connections: 111
max_locks_per_transaction: '64'
max_prepared_transactions: '3'
max_replication_slots: '10'
Configuration changedВывод команды показывает, что было изменено в настройках конфигурации (в стиле
diff -u). -
Проверьте, применилось ли значение параметра:
postgres=# \dconfig+ max_connectionsList of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------------+-------+---------+------------+-------------------
max_connections | 110 | integer | postmaster |
(1 row)Значение не изменилось, так как контекст
postmasterтребует перезапуска экземпляра. -
Выполните рестарт экземпляра. Воспользуйтесь командой
restart:[postgres@srv1 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart -
Перепроверьте значение параметра:
postgres=# \dconfig+ max_connectionsList of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------------+-------+---------+------------+-------------------
max_connections | 111 | integer | postmaster |
(1 row)Изменение прошло успешно.
Справочник конфигурационных параметров
Параметр | Тип данных | Описание |
|---|---|---|
|
| Количество секунд, в течение которых цикл будет спать. Значение по умолчанию: |
|
| Время жизни для получения блокировки лидера (в секундах). Продолжительность времени до начала процесса автоматического восстановления после последнего обновления ключа лидера. Значение по умолчанию: |
|
| Тайм-аут для повторных попыток операций DCS и СУБД (в секундах). Проблемы с DCS или сетью короче этого значения не приведут к понижению уровня лидера. Значение по умолчанию: |
|
| Максимальное количество байт, на которое может отставать реплика от лидера для участия в выборах лидера |
|
| Максимальное количество байт, на которое синхронная реплика может отставать перед тем, как она будет считаться «нездоровым» кандидатом и заменена здоровой асинхронной репликой. По умолчанию |
|
| Время жизни слотов участников. Минимальное значение: |
|
| Максимальное количество элементов истории временных линий, хранящихся в DCS. Значение по умолчанию: |
|
| Количество времени, в течение которого основному серверу разрешается восстанавливаться после сбоев до того, как произойдет отказ (в секундах). По умолчанию |
|
| Количество секунд, в течение которых Pangolin Manager разрешено ожидать при остановке СУБД. Применяется только при включенном режиме синхронности. Если не установлен или |
|
| Включает режим синхронной репликации. В этом режиме выбирается синхронная копия, и только последний лидер и синхронная копия могут участвовать в выборах лидера |
|
| Предотвращает отключение синхронной репликации, если нет доступных синхронных копий, блокируя все клиентские записи на основном узле |
|
| Количество синхронных узлов. Минимальное значение: |
|
| Включает режим отказоустойчивости хранилища конфигураций. По умолчанию |
|
| Использовать |
|
| Использовать слоты репликации. По умолчанию |
|
| Дополнительные параметры конфигурации, записываемые в |
|
| Список параметров настройки для СУБД |
|
| Максимальное количество соединений. Допустимый диапазон: |
|
| Максимальное количество блокировок на транзакцию. Допустимый диапазон: |
|
| Максимальное количество подготовленных транзакций. Допустимый диапазон: |
|
| Максимальное количество слотов репликации. Допустимый диапазон: |
|
| Максимальное количество отправителей WAL. Допустимый диапазон: |
|
| Максимальное количество рабочих процессов. Допустимый диапазон: |
|
| Список строк, которые будут использованы для генерации |
|
| Список строк, которые будут использованы для генерации |
|
| Тайм-аут ожидания выполнения |
|
| Адрес удаленного узла |
|
| Порт удаленного узла. Максимальное значение: |
|
| Слот на удаленном узле для репликации. Необязательный параметр |
|
| Упорядоченный список методов для загрузки резервного лидера с удаленного основного сервера |
|
| Команда для восстановления записей WAL с удаленного основного узла |
|
| Команда очистки для ведущего резервного узла |
|
| Время ожидания перед применением записей WAL на ведущем резервном узле |
|
| Определение постоянных слотов репликации. Слоты сохраняются во время переключения/сбоя. Поддерживаются типы |
|
| Список свойств слотов репликации, которые Pangolin Manager должен игнорировать. Полезно для слотов, управляемых вне Pangolin Manager |
При изменении значенийloop_wait, retry_timeout или ttl необходимо учитывать взаимосвязь между этими параметрами.
Значения параметров рассчитываются автоматически на основе следующих факторов:
-
retry_timeout(тайм-аут повторной попытки) зависит от:- времени отклика DCS (например, тайм-аута etcd);
- количества узлов в кластере DCS.
-
ttl(время жизни ключа лидера) рассчитывается как:- удвоенное значение
retry_timeout, умноженное на количество хостов DCS; - плюс значение
loop_wait; - плюс запас в 5 секунд.
- удвоенное значение
-
loop_wait(время ожидания цикла) задается независимо.
Таким образом, при увеличении количества узлов DCS или времени их отклика автоматически увеличиваются retry_timeout и ttl, чтобы обеспечить стабильную работу кластера при временных проблемах с сетью или DCS.
Минимальные значения параметров:
loop_wait: 1 секундаretry_timeout: 3 секундыttl: 20 секунд
Параметры slots и ignore_slots
Параметр slots — это хеш-карта (словарь), определяющая постоянные слоты репликации. Эти слоты сохраняются во время переключения и сбоя. Постоянные слоты, которых не существует, будут созданы автоматически.
Параметр ignore_slots — это массив списков слотов репликации, которые Pangolin Manager должен игнорировать. Эта конфигурация полезна, когда некоторые слоты репликации управляются вне Pangolin Manager.
Пример конфигурации:
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
Постоянные слоты репликации синхронизируются только отprimary/standby_leader до узлов-реплик. Использование их на узлах-репликах вызовет бесконечный рост pg_wal на всех остальных узлах в кластере.