Задание 2: Включение контроля целостности передачи WAL на реплику
По итогам выполнения данной лабораторной работы вы научитесь выполнять подготовительные действия для защиты WAL, а также настраивать режимы проверки контрольных сумм (block), декодированием (record) и гибридный. Кроме того, вы сможете анализировать содержимое каталога резервных копий WAL при различных конфигурациях.
Подготовительные действия
-
Определите топологию кластера. Подключитесь к серверу и выполните:
[student@srv1 ~]$ sudo -iu 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 (7686856511775440350) ------------+-----------+----+-----------+| Member | Host | Role | State | TL | Lag in MB |+---------------+--------------------+--------------+-----------+----+-----------+|<IP-Address2> |<IP-Address2>:5433 | Sync Standby | streaming | 6 | 0 ||<IP-Address1> |<IP-Address1>:5433 | Leader | running | 6 | |+---------------+--------------------+--------------+-----------+----+-----------+[postgres@srv1 ~]$ exit -
Проверьте статус службы
pangolin-managerна мастере:[student@srv1 ~]$ sudo systemctl status pangolin-manager.serviceВывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQLLoaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)Drop-In: /usr/lib/systemd/system/service.d└─10-timeout-abort.confActive: active (running) since Mon 2026-04-27 09:00:21 MSK; 6 days agoMain PID: 58168 (pangolin-manage)Tasks: 21 (limit: 4666)Memory: 293.8MCPU: 12min 3.515sCGroup: /system.slice/pangolin-manager.service├─58168 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml├─68034 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 >├─68037 "postgres: Pobeda: logger "├─68038 "postgres: Pobeda: checkpointer "├─68039 "postgres: Pobeda: background writer "├─68041 "postgres: Pobeda: idle sessions terminator "├─68042 "postgres: Pobeda: walwriter "├─68043 "postgres: Pobeda: autovacuum launcher "├─68044 "postgres: Pobeda: integrity check launcher "├─68045 "postgres: Pobeda: license checker "├─68046 "postgres: Pobeda: authproc "├─68047 "postgres: Pobeda: password policy cache "├─68048 "postgres: Pobeda: pg_cron launcher "├─68049 "postgres: Pobeda: logical replication launcher "├─68054 "postgres: Pobeda: patroni postgres 127.0.0.1(44366) idle"└─68056 "postgres: Pobeda: walsender patroni <IP-Address2>(42370) streaming 0/8000000" -
Проверьте статус службы
pangolin-managerна реплике:[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager.serviceВывод команды:
● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQLLoaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)Drop-In: /usr/lib/systemd/system/service.d└─10-timeout-abort.confActive: active (running) since Mon 2026-04-27 09:00:53 MSK; 6 days agoMain PID: 20019 (pangolin-manage)Tasks: 19 (limit: 4666)Memory: 289.5MCPU: 11min 27.934sCGroup: /system.slice/pangolin-manager.service├─20019 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml├─26413 /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=110 --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 --enable_page_compression=off├─26416 "postgres: Pobeda: logger "├─26417 "postgres: Pobeda: checkpointer "├─26418 "postgres: Pobeda: background writer "├─26419 "postgres: Pobeda: startup recovering 000000020000000000000007"├─26420 "postgres: Pobeda: idle sessions terminator "├─26421 "postgres: Pobeda: authproc "├─26422 "postgres: Pobeda: password policy cache "├─26423 "postgres: Pobeda: walreceiver streaming 0/8000000"├─26426 "postgres: Pobeda: integrity check launcher "├─26427 "postgres: Pobeda: license checker "└─26430 "postgres: Pobeda: patroni postgres 127.0.0.1(38672) idle" -
Создайте каталог для хранения резервных копий 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Ожидаемый результат: для каждого узла отображается информация о каталоге с владельцем
postgres. -
Сохраните резервные копии конфигурационных файлов перед редактированием:
[student@srv1 ~]$ sudo -u postgres cp -v /etc/pangolin-manager/postgres.yml{,.bak}[student@srv1 ~]$ ssh srv2 sudo -u postgres cp -v /etc/pangolin-manager/postgres.yml{,.bak} -
Определите место для вставки параметра
wal_sender_backup_directory. Найдите строку сssl: onи ее номер:[student@srv1 ~]$ sudo -u postgres grep -n 'ssl: on' /etc/pangolin-manager/postgres.yml -
Отредактируйте конфигурационный файл на мастере, добавив параметр
wal_sender_backup_directoryперед строкойssl: on:wal_sender_backup_directory: /pgdata/06/wal_backupДля редактирования можно использовать любой текстовый редактор (
vim,nanoи так далее). -
Проверьте результат на мастере:
[student@srv1 ~]$ sudo -u postgres grep -B1 'ssl: on' /etc/pangolin-manager/postgres.ymlwal_sender_backup_directory: /pgdata/06/wal_backupssl: on -
Выполните аналогичные действия на реплике:
[student@srv1 ~]$ ssh srv2[student@srv2 ~]$ sudo -u postgres grep -B1 -n 'ssl: on' /etc/pangolin-manager/postgres.ymlУбедитесь, что параметр добавлен корректно.
-
Остановите
pangolin-managerна реплике:[student@srv2 ~]$ sudo systemctl stop pangolin-manager[student@srv2 ~]$ sudo systemctl status pangolin-managerОжидаемый результат: статус
inactive (dead). -
Выйдите из сессии на реплике и перезапустите
pangolin-managerна мастере:[student@srv2 ~]$ exit[student@srv1 ~]$ sudo systemctl restart pangolin-manager[student@srv1 ~]$ sudo systemctl status pangolin-manager -
Запустите
pangolin-managerна реплике:[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager -
Проверьте установку параметра
wal_sender_backup_directoryв СУБД:[student@srv1 ~]$ sudo -iu postgres psql -c 'SHOW wal_sender_backup_directory;'wal_sender_backup_directory-----------------------------/pgdata/06/wal_backup -
Убедитесь, что каталог пока пуст:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backupОжидаемый результат:
итого 0(пустой каталог).
Включение режима проверки контрольных сумм
-
Отредактируйте конфигурационный файл на мастере, добавив параметры для включения режима проверки контрольных сумм:
wal_sender_check_crc: onwal_sender_check_type: blockРазместите эти параметры перед строкой
ssl: on. -
Проверьте результат на мастере:
[student@srv1 ~]$ sudo -u postgres grep -B3 -n 'ssl: on' /etc/pangolin-manager/postgres.yml226- wal_sender_backup_directory: /pgdata/06/wal_backup227- wal_sender_check_crc: on228- wal_sender_check_type: block229: ssl: on -
Выполните аналогичные изменения на реплике:
[student@srv1 ~]$ ssh srv2[student@srv2 ~]$ sudo -u postgres grep -B3 -n 'ssl: on' /etc/pangolin-manager/postgres.yml -
Остановите
pangolin-managerна реплике:[student@srv2 ~]$ sudo systemctl stop pangolin-manager[student@srv2 ~]$ exit -
Перезапустите
pangolin-managerна мастере:[student@srv1 ~]$ sudo systemctl restart pangolin-manager[student@srv1 ~]$ sudo systemctl status pangolin-managerВнимание!В списке процессов появился новый процесс
wal backup writer. -
Запустите
pangolin-managerна реплике:[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager[student@srv1 ~]$ ssh srv2 sudo systemctl status pangolin-manager -
Проверьте настройки параметров в СУБД:
[student@srv1 ~]$ sudo -iu postgres psql -c '\dconfig wal_sender_*'Список параметров конфигурацииПараметр | Значение----------------------------+-----------------------wal_sender_backup_directory | /pgdata/06/wal_backupwal_sender_backup_strict | offwal_sender_check_crc | onwal_sender_check_type | blockwal_sender_panic_on_crc_error | offwal_sender_timeout | 1min -
Проверьте содержимое каталога резервных копий WAL:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backupОжидаемый результат: появятся файлы с суффиксами
_backupи_crc. Файл_crcимеет размер 16384 байта.
Включение режима декодирования
-
Отредактируйте конфигурационный файл на мастере, изменив параметр
wal_sender_check_type:wal_sender_check_type: record -
Проверьте результат на мастере:
[student@srv1 ~]$ sudo -u postgres grep -B3 -n 'ssl: on' /etc/pangolin-manager/postgres.yml226- wal_sender_backup_directory: /pgdata/06/wal_backup227- wal_sender_check_crc: on228- wal_sender_check_type: record229: ssl: on -
Выполните аналогичные изменения на реплике:
[student@srv1 ~]$ ssh srv2 sudo -u postgres grep -B3 -e 'ssl:[[:space:]]on' -n /etc/pangolin-manager/postgres.yml -
Остановите
pangolin-managerна реплике:[student@srv1 ~]$ ssh srv2 sudo systemctl stop pangolin-manager -
Перезапустите
pangolin-managerна мастере:[student@srv1 ~]$ sudo systemctl restart pangolin-manager -
Запустите
pangolin-managerна реплике:[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager -
Проверьте настройки параметров в СУБД:
[student@srv1 ~]$ sudo -iu postgres psql -c '\dconfig wal_sender_*'wal_sender_check_type | record -
Сравните содержимое каталога резервных копий WAL:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backupВнимание!Размер файла
_crcв режиме декодирования составляет всего 8 байт, в отличие от 16384 байт в режиме проверки контрольных сумм.
Включение гибридного режима
-
Отредактируйте конфигурационный файл на мастере, изменив параметр
wal_sender_check_type:wal_sender_check_type: 'record, block'ПримечаниеЗначение указывается в кавычках, так как содержит запятую.
-
Проверьте результат на мастере:
[student@srv1 ~]$ sudo -u postgres grep -B3 -e 'ssl:[[:space:]]on' -n /etc/pangolin-manager/postgres.yml226- wal_sender_backup_directory: /pgdata/06/wal_backup227- wal_sender_check_crc: on228- 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 -
Остановите
pangolin-managerна реплике:[student@srv1 ~]$ ssh srv2 sudo systemctl stop pangolin-manager -
Перезапустите
pangolin-managerна мастере:[student@srv1 ~]$ sudo systemctl restart pangolin-manager -
Запустите
pangolin-managerна реплике:[student@srv1 ~]$ ssh srv2 sudo systemctl start pangolin-manager -
Проверьте настройки параметров в СУБД:
[student@srv1 ~]$ sudo -iu postgres psql -c '\dconfig wal_sender_*'wal_sender_check_type | record, block -
Изучите содержимое каталога резервных копий WAL:
[student@srv1 ~]$ sudo ls -l /pgdata/06/wal_backupВнимание!В гибридном режиме файлы
_crcимеют размер 16384 байта, как и в режиме проверки контрольных сумм, поскольку обе проверки выполняются одновременно.
Анализ результатов
Таблица сравнения режимов:
| Режим | wal_sender_check_type | Размер _crc файла | Наличие _backup файла |
|---|---|---|---|
| Проверка контрольных сумм | block | 16384 байт | + |
| Декодирование | record | 8 байт | + |
| Гибридный | record, block | 16384 байт | + |
Назначение каждого режима:
- Режим проверки контрольных сумм (block) — сохраняет контрольные суммы для каждого блока WAL, позволяет обнаружить повреждения на уровне блоков.
- Режим декодирования (record) — выполняет декодирование записей WAL, проверяет корректность заголовков и структур записей, требует меньше места для хранения контрольной информации.
- Гибридный режим (record, block) — обеспечивает максимальную защиту, выполняя оба типа проверок, но требует больше ресурсов.