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

Задание 4: Изменение настроек кластера

Сосредоточимся на управлении конфигурацией. Сначала посмотрим, какие настройки (параметры) кластера уже заданы, а затем научимся изменять их.

Как устроена конфигурация Pangolin Manager?

Прежде чем менять настройки, важно понимать, откуда они вообще берутся. Конфигурация Pangolin Manager делится на три уровня, и у каждого свой приоритет:

  1. Динамическая конфигурация — хранится в etcd, едина для всего кластера. Меняется через команду edit-config. Это «базовый» уровень с самым низким приоритетом.
  2. Локальная конфигурация — файл /etc/pangolin-manager/postgres.yml на каждом узле. Если параметр задан здесь, он переопределяет динамическую конфигурацию.
  3. Конфигурация среды — переменные окружения (например, PATRONI_LOG_DESTINATION). У них самый высокий приоритет среди этих трех уровней.

Есть еще один важный нюанс – некоторые параметры динамической конфигурации передаются СУБД Pangolin через аргументы pg_ctl start и имеют наивысший приоритет — даже выше, чем ALTER SYSTEM в самой базе.

Вывод настроек кластера​

У кластера есть динамическая конфигурация, которая хранится в etcd и применяется ко всем узлам. Посмотреть ее можно командой show-config:

[postgres@srv1 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config $CLNAME
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_prepared_transactions: '6'
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

При работе с конфигурацией стоит учитывать несколько важных нюансов:

Параметры первичной организации кластера:

  • ttl
  • loop_wait
  • retry_timeouts
  • maximum_lag_on_failover
  • max_timelines_history
  • synchronous_mode_strict
  • synchronous_mode

Загружаются только один раз при инициализации нового кластера, они прописаны в секции bootstrap в конфигурационном файле /etc/pangolin-manager/postgres.yml, но менять их нужно через edit-config.

Параметры, которые должны быть одинаковыми на мастере и реплике:

  • max_connections
  • max_locks_per_transaction
  • max_worker_processes
  • max_prepared_transactions
  • wal_level
  • wal_log_hints
  • track_commit_timestamp

Их тоже меняем только через edit-config, чтобы мастер и реплика были синхронны.

Параметры с нижними границами:

  • max_wal_senders – не ниже 5;
  • max_replication_slots – не ниже 5;
  • wal_keep_segments – не ниже 8;
  • размер wal_keep_size – не ниже 128 МБ;
  • max_connections – не ниже 110.

Pangolin Manager контролирует эти параметры и не позволит установить их меньше минимальных значений, поэтому они изменяются только в динамической конфигурации (через edit-config).

Также для postgres предоставляется псевдоним pgconfig, выводящий конфигурацию с цветовым выделением:

[postgres@srv1 ~]$ pgconfig
{
"ttl": 135,
"retry_timeout": 60,
"loop_wait": 10,
"maximum_lag_on_failover": 1048576,
"synchronous_mode": true,
"synchronous_mode_strict": false,
"postgresql": {
"parameters": {
"max_connections": "110",
"max_worker_processes": "32",
"max_prepared_transactions": "6",
"wal_level": "replica",
"wal_log_hints": true,
"track_commit_timestamp": false,
"wal_keep_size": "8GB",
"max_wal_senders": "10",
"max_replication_slots": "10",
"logical_decoding_work_mem": "64MB",
"auth_activity_period": "60",
"authentication_max_workers": "16"
},
"use_pg_rewind": true,
"use_slots": true
}
}

Изменение настроек кластера​

Для динамического изменения настроек всего кластера предназначена команда edit-config. В качестве примера увеличим разрешенное количество подключений:

[postgres@srv1 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config $CLNAME --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_prepared_transactions: '6'
max_replication_slots: '10'
max_wal_senders: '10'

Configuration changed

Вывод команды показывает, что было изменено в настройках конфигурации (в стиле diff -u).

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

[postgres@srv1 ~]$ psql
psql (15.15)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=# \dconfig+ max_connections
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------------+-------+---------+------------+-------------------
max_connections | 110 | integer | postmaster |
(1 row)
postgres=# \q

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

Для рестарта экземпляров, воспользуемся командой restart:

[postgres@srv1 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart $CLNAME
+ Cluster: Pobeda (7683495148262105741) ------------+-----------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+---------------+--------------------+--------------+-----------+----+-----------+
| <IP-Address1> | <IP-Address1>:5433 | Sync Standby | streaming | 5 | 0 |
| <IP-Address2> | <IP-Address2>:5433 | Leader | running | 5 | |
+---------------+--------------------+--------------+-----------+----+-----------+
When should the restart take place (e.g. 2026-09-09T13:07) [now]:
Are you sure you want to restart members <IP-Address2>, <IP-Address1>? [y/N]: y
Restart if the PostgreSQL version is less than provided (e.g. 9.5.2) []:
Success: restart on member <IP-Address2>
Success: restart on member <IP-Address1>

Проверим теперь:

[postgres@srv1 ~]$ psql
psql (15.15)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=# \dconfig+ max_connections
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------------+-------+---------+------------+-------------------
max_connections | 111 | integer | postmaster |
(1 row)
postgres=# \q

Перезагрузка и рестарт​

Когда мы меняем настройки кластера, важно понимать как именно применить изменения. Здесь есть два похожих, но разных по смыслу действия:

  • Команда restart — полностью останавливает и снова запускает экземпляр СУБД Pangolin, и, в случае успеха, он возвращается в кластер. Подходит для параметров с контекстом postmaster.

    В сеансе postgres за это отвечает псевдоним restart:

    [postgres@srv1 ~]$ restart
    + Cluster: Pobeda (7683495148262105741) ------------+-----------+----+-----------+
    | Member | Host | Role | State | TL | Lag in MB |
    +---------------+--------------------+--------------+-----------+----+-----------+
    | <IP-Address1> | <IP-Address1>:5433 | Sync Standby | streaming | 5 | 0 |
    | <IP-Address2> | <IP-Address2>:5433 | Leader | running | 5 | |
    +---------------+--------------------+--------------+-----------+----+-----------+
    When should the restart take place (e.g. 2026-09-09T13:07) [now]:
    Are you sure you want to restart members <IP-Address2>, <IP-Address1>? [y/N]: y
    Restart if the PostgreSQL version is less than provided (e.g. 9.5.2) []:
    Success: restart on member <IP-Address2>
    Success: restart on member <IP-Address1>

    Команда запрашивает подтверждение и спрашивает, когда выполнить рестарт. Можно согласиться на [now] (сейчас) или запланировать на конкретное время – удобно для работ в окно обслуживания.

  • Команда reload не перезагружает экземпляр, а лишь перечитывает конфигурацию. Подходит для параметров с контекстом sighup.

    Псевдоним для reload тоже есть:

    [postgres@srv1 ~]$ alias reload
    alias reload='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload $CLNAME'
[postgres@srv1 ~]$ exit

Подведем итоги​

Вопрос 1

Вопрос 1: Какая команда используется для просмотра текущей динамической конфигурации кластера?

Вопрос 2

Вопрос 2: Какие из перечисленных параметров являются параметрами первичной организации кластера и загружаются только один раз при его инициализации?