Установка и настройка.

  • Устанавливаем утилиту WAL-G из пакета pool_w_wal-g_wal-g_2.0.1-1_amd64.

pool_w_wal-g_wal-g_2.0.1-1_amd64.deb

postgres@cs-db-001:~$ sudo dpkg -i /tmp/pool_w_wal-g_wal-g_2.0.1-1_amd64.deb

(Чтение базы данных … на данный момент установлено 62764 файла и каталога.)
Подготовка к распаковке …/pool_w_wal-g_wal-g_2.0.1-1_amd64.deb …
Распаковывается wal-g (2.0.1-1) на замену (2.0.1-1) …
Настраивается пакет wal-g (2.0.1-1) …   
BASH
  • В домашнем каталоге пользователя postgres:

su - postgres

postgres@cs-db-001:~$ pwd
/var/lib/postgresql
BASH


1. Создаем каталог walgdata для РК данных СУБД Тантор.

mkdir walgdata
BASH

2. Создаем файл конфигурации .walg.json для утилиты WAL-G содержащий следующие данные:

nano .walg.json

{
    "WALG_COMPRESSION_METHOD": "brotli",
    "WALG_DELTA_MAX_STEPS": "5",
    "WALG_FILE_PREFIX": "/var/lib/postgresql/walgdata",
    "PGDATA": "/var/lib/postgresql/tantor-se-15/data",
    "PGHOST": "/var/run/postgresql/.s.PGSQL.5432"
}
CODE

WALG_COMPRESSION_METHOD определяет применяемый метод сжатия данных brotli

WALG_DELTA_MAX_STEPS определяет, сколько разностных резервных копий (между ранее созданной резервной копией и текущим состоянием) может быть между полными резервными копиями

WALG_FILE_PREFIX определяет расположение каталога данных WAL-G /var/lib/postgresql/walgdata

PGDATA определяет расположение каталога данных СУБД Тантор /var/lib/postgresql/tantor-se-15/data

PGHOST определяет расположение информационного файла сервиса СУБД Тантор

2.а) Создаём каталог логирования бэкапа и назначаем владельца

sudo mkdir /var/log/postgresql/
sudo chown postgres:postgres /var/log/postgresql/
BASH


3. Вносим изменения в файл конфигурации СУБД Тантор /var/lib/postgresql/tantor-se-15/data/postgresql.auto.conf

nano .walg.json

cat >>  /var/lib/postgresql/tantor-se-15/data/postgresql.auto.conf << EOL
wal_level = replica
archive_mode = on
archive_command = '/usr/bin/wal-g wal-push "%p" >> /var/log/postgresql/archive_command.log 2>&1'
archive_timeout = 60
restore_command = '/usr/bin/wal-g wal-fetch \"%f\" \"%p\" >> /var/log/postgresql/restore_command.log 2>&1'
                                                                            
EOL
BASH

  4. Останавливаем, запускаем и проверяем работу сервиса СУБД Тантор и применение изменений.

postgres@cs-db-001:~$  sudo systemctl stop tantor-se-server-15.service
[sudo] пароль для postgres:
postgres@cs-db-001:~$ sudo systemctl start tantor-se-server-15.service
postgres@cs-db-001:~$ sudo systemctl status tantor-se-server-15.service
● tantor-se-server-15.service - Tantor Special Edition database server 15
   Loaded: loaded (/lib/systemd/system/tantor-se-server-15.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2023-10-18 15:16:21 MSK; 3s ago
     Docs: https://tantorlabs.ru/docs/
  Process: 25818 ExecStartPre=/opt/tantor/db/15/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
  Process: 25820 ExecStart=/opt/tantor/db/15/bin/pg_ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT} (code=exited, status=0/SUCCESS)
 Main PID: 25822 (postgres)
    Tasks: 7 (limit: 2313)
   Memory: 17.7M
      CPU: 46ms
   CGroup: /system.slice/tantor-se-server-15.service
           ├─25822 /opt/tantor/db/15/bin/postgres -D /var/lib/postgresql/tantor-se-15/data
           ├─25823 postgres: checkpointer
           ├─25824 postgres: background writer
           ├─25826 postgres: walwriter
           ├─25827 postgres: autovacuum launcher
           ├─25828 postgres: archiver
           └─25829 postgres: logical replication launcher

окт 18 15:16:21 cs-db-001.tantorlabs.ru systemd[1]: Starting Tantor Special Edition database server 15...
окт 18 15:16:21 cs-db-001.tantorlabs.ru pg_ctl[25820]: 2023-10-18 15:16:21.582 MSK [25822] СООБЩЕНИЕ:  запускается PostgreSQL 15.2 on x86_64-pc-linux-gnu, compiled by gcc (AstraLinuxSE 8.3.0-6) 8.3.0, 64-bit
окт 18 15:16:21 cs-db-001.tantorlabs.ru pg_ctl[25820]: 2023-10-18 15:16:21.583 MSK [25822] СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "127.0.0.1" открыт порт 5432
окт 18 15:16:21 cs-db-001.tantorlabs.ru pg_ctl[25820]: 2023-10-18 15:16:21.583 MSK [25822] СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::1" открыт порт 5432
окт 18 15:16:21 cs-db-001.tantorlabs.ru pg_ctl[25820]: 2023-10-18 15:16:21.590 MSK [25822] СООБЩЕНИЕ:  для приёма подключений открыт Unix-сокет "/var/run/postgresql/.s.PGSQL.5432"
окт 18 15:16:21 cs-db-001.tantorlabs.ru pg_ctl[25820]: 2023-10-18 15:16:21.619 MSK [25825] СООБЩЕНИЕ:  система БД была выключена: 2023-10-18 15:16:12 MSK
окт 18 15:16:21 cs-db-001.tantorlabs.ru pg_ctl[25820]: 2023-10-18 15:16:21.645 MSK [25822] СООБЩЕНИЕ:  система БД готова принимать подключения
окт 18 15:16:21 cs-db-001.tantorlabs.ru systemd[1]: Started Tantor Special Edition database server 15.
BASH

