Перейти к основному содержимому

Динамическая конфигурация

Динамическая конфигурация хранится в распределенном хранилище конфигурации и применяется на всех узлах кластера. Изменения вступают в силу асинхронно (при следующем цикле пробуждения) для каждого узла, либо после принудительного перечитывания конфигурации (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:

  • ttl
  • loop_wait
  • retry_timeout
  • maximum_lag_on_failover
  • max_timelines_history
  • synchronous_mode
  • synchronous_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 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):

  1. Измените параметр через 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).

  2. Проверьте, применилось ли значение параметра:

    postgres=# \dconfig+ max_connections
                      List of configuration parameters
    Parameter | Value | Type | Context | Access privileges
    -----------------+-------+---------+------------+-------------------
    max_connections | 110 | integer | postmaster |
    (1 row)

    Значение не изменилось, так как контекст postmaster требует перезапуска экземпляра.

  3. Выполните рестарт экземпляра. Воспользуйтесь командой restart:

    [postgres@srv1 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart
  4. Перепроверьте значение параметра:

    postgres=# \dconfig+ max_connections
                      List of configuration parameters
    Parameter | Value | Type | Context | Access privileges
    -----------------+-------+---------+------------+-------------------
    max_connections | 111 | integer | postmaster |
    (1 row)

    Изменение прошло успешно.

Справочник конфигурационных параметров

Параметр

Тип данных

Описание

loop_wait

integer

Количество секунд, в течение которых цикл будет спать. Значение по умолчанию: 10, минимальное возможное значение: 1

ttl

integer

Время жизни для получения блокировки лидера (в секундах). Продолжительность времени до начала процесса автоматического восстановления после последнего обновления ключа лидера. Значение по умолчанию: 30, минимальное возможное значение: 20

retry_timeout

integer

Тайм-аут для повторных попыток операций DCS и СУБД (в секундах). Проблемы с DCS или сетью короче этого значения не приведут к понижению уровня лидера. Значение по умолчанию: 10, минимальное возможное значение: 3

maximum_lag_on_failover

integer

Максимальное количество байт, на которое может отставать реплика от лидера для участия в выборах лидера

maximum_lag_on_syncnode

integer

Максимальное количество байт, на которое синхронная реплика может отставать перед тем, как она будет считаться «нездоровым» кандидатом и заменена здоровой асинхронной репликой. По умолчанию -1. При значении 0 или ниже Pangolin Manager не предпримет действий по замене синхронной нездоровой реплики. Минимальное значение: -1

member_slots_ttl

integer

Время жизни слотов участников. Минимальное значение: 0 (в секундах)

max_timelines_history

integer

Максимальное количество элементов истории временных линий, хранящихся в DCS. Значение по умолчанию: 0 (сохраняется полная история)

primary_start_timeout

integer

Количество времени, в течение которого основному серверу разрешается восстанавливаться после сбоев до того, как произойдет отказ (в секундах). По умолчанию 300 секунд. При значении 0 отказ происходит сразу. Минимальное значение: 0

primary_stop_timeout

integer

Количество секунд, в течение которых Pangolin Manager разрешено ожидать при остановке СУБД. Применяется только при включенном режиме синхронности. Если не установлен или <= 0, не применяется. Минимальное значение: 0

synchronous_mode

boolean

Включает режим синхронной репликации. В этом режиме выбирается синхронная копия, и только последний лидер и синхронная копия могут участвовать в выборах лидера

synchronous_mode_strict

boolean

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

synchronous_node_count

integer

Количество синхронных узлов. Минимальное значение: 1

failsafe_mode

boolean

Включает режим отказоустойчивости хранилища конфигураций. По умолчанию false

postgresql:use_pg_rewind

boolean

Использовать pg_rewind. По умолчанию false

postgresql:use_slots

boolean

Использовать слоты репликации. По умолчанию true

postgresql:recovery_conf

object

Дополнительные параметры конфигурации, записываемые в recovery.conf при настройке ведомого сервера

postgresql:parameters

object

Список параметров настройки для СУБД

postgresql:parameters:max_connections

integer

Максимальное количество соединений. Допустимый диапазон: 1–262143

postgresql:parameters:max_locks_per_transaction

integer

Максимальное количество блокировок на транзакцию. Допустимый диапазон: 10–2147483647

postgresql:parameters:max_prepared_transactions

integer

Максимальное количество подготовленных транзакций. Допустимый диапазон: 0–262143

postgresql:parameters:max_replication_slots

integer

Максимальное количество слотов репликации. Допустимый диапазон: 0–262143

postgresql:parameters:max_wal_senders

integer

Максимальное количество отправителей WAL. Допустимый диапазон: 0–262143

postgresql:parameters:max_worker_processes

integer

Максимальное количество рабочих процессов. Допустимый диапазон: 0–262143

postgresql:pg_hba

array

Список строк, которые будут использованы для генерации pg_hba.conf. Игнорируется, если параметр hba_file СУБД установлен в нестандартное значение

postgresql:pg_ident

array

Список строк, которые будут использованы для генерации pg_ident.conf. Игнорируется, если параметр ident_file СУБД установлен в нестандартное значение

postgresql:pg_ctl_timeout

integer

Тайм-аут ожидания выполнения pg_ctl. Минимальное значение: 0

standby_cluster:host

string

Адрес удаленного узла

standby_cluster:port

integer

Порт удаленного узла. Максимальное значение: 65535

standby_cluster:primary_slot_name

string

Слот на удаленном узле для репликации. Необязательный параметр

standby_cluster:create_replica_methods

array

Упорядоченный список методов для загрузки резервного лидера с удаленного основного сервера

standby_cluster:restore_command

string

Команда для восстановления записей WAL с удаленного основного узла

standby_cluster:archive_cleanup_command

string

Команда очистки для ведущего резервного узла

standby_cluster:recovery_min_apply_delay

string

Время ожидания перед применением записей WAL на ведущем резервном узле

slots:

object

Определение постоянных слотов репликации. Слоты сохраняются во время переключения/сбоя. Поддерживаются типы physical и logical

ignore_slots:

array

Список свойств слотов репликации, которые Pangolin Manager должен игнорировать. Полезно для слотов, управляемых вне Pangolin Manager

Примечание

При изменении значенийloop_wait, retry_timeout или ttl необходимо учитывать взаимосвязь между этими параметрами.

Значения параметров рассчитываются автоматически на основе следующих факторов:

  1. retry_timeout (тайм-аут повторной попытки) зависит от:

    • времени отклика DCS (например, тайм-аута etcd);
    • количества узлов в кластере DCS.
  2. ttl (время жизни ключа лидера) рассчитывается как:

    • удвоенное значение retry_timeout, умноженное на количество хостов DCS;
    • плюс значение loop_wait;
    • плюс запас в 5 секунд.
  3. 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 на всех остальных узлах в кластере.