Задание 2: Включение контроля целостности передачи WAL на реплику
В этом задании мы выполним подготовительные действия, а затем последовательно изучим и включим режим проверки контрольных сумм, режим декодирования и гибридный режим.
Подготовительные действия
Получим топологию кластера:
[student@srv1 ~]$ sudo su - postgres
===============================================================
You are connected to Pangolin Cluster (Pobeda)
- Hostname : srv1
- IP Address : <IP-Address1>
---------------------------------------------------------------
- node ( master ) : <IP-Address1>
- node ( replica ) : <IP-Address2>
- arbiter : <IP-Address3>
- Manager version : 2.1.13
- Pangolin version : 6.7.0
===============================================================
[postgres@srv1 ~]$ list
+ Cluster: Pobeda (7576294836334315678) +---------+-----------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+---------------+-----------------------+---------+-----------+----+-----------+
| <IP-Address1> | <IP-Address1>:5433 | Leader | running | 10 | |
| <IP-Address2> | <IP-Address2>:5433 | Replica | streaming | 10 | 0 |
+---------------+-----------------------+---------+-----------+----+-----------+
[postgres@srv1 ~]$ exit
В примере видно, что srv1 - мастер, srv2 - реплика.
Проверим статус службы pangolin-manager.service на мастере:
[student@srv1 ~]$ sudo systemctl status pangolin-manager.service
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Fri 2026-09-18 16:36:04 MSK; 2 days ago
Process: 651 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 653 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 656 (pangolin-manage)
Tasks: 21 (limit: 4667)
Memory: 262.7M
CPU: 7min 34.236s
CGroup: /system.slice/pangolin-manager.service
├─656 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─770 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 -->
├─773 "postgres: Pobeda: logger "
├─774 "postgres: Pobeda: checkpointer "
├─775 "postgres: Pobeda: background writer "
├─777 "postgres: Pobeda: idle sessions terminator "
├─778 "postgres: Pobeda: authproc "
├─779 "postgres: Pobeda: password policy cache "
├─782 "postgres: Pobeda: integrity check launcher "
├─783 "postgres: Pobeda: license checker "
├─787 "postgres: Pobeda: patroni postgres 127.0.0.1(34866) idle"
├─802 "postgres: Pobeda: walwriter "
├─803 "postgres: Pobeda: autovacuum launcher "
├─804 "postgres: Pobeda: pg_cron launcher "
├─805 "postgres: Pobeda: logical replication launcher "
└─841 "postgres: Pobeda: walsender patroni <IP-Address2>(34786) streaming 0/14000000"
На реплике:
[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager.service
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Fri 2026-09-18 16:36:15 MSK; 2 days ago
Process: 643 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 647 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 649 (pangolin-manage)
Tasks: 18 (limit: 4667)
Memory: 281.0M
CPU: 21min 24.661s
CGroup: /system.slice/pangolin-manager.service
├─649 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─771 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=Pobeda --wal_level=replica --hot_standby=on --max_connections=111 --max_wal_senders=10 --max_prepared_transactions=3 --max_locks_per_transaction=64 --track_commit_timestamp=False --max_replication_slots=10 --max_worker_processes=32 --wal_log_hints=True --authentication_max_workers=16
├─774 "postgres: Pobeda: logger "
├─775 "postgres: Pobeda: checkpointer "
├─776 "postgres: Pobeda: background writer "
├─777 "postgres: Pobeda: startup recovering 0000000E0000000000000013"
├─778 "postgres: Pobeda: idle sessions terminator "
├─779 "postgres: Pobeda: authproc "
├─780 "postgres: Pobeda: password policy cache "
├─782 "postgres: Pobeda: integrity check launcher "
├─783 "postgres: Pobeda: license checker "
├─790 "postgres: Pobeda: patroni postgres 127.0.0.1(40988) idle"
└─804 "postgres: Pobeda: walreceiver streaming 0/14000000"
На мастере и реплике создадим каталог для хранения копий WAL и файлов с контрольными суммами:
[student@srv1 ~]$ for comp in srv{1,2}; do ssh ${comp} sudo -u postgres mkdir /pgdata/06/wal_backup; done
Проверим:
[student@srv1 ~]$ for comp in srv{1,2}; do ssh ${comp} sudo -u postgres ls -ld /pgdata/06/wal_backup; done
drwxr-xr-x 2 postgres postgres 4096 фев 14 21:26 /pgdata/06/wal_backup
drwxr-xr-x 2 postgres postgres 4096 фев 14 21:26 /pgdata/06/wal_backup
Сохраним копии конфигурационных файлов перед их редактированием:
[student@srv1 ~]$ sudo -u postgres cp -v /etc/pangolin-manager/postgres.yml{,.bak}
'/etc/pangolin-manager/postgres.yml' -> '/etc/pangolin-manager/postgres.yml.bak'
[student@srv1 ~]$ ssh srv2 sudo -u postgres cp -v /etc/pangolin-manager/postgres.yml{,.bak}
'/etc/pangolin-manager/postgres.yml' -> '/etc/pangolin-manager/postgres.yml.bak'
Используя любой текстовый редактор, вставьте настройку параметра wal_sender_backup_directory, указывающую на его местоположение. Например, можно вставить эту настройку перед строкой ssl: on. В примере ее позиция определена с помощью grep -n:
[student@srv1 ~]$ sudo -u postgres grep -n 'ssl: on' /etc/pangolin-manager/postgres.yml
226: ssl: on
Это 226-я строка в данном случае.
Итак, отредактируем на мастере и реплике конфигурационный файл, вставив туда настройку wal_sender_backup_directory: /pgdata/06/wal_backup.
Проверим, что получилось на мастере:
[student@srv1 ~]$ sudo -u postgres grep -B1 -n 'ssl: on' /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227: ssl: on
И на реплике:
[student@srv1 ~]$ ssh srv2
Last login: Sat Feb 14 21:40:20 2026 from <IP-Address1>
===============================================================
You are connected to Pangolin Cluster (Pobeda)
- Hostname : srv2
- IP Address : <IP-Address2>
---------------------------------------------------------------
- node ( master ) : <IP-Address1>
- node ( replica ) : <IP-Address2>
- arbiter : <IP-Address3>
- Manager version : 2.1.13
- Pangolin version : 6.7.0
===============================================================
[student@srv2 ~]$ sudo -u postgres grep -B1 -n 'ssl: on' /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227: ssl: on
Не выходя из сеанса на реплике, остановим pangolin-manager:
[student@srv2 ~]$ sudo systemctl stop pangolin-manager
[student@srv2 ~]$ sudo systemctl status pangolin-manager
○ pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: inactive (dead) since Fri 2026-09-18 21:42:13 MSK; 4s ago
Duration: 2d 5h 5min 57.063s
Process: 643 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 647 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 649 ExecStart=/opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml (code=exited, s>
Main PID: 649 (code=exited, status=0/SUCCESS)
CPU: 21min 37.793s
Выйдем из сессии на реплике и на мастере рестартуем этот же сервис:
[student@srv1 ~]$ sudo systemctl restart pangolin-manager
[student@srv1 ~]$ sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Fri 2026-09-18 21:43:33 MSK; 5s ago
Process: 49586 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 49588 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 49589 (pangolin-manage)
Tasks: 20 (limit: 4667)
Memory: 183.3M
CPU: 882ms
CGroup: /system.slice/pangolin-manager.service
├─49589 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─49603 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 >
├─49606 "postgres: Pobeda: logger "
├─49607 "postgres: Pobeda: checkpointer "
├─49608 "postgres: Pobeda: background writer "
├─49610 "postgres: Pobeda: idle sessions terminator "
├─49611 "postgres: Pobeda: authproc "
├─49612 "postgres: Pobeda: password policy cache "
├─49615 "postgres: Pobeda: integrity check launcher "
├─49616 "postgres: Pobeda: license checker "
├─49619 "postgres: Pobeda: patroni postgres 127.0.0.1(57198) idle"
├─49630 "postgres: Pobeda: walwriter "
├─49631 "postgres: Pobeda: autovacuum launcher "
├─49632 "postgres: Pobeda: pg_cron launcher "
└─49633 "postgres: Pobeda: logical replication launcher "
Запустим сервис на реплике:
[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager
[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Fri 2026-09-18 21:44:26 MSK; 5s ago
Process: 81316 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 81317 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 81318 (pangolin-manage)
Tasks: 18 (limit: 4667)
Memory: 183.4M
CPU: 892ms
CGroup: /system.slice/pangolin-manager.service
├─81318 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─81333 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=Pobeda --wal_level=replica --hot_standby=on --max_connections=111 --max_wal_senders=10 --max_prepared_transactions=3 --max_locks_per_transaction=64 --track_commit_timestamp=False --max_replication_slots=10 --max_worker_processes=32 --wal_log_hints=True --authentication_max_workers=16
├─81336 "postgres: Pobeda: logger "
├─81337 "postgres: Pobeda: checkpointer "
├─81338 "postgres: Pobeda: background writer "
├─81339 "postgres: Pobeda: startup recovering 0000000F0000000000000014"
├─81340 "postgres: Pobeda: idle sessions terminator "
├─81341 "postgres: Pobeda: authproc "
├─81342 "postgres: Pobeda: password policy cache "
├─81344 "postgres: Pobeda: integrity check launcher "
├─81345 "postgres: Pobeda: license checker "
├─81348 "postgres: Pobeda: walreceiver streaming 0/14000218"
└─81351 "postgres: Pobeda: patroni postgres 127.0.0.1(57032) idle"
Подключимся к СУБД и проверим, установлен ли параметр wal_sender_backup_directory:
[student@srv1 ~]$ sudo -iu postgres psql -c 'SHOW wal_sender_backup_directory'
===============================================================
You are connected to Pangolin Cluster (Pobeda)
- Hostname : srv1
- IP Address : <IP-Address1>
---------------------------------------------------------------
- node ( master ) : <IP-Address1>
- node ( replica ) : <IP-Address2>
- arbiter : <IP-Address3>
- Manager version : 2.1.13
- Pangolin version : 6.7.0
===============================================================
wal_sender_backup_directory
-----------------------------
/pgdata/06/wal_backup
(1 row)
Поскольку пока никакой режим проверки целостности WAL не включен, то каталог для сохранения резервных копий сегментов WAL пока пуст:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backup
итого 0
Включение режима проверки контрольных сумм
Для включения режима проверки контрольных сумм необходимо:
- Установить значение параметра
wal_sender_check_crc: on. - Указать режим проверки контрольных сумм
wal_sender_check_type: block.
Как и для настройки пути к каталогу сохранения резервных копий WAL, сначала включим эти параметры в конфигурационные файлы на мастере и реплике.
Используем текстовый редактор и внесем изменения в конфигурацию мастера и реплики. Пример конфигурационного файла на мастере:
[student@srv1 ~]$ sudo -u postgres grep -B3 -n 'ssl: on' /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227- wal_sender_check_crc: on
228- wal_sender_check_type: block
229: ssl: on
И на реплике:
[student@srv1 ~]$ ssh srv2
Last login: Sat Feb 14 21:56:50 2026 from <IP-Address1>
===============================================================
You are connected to Pangolin Cluster (Pobeda)
- Hostname : srv2
- IP Address : <IP-Address2>
---------------------------------------------------------------
- node ( master ) : <IP-Address1>
- node ( replica ) : <IP-Address2>
- arbiter : <IP-Address3>
- Manager version : 2.1.13
- Pangolin version : 6.7.0
===============================================================
[student@srv2 ~]$ sudo -u postgres grep -B3 -n 'ssl: on' /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227- wal_sender_check_crc: on
228- wal_sender_check_type: block
229: ssl: on
Останавливаем pangolin-manager и возвращаемся на мастер:
[student@srv2 ~]$ sudo systemctl stop pangolin-manager
[student@srv2 ~]$ exit
выход
Connection to srv2 closed.
Рестартуем pangolin-manager на мастере:
[student@srv1 ~]$ sudo systemctl restart pangolin-manager
[student@srv1 ~]$ sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Fri 2026-09-18 22:00:58 MSK; 6s ago
Process: 50121 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 50122 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 50123 (pangolin-manage)
Tasks: 21 (limit: 4667)
Memory: 200.3M
CPU: 5.045s
CGroup: /system.slice/pangolin-manager.service
├─50123 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─50137 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 >
├─50140 "postgres: Pobeda: logger "
├─50141 "postgres: Pobeda: checkpointer "
├─50142 "postgres: Pobeda: wal backup writer "
├─50143 "postgres: Pobeda: background writer "
├─50145 "postgres: Pobeda: idle sessions terminator "
├─50146 "postgres: Pobeda: authproc "
├─50147 "postgres: Pobeda: password policy cache "
├─50148 "postgres: Pobeda: integrity check launcher "
├─50149 "postgres: Pobeda: license checker "
├─50154 "postgres: Pobeda: patroni postgres 127.0.0.1(38538) idle"
├─50177 "postgres: Pobeda: walwriter "
├─50178 "postgres: Pobeda: autovacuum launcher "
├─50179 "postgres: Pobeda: pg_cron launcher "
└─50180 "postgres: Pobeda: logical replication launcher "
Запускаем на реплике:
[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager
[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Fri 2026-09-18 22:01:41 MSK; 5s ago
Process: 81976 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 81977 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 81978 (pangolin-manage)
Tasks: 19 (limit: 4667)
Memory: 184.1M
CPU: 5.037s
CGroup: /system.slice/pangolin-manager.service
├─81978 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─81993 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=Pobeda --wal_level=replica --hot_standby=on --max_connections=111 --max_wal_senders=10 --max_prepared_transactions=3 --max_locks_per_transaction=64 --track_commit_timestamp=False --max_replication_slots=10 --max_worker_processes=32 --wal_log_hints=True --authentication_max_workers=16
├─81996 "postgres: Pobeda: logger "
├─81997 "postgres: Pobeda: checkpointer "
├─81998 "postgres: Pobeda: wal backup writer "
├─81999 "postgres: Pobeda: background writer "
├─82000 "postgres: Pobeda: startup recovering 000000100000000000000015"
├─82001 "postgres: Pobeda: idle sessions terminator "
├─82003 "postgres: Pobeda: integrity check launcher "
├─82004 "postgres: Pobeda: license checker "
├─82005 "postgres: Pobeda: authproc "
├─82006 "postgres: Pobeda: password policy cache "
├─82007 "postgres: Pobeda: walreceiver streaming 0/15000218"
└─82012 "postgres: Pobeda: patroni postgres 127.0.0.1(36124) idle"
Проверим настройку параметров:
[student@srv1 ~]$ sudo -iu postgres psql -c '\dconfig wal_sender_*'
List of configuration parameters
Parameter | Value
-------------------------------+-----------------------
wal_sender_backup_directory | /pgdata/06/wal_backup
wal_sender_backup_strict | off
wal_sender_check_crc | on
wal_sender_check_type | block
wal_sender_panic_on_crc_error | off
wal_sender_timeout | 1min
(6 rows)
Проверим содержимое каталога резервных копий:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backup
итого 16400
-rw------- 1 postgres postgres 16777216 Sep 21 13:20 000000100000000000000015_backup
-rw------- 1 postgres postgres 16384 Sep 21 13:20 000000100000000000000015_crc
Видно, что копия сегмента WAL и файл контрольных сумм находятся в каталоге.
Включение режима декодирования
Режим декодирования включается установкой следующих настроек:
wal_sender_check_crc: onwal_sender_check_type: record
Отредактируем файл конфигурации на мастере и реплике соответствующим образом:
[student@srv1 ~]$ sudo -u postgres grep -B3 -n 'ssl: on' /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227- wal_sender_check_crc: on
228- wal_sender_check_type: record
229: ssl: on
То же самое на реплике:
[student@srv1 ~]$ ssh srv2 sudo -u postgres grep -B3 -e 'ssl:[[:space:]]on' -n /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227- wal_sender_check_crc: on
228- wal_sender_check_type: record
229: ssl: on
Остановим pangolin-manager на реплике:
[student@srv1 ~]$ ssh srv2 sudo systemctl stop pangolin-manager
[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager
Вывод команды:
○ pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: inactive (dead) since Sun 2026-02-15 17:53:55 MSK; 17s ago
Duration: 19h 52min 13.136s
Process: 81976 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 81977 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 81978 ExecStart=/opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml (code=exited, status=0/SUCCESS)
Main PID: 81978 (code=exited, status=0/SUCCESS)
CPU: 19h 14min 31.218s
Перезапустим pangolin-manager на мастере:
[student@srv1 ~]$ sudo systemctl restart pangolin-manager
[student@srv1 ~]$ sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Sun 2026-02-15 17:54:58 MSK; 5s ago
Process: 68256 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 68257 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 68258 (pangolin-manage)
Tasks: 21 (limit: 4667)
Memory: 200.3M
CPU: 4.457s
CGroup: /system.slice/pangolin-manager.service
├─68258 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─68272 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 >
├─68275 "postgres: Pobeda: logger "
├─68276 "postgres: Pobeda: checkpointer "
├─68277 "postgres: Pobeda: wal backup writer "
├─68278 "postgres: Pobeda: background writer "
├─68280 "postgres: Pobeda: idle sessions terminator "
├─68281 "postgres: Pobeda: authproc "
├─68282 "postgres: Pobeda: password policy cache "
├─68283 "postgres: Pobeda: integrity check launcher "
├─68284 "postgres: Pobeda: license checker "
├─68289 "postgres: Pobeda: patroni postgres 127.0.0.1(36780) idle"
├─68302 "postgres: Pobeda: walwriter "
├─68303 "postgres: Pobeda: autovacuum launcher "
├─68304 "postgres: Pobeda: pg_cron launcher "
└─68305 "postgres: Pobeda: logical replication launcher "
Запустим pangolin-manager на реплике:
[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager
[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Sun 2026-02-15 17:55:51 MSK; 4s ago
Process: 112372 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 112373 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 112374 (pangolin-manage)
Tasks: 19 (limit: 4667)
Memory: 184.3M
CPU: 3.530s
CGroup: /system.slice/pangolin-manager.service
├─112374 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─112389 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=Pobeda --wal_level=replica --hot_standby=on --max_connections=111 --max_wal_senders=10 --max_prepared_transactions=3 --max_locks_per_transaction=64 --track_commit_timestamp=False --max_replication_slots=10 --max_worker_processes=32 --wal_log_hints=True --authentication_max_workers=16
├─112392 "postgres: Pobeda: logger "
├─112393 "postgres: Pobeda: checkpointer "
├─112394 "postgres: Pobeda: wal backup writer "
├─112395 "postgres: Pobeda: background writer "
├─112396 "postgres: Pobeda: startup recovering 000000110000000000000016"
├─112397 "postgres: Pobeda: idle sessions terminator "
├─112398 "postgres: Pobeda: authproc "
├─112399 "postgres: Pobeda: password policy cache "
├─112401 "postgres: Pobeda: integrity check launcher "
├─112402 "postgres: Pobeda: license checker "
├─112403 "postgres: Pobeda: walreceiver streaming 0/16000218"
└─112408 "postgres: Pobeda: patroni postgres 127.0.0.1(40370) idle"
Подключившись к СУБД, проверим настройки:
[student@srv1 ~]$ sudo -iu postgres psql -c '\dconfig wal_sender_*'
List of configuration parameters
Parameter | Value
-------------------------------+-----------------------
wal_sender_backup_directory | /pgdata/06/wal_backup
wal_sender_backup_strict | off
wal_sender_check_crc | on
wal_sender_check_type | record
wal_sender_panic_on_crc_error | off
wal_sender_timeout | 1min
(6 rows)
Сравним содержимое каталога резервных копий WAL в режимах проверки контрольных сумм и декодирования:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backup
итого 49172
-rw------- 1 postgres postgres 16777216 Sep 21 13:22 000000100000000000000015_backup
-rw------- 1 postgres postgres 16384 Sep 21 13:22 000000100000000000000015_crc
-rw------- 1 postgres postgres 16777216 Sep 21 13:22 000000100000000000000016_backup
-rw------- 1 postgres postgres 8 Sep 21 13:22 000000100000000000000016_crc
-rw------- 1 postgres postgres 16777216 Sep 21 13:22 000000110000000000000016_backup
Обратите внимание на то, как отличаются размеры файлов 000000100000000000000015_crc, созданного в режиме проверки контрольных сумм, и 000000100000000000000016_crc, созданного при работе в режиме декодирования.
Включение гибридного режима
Гибридный режим включается при следующих настройках:
wal_sender_check_crc: onwal_sender_check_type: 'record, block'
Отредактируем файлы конфигурации:
[student@srv1 ~]$ sudo -u postgres grep -B3 -e 'ssl:[[:space:]]on' -n /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227- wal_sender_check_crc: on
228- wal_sender_check_type: 'record, block'
229: ssl: on
На реплике:
[student@srv1 ~]$ ssh srv2 sudo -u postgres grep -B3 -e 'ssl:[[:space:]]on' -n /etc/pangolin-manager/postgres.yml
226- wal_sender_backup_directory: /pgdata/06/wal_backup
227- wal_sender_check_crc: on
228- wal_sender_check_type: 'record, block'
229: ssl: on
Останавливаем реплику:
[student@srv1 ~]$ ssh srv2 sudo systemctl stop pangolin-manager
Рестартуем мастер:
[student@srv1 ~]$ sudo systemctl restart pangolin-manager
[student@srv1 ~]$ sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Sun 2026-02-15 18:48:43 MSK; 4s ago
Process: 69212 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 69214 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 69215 (pangolin-manage)
Tasks: 21 (limit: 4667)
Memory: 200.2M
CPU: 3.577s
CGroup: /system.slice/pangolin-manager.service
├─69215 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─69229 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 >
├─69232 "postgres: Pobeda: logger "
├─69233 "postgres: Pobeda: checkpointer "
├─69234 "postgres: Pobeda: wal backup writer "
├─69235 "postgres: Pobeda: background writer "
├─69237 "postgres: Pobeda: idle sessions terminator "
├─69238 "postgres: Pobeda: authproc "
├─69239 "postgres: Pobeda: password policy cache "
├─69242 "postgres: Pobeda: integrity check launcher "
├─69243 "postgres: Pobeda: license checker "
├─69246 "postgres: Pobeda: patroni postgres 127.0.0.1(37818) idle"
├─69258 "postgres: Pobeda: walwriter "
├─69259 "postgres: Pobeda: autovacuum launcher "
├─69260 "postgres: Pobeda: pg_cron launcher "
└─69261 "postgres: Pobeda: logical replication launcher "
Запускаем реплику:
[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager
[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager
Вывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Sun 2026-02-15 18:49:35 MSK; 4s ago
Process: 113957 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
Process: 113958 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
Main PID: 113959 (pangolin-manage)
Tasks: 19 (limit: 4667)
Memory: 184.2M
CPU: 3.765s
CGroup: /system.slice/pangolin-manager.service
├─113959 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
├─113974 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=Pobeda --wal_level=replica --hot_standby=on --max_connections=111 --max_wal_senders=10 --max_prepared_transactions=3 --max_locks_per_transaction=64 --track_commit_timestamp=False --max_replication_slots=10 --max_worker_processes=32 --wal_log_hints=True --authentication_max_workers=16
├─113977 "postgres: Pobeda: logger "
├─113978 "postgres: Pobeda: checkpointer "
├─113979 "postgres: Pobeda: wal backup writer "
├─113980 "postgres: Pobeda: background writer "
├─113981 "postgres: Pobeda: startup recovering 000000120000000000000017"
├─113982 "postgres: Pobeda: idle sessions terminator "
├─113983 "postgres: Pobeda: authproc "
├─113984 "postgres: Pobeda: password policy cache "
├─113986 "postgres: Pobeda: integrity check launcher "
├─113987 "postgres: Pobeda: license checker "
├─113988 "postgres: Pobeda: walreceiver streaming 0/17000218"
└─113993 "postgres: Pobeda: patroni postgres 127.0.0.1(40994) idle"
Проверим настройки:
[student@srv1 ~]$ sudo -iu postgres psql -c '\dconfig wal_sender_*'
List of configuration parameters
Parameter | Value
-------------------------------+-----------------------
wal_sender_backup_directory | /pgdata/06/wal_backup
wal_sender_backup_strict | off
wal_sender_check_crc | on
wal_sender_check_type | record, block
wal_sender_panic_on_crc_error | off
wal_sender_timeout | 1min
(6 rows)
Посмотрим, что изменилось в каталоге резервных копий WAL:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backup
итого 81956
-rw------- 1 postgres postgres 16777216 Sep 21 13:22 000000100000000000000015_backup
-rw------- 1 postgres postgres 16384 Sep 21 13:22 000000100000000000000015_crc
-rw------- 1 postgres postgres 16777216 Sep 21 13:22 000000100000000000000016_backup
-rw------- 1 postgres postgres 8 Sep 21 13:22 000000100000000000000016_crc
-rw------- 1 postgres postgres 16777216 Sep 21 13:22 000000110000000000000016_backup
-rw------- 1 postgres postgres 16777216 Sep 21 13:27 00000005000000000000000A_backup
-rw------- 1 postgres postgres 16777216 Sep 21 13:30 00000006000000000000000A_backup
-rw------- 1 postgres postgres 16384 Sep 21 13:30 00000006000000000000000A_crc
Заметно, что crc файл имеет такой же размер, как в режиме проверки контрольных сумм, так как в гибридном режиме они также проверяются.