5. Выполняем проверку каталога walgdata.

postgres@cs-db-001:~$ wal-g backup-list

INFO: 2023/10/18 15:24:45.505704 No backups found
BASH

Создание резевной копиии (РК) и восстановление из неё.

6. Выполняем РК СУБД Тантор с использованием утилиты WAL-G.

postgres@alse174cmdt3:~$ wal-g backup-push /var/lib/postgresql/tantor-se-15/data

INFO: 2023/10/18 15:27:32.534357 Couldn't find previous backup. Doing full backup.
INFO: 2023/10/18 15:27:32.541850 Calling pg_start_backup()
INFO: 2023/10/18 15:27:32.763555 Starting a new tar bundle
INFO: 2023/10/18 15:27:32.763620 Walking ...
INFO: 2023/10/18 15:27:32.763885 Starting part 1 ...
INFO: 2023/10/18 15:27:33.010072 Packing ...
INFO: 2023/10/18 15:27:33.011348 Finished writing part 1.
INFO: 2023/10/18 15:27:33.011604 Starting part 2 ...
INFO: 2023/10/18 15:27:33.011650 /global/pg_control
INFO: 2023/10/18 15:27:33.011965 Finished writing part 2.
INFO: 2023/10/18 15:27:33.011978 Calling pg_stop_backup()
INFO: 2023/10/18 15:27:33.051332 Starting part 3 ...
INFO: 2023/10/18 15:27:33.051854 backup_label
INFO: 2023/10/18 15:27:33.051878 tablespace_map
INFO: 2023/10/18 15:27:33.052287 Finished writing part 3.
INFO: 2023/10/18 15:27:33.058204 Wrote backup with name base_000000010000000000000003
BASH

7. Останавливаем СУБД Тантор.

sudo systemctl stop tantor-se-server-15.service
BASH

8. Перемещаем каталог данных СУБД Тантор.

mv /var/lib/postgresql/tantor-se-15/data /var/lib/postgresql/tantor-se-15/savedata
BASH

9. Восстанавливаем каталог данных СУБД Тантор с использованием утилиты WAL-G.

wal-g backup-fetch /var/lib/postgresql/tantor-se-15/data LATEST

INFO: 2023/10/18 15:33:12.231485 Selecting the latest backup...
INFO: 2023/10/18 15:33:12.231809 LATEST backup is: 'base_000000010000000000000003'
INFO: 2023/10/18 15:33:12.258661 Finished extraction of part_003.tar.br
INFO: 2023/10/18 15:33:29.418648 Finished extraction of part_001.tar.br
INFO: 2023/10/18 15:33:29.434357 Finished extraction of pg_control.tar.br
INFO: 2023/10/18 15:33:29.434397
Backup extraction complete.
BASH

10.  Создаем в каталоге данных СУБД Тантор файл recovery.signal для запуска восстановления.

touch /var/lib/postgresql/tantor-se-15/data/recovery.signal
BASH

11. Запускаем  СУБД Тантор и проверяем работу сервиса и доступ к СУБД.

sudo systemctl start tantor-se-server-15.service

 
BASH

12. Проверяем работу сервиса и доступ к СУБД.

sudo systemctl status tantor-se-server-15.service

INFO: 2023/10/18 15:24:45.505704 No backups found
BASH

FAQ по некоторым вопросам.

1. В режиме DELTA бэкап видит различия на уровне блоков?

Да, дельты всегда поблочные.

2. Баг в WALG_USE_WAL_DELTA ещё не исправлен?

Да, WAL DELTA иногда имеет проблемы. Пока решение не найдено.


3. Есть ли возможность инкрементального восстановления (когда у нас есть, например, отставшая реплика, мы на нее восстанавливаем свежий бэкап с мастера и он восстанавливает только отличающиеся блоки, а не все)?

Да, есть backup for catchup. Но пока разница между обычными дельтами и дельтами для догона ещё присутствует.


4. Планируется ли появление просто catchup: catchup-push/catchup-fetch, но без создания промежуточного бэкапа на хранилище, прямая синхронизация мастер→реплика?
Планируется, но пока сделано не было.


5. Есть ли возможность сделать синтетический новый FULL из старого FULL и набора инкременталов? 
Планируется, но пока сделано не было.


6. Поддерживается ли бэкап и хранение wal archive на NFS? Можно ли использовать WALG_FILE_PREFIX?

Возможно, есть какие-то подводные камни, например, в режиме archive_mode = always, когда мастер и реплики будут пытаться архивировать wal в одно и то же файловое хранилище?
Должно работать без особых проблем. backup over ssh, например, работает нормально.