Задание 4: Изменение настроек кластера
Сосредоточимся на управлении конфигурацией. Сначала посмотрим, какие настройки (параметры) кластера уже заданы, а затем научимся изменять их.
Как устроена конфигурация Pangolin Manager?
Прежде чем менять настройки, важно понимать, откуда они вообще берутся. Конфигурация Pangolin Manager делится на три уровня, и у каждого свой приоритет:
- Динамическая конфигурация — хранится в
etcd, едина для всего кластера. Меняется через командуedit-config. Это «базовый» уровень с самым низким приоритетом. - Локальная конфигурация — файл
/etc/pangolin-manager/postgres.ymlна каждом узле. Если параметр задан здесь, он переопределяет динамическую конфигурацию. - Конфигурация среды — переменные окружения (например,
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
При работе с конфигурацией стоит учитывать несколько важных нюансов:
Параметры первичной организации кластера:
ttlloop_waitretry_timeoutsmaximum_lag_on_failovermax_timelines_historysynchronous_mode_strictsynchronous_mode
Загружаются только один раз при инициализации нового кластера, они прописаны в секции bootstrap в конфигурационном файле /etc/pangolin-manager/postgres.yml, но менять их нужно через edit-config.
Параметры, которые должны быть одинаковыми на мастере и реплике:
max_connectionsmax_locks_per_transactionmax_worker_processesmax_prepared_transactionswal_levelwal_log_hintstrack_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]: yRestart 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 reloadalias reload='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload $CLNAME'
[postgres@srv1 ~]$ exit