Нативный подмодуль в PostgreSQL Universal. Полный и инкрементальные режимы

b2d0911580ff548545838152a91ecc07.jpg

Привет, Хабр! Это новый цикл статей, посвященный RuBackup. Ранее мы затрагивали темы архитектуры продукта и раскатки демо-стенда.
На этот раз поговорим об особенностях работы и процессе установки PostgreSQL Universal. Статьи рассчитаны как на опытных пользователей, знакомых с RuBackup, так и на людей, интересующихся созданием резервных копий для личных и коммерческих целей. Начнем!

Установка RuBackup и конфигурация машин

Предполагается, что читатель в общих чертах знаком с продуктом RuBackup. Если нет, то здесь можно подробнее получить базовое представление о возможностях продукта. Для удобства будем устанавливать пакеты и подготавливать окружение для бэкапа PostgreSQL на машинах c ОС Ubuntu 22.04.

Для этого нам понадобятся следующие пакеты:

  • rubackup-server.deb — центральныйсервер rubackup, обеспечивающий взаимодействие с клиентами, создание правил и задач для резервного копирования

  • rubackup-client.deb — клиент rubackup

  • rubackup-rbm.deb — rubackup manager (rbm), с помощью которого будем задавать правила для бэкапа. Это интерфейс для взаимодействия с клиентами

  • rubackup-common.deb — набор необходимых библиотек и компонентов для сервера

  • rubackup-common-gui.deb — набор графических библиотек для rbm

  • rubackup-postgresql.deb — модуль для бэкапа СУБД postgresql

На момент написания статьи зафиксирована версия 2.4.

Установка пакетов на серверной машине

Произведем установку пакетов на серверной машине командой

sudo dpkg -i rubackup-server.deb rubackup-client.deb rubackup-common.deb rubackup-rbm.deb rubackup-common-gui.deb

Пакеты распакуются и установятся в директорию /opt/rubackup

Далее необходимо сконфигурировать сервер, для этого запустим утилиту rb_init. Предполагается, что на машине установлен ванильный PostgreSQL. На Ubuntu 22.04 это 14 версия.

Для работы можно выполнить настройку из примера ниже:

ubuntu@server-vm:~$ sudo su
root@server-vm:/home/ubuntu# rb_init
RuBackup initialization utility
Copyright 2018-2024: LLC "RUBACKUP"
Исключительные права принадлежат ООО "РУБЭКАП"
Author is Andrey Kuznetsov
Version: 2.4.0; Build: 98e914d.

You MUST agree with the End User License Agreement (EULA) before installing RuBackup (y[es]/n[o]/r[ead]/q[uit])y
Do you want to configure RuBackup server (p[rimary], s[econdary], m[edia]) or RuBackup c[lient] (p/s/m/c/q)?p

   Primary RuBackup server configuration...

Enter hostname or IP address of PostgreSQL server [ localhost ]: 
Please enter password for "postgres" database user: 
Do you want to use a secure SSL connection to the database 'rubackup'  (y/n/q)? n
[2024-09-13 13:19:57] Info: Total usable main memory size: 4101967872 bytes
[2024-09-13 13:19:57] Warning: PostgreSQL shared buffers is too small. Recommend to set it up to: 1025491968 bytes
[2024-09-13 13:19:57] Info: PostgreSQL effective_cache_size: 4294967296 bytes [ OK ]
[2024-09-13 13:19:57] Warning: PostgreSQL work_mem is too small. Recommend to set it up to: 33554432 bytes
[2024-09-13 13:19:57] Info: PostgreSQL max_parallel_workers: 8 [ OK ]
[2024-09-13 13:19:57] Info: PostgreSQL transaction isolation: read committed [ OK ]
Do you want to continue with invalid database settings (y/n)? y
Enter name of RuBackup superuser [ rubackup ]: 
Database user "rubackup" doesn't exist.
Do you want to create database user "rubackup" (y/n)? y
Please enter password for "rubackup" database user: 
Repeat password: 
Create PostgreSQL user rubackup
   User rubackup was created
   Attention!!! --------> Use this login to authenticate to RBM as RuBackup superuser
Enter RuBackup database name [ rubackup ]: 
Database "rubackup" doesn't exist.
Do you want to create database "rubackup" on "localhost" host (y/n)? y

   Creating new "rubackup" database...

   Execute: /opt/rubackup/rc/init/bloom.sql: success
   Execute: /opt/rubackup/rc/init/server.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_aerodisk_vair.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_brest_template.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_brest_vm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_btrfs.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_ceph_rbd.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_communigate_pro.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_communigate_pro_mail.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_docker_container.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_docker_image.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_docker_volume.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_dynamix.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_filesystem.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_filesystem_win.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_freeipa.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_greenplum.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_isp_vmmanager.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_jatoba1.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_kvm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_lvm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_lxd_container.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_lxd_image.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_mailion.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_mariadb101.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_mssql.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_mssql_files.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_mysql.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_opennebula_template.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_opennebula_vm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_openstack.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_openstack_vol.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_oracle_dp_db.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_oracle_dp_table.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_oracle_rman.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_ovirt.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_pg_dump_database.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_pg_dump_table.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_pg_superb.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_postgres_pro.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_postgresql.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_proxmox_container.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_proxmox_vm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_redis.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_rescue_image.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_rupost.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_rustack.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_rvirt_vm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_s3_cloud_bucket.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_sqlite.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_tarantool.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_tionix.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_vcenter.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_veil_vm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_vmware_vm.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_zfs.sql: success
   Execute: /opt/rubackup/rc/modules/rb_module_zfs_volume.sql: success

Do you want to add a required file system to the 'Default' pool in the configuration? (y/n)?y
Enter path: /default-pool
Path "/default-pool" doesn't exist. Do you want to create it? (y/n)y

   RuBackup client configuration: client-server mode
   Hostname of primary server: server-vm.astralinux.ru

Will you use secondary server (y/n)?n

Possible interfaces for RuBackup client communication: 
   lo [0]
   ens3 [1]
Choose client net interface ID for use: 1
   Selected interface: ens3
Do you allow centralized recovery (y/n)?y
Do you plan to use continuous remote replication to apply remote replicas on this client (y/n)?y
Enter local backup directory path [/tmp] : 
Set amount threads parallelizm for server [ 8 ]: 
Set amount threads parallelizm media server [ 8 ]: 

   Create RuBackup master key...

RuBackup master key file was overwritten. Digital signature keys will also be recreated
   Create new secret key
   Create new public key
Will you use digital signature (y/n)?y
Do you want to enable system monitoring of this client (y/n)?y
Do you want to set a soft memory threshold? (y/n)?n
Do you want to use ipv4[1] ipv6[2] or both[3] in DNS requests?3
Do you want to enable security audit ([y]es, [n]o, [q]uit)(y/n/q)?n

После этого необходимо запустить rubackup_server,  rubackup_client и rbm

sudo systemctl enable /opt/rubackup/etc/systemd/system/rubackup_server.service
sudo systemctl enable /opt/rubackup/etc/systemd/system/rubackup_client.service

Запустим rubackup manager

rbm&

Через rbm проверим, что все установилось корректно. Для этого выполним бэкап файловой системы произвольной папки. Если задача завершилась с статусом Done, все готово!

Проверка работоспособности окружения

Проверка работоспособности окружения

Теперь приступим к установке пакетов на клиентской машине.

Конфигурация СУБД на клиентской машине

Перед установкой сконфигурируем отдельную СУБД PostgreSQL. Также сразу выполним патч Ptrack для СУБД PostgreSQL (об этом чуть позже).

Возьмем исходники на GitHub (https://github.com/postgres/postgres) и патч Ptrack (https://github.com/postgrespro/ptrack)

cd /var/lib/postgresql/

export PG_BRANCH=REL_15_STABLE

# Get PostgreSQL and Ptrack sources
git clone https://github.com/postgres/postgres.git -b $PG_BRANCH
git clone https://github.com/postgrespro/ptrack.git postgres/contrib/ptrack

# Apply patch, compile and install PostgreSQL
# apt install build-essential flex bison zlib1g-dev lib32readline8 lib32readline-dev
cd postgres/contrib/ptrack && make patch && make install-postgres prefix=$PWD/pgsql

# Add the newly created binaries to the PATH:
export PATH=$PWD/pgsql/bin:$PATH

# Compile and install ptrack
make install USE_PGXS=1

Развернем кластер PostgreSQL:

/var/lib/postgresql/postgres/contrib/ptrack/pgsql/bin/pg_ctl -D /var/lib/postgresql/pgdata/ initdb

Настроим файл конфигурации /var/lib/postgresql/pgdata/postgresql.conf

port = 5433
wal_level = replica
archive_mode = on
archive_command = 'cp %p /opt/rubackup/mnt/
postgresql_archives/%f'
restore_command = 'cp /opt/rubackup/mnt/ postgresql_archives/%f %p'

Добавим доступ в /var/lib/postgresql/pgdata/pg_hba.conf

host    postgres        rubackup_backuper   127.0.0.1/32        md5
host    replication     rubackup_backuper   127.0.0.1/32        md5

Создадим каталог для архивации и установим пользователя и группу postgres:

mkdir -p /opt/rubackup/mnt/postgresql_archives/
chown postgres:postgres /opt/rubackup/mnt/postgresql_archives/

Запустим PostgreSQL

/opt/rubackup/mnt$ /var/lib/postgresql/postgres/contrib/ptrack/pgsql/bin/pg_ctl -D /var/lib/postgresql/pgdata/ start

waiting for server to start....2024-09-16 11:49:43.789 MSK [48561] LOG: starting PostgreSQL 15.8 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
2024-09-16 11:49:43.789 MSK [48561] LOG: listening on IPv4 address "127.0.0.1", port 5433
2024-09-16 11:49:43.800 MSK [48561] LOG: listening on Unix socket "/tmp/.s.PGSQL.5433"
2024-09-16 11:49:43.815 MSK [48564] LOG: database system was shut down at 2024-09-16 11:43:48 MSK
2024-09-16 11:49:43.837 MSK [48561] LOG: database system is ready to accept connections
done
server started

Создадим символьные ссылки для возможности подключения через psql

sudo ln -sf /tmp/.s.PGSQL.5433 /var/run/postgresql/.s.PGSQL.5433
sudo ln -sf /tmp/.s.PGSQL.5433.lock /var/run/postgresql/.s.PGSQL.5433.lock

Выполним в терминале команду:

sudo -u postgres psql -p 5433

Создадим пользователя rubackup_backuper и дадим необходимые права для выполнения резервных копий:

create user rubackup_backuper password '12345';
alter role rubackup_backuper with login;

grant execute on function pg_backup_start to rubackup_backuper;
grant execute on function pg_backup_stop(bool) to rubackup_backuper;
grant execute on function pg_switch_wal to rubackup_backuper;
grant pg_read_all_settings to rubackup_backuper;

Отлично, мы настроили PostgreSQL! Теперь приступим к установке пакетов на клиентской машине.

Установка пакетов

На машине необходимо установить следующие пакеты:

sudo dpkg -i rubackup-client.deb rubackup-common.deb rubackup-postgresql.deb

Пакеты распакуются и установятся в директорию /opt/rubackup.

Далее необходимо выполнить настройку конфигурации модуля PostgreSQL Universal.

Настройки модуля PostgreSQL Universal

/opt/rubackup/etc/rb_module_postgresql.conf — текущий конфигурационный файл модуля. Если модуль настраивается на машине не впервые, текущий конфигурационный файл будет переименован в /opt/rubackup/etc/rb_module_postgresql_old.conf, а в новом будут находится настройки после слияния.

Кратко пробежимся по конфигурационным параметрам:

# Symbol "#" at the beginning of the line treats as a comment
# "#" in the middle of the line treats as a parameter value
# So please do not use comments in one line with parameter
#
dbname postgres
username rubackup_backuper
password 12345
host localhost
port 5432
#Enable interaction with centralized secret repositories
use_secret_storage no
archive_catalog /opt/rubackup/mnt/postgresql_archives
# Specify this path according to the installed version
pg_ctl /usr/lib/postgresql/12/bin/pg_ctl
postgresql_service_name postgresql
pg_waldump /usr/lib/postgresql/12/bin/pg_waldump
num_threads_for_wal_processing 8
# Specify if custom built PostgreSQL binary is required
#pg_binary /usr/bin/custom/postgres
# Specify if server output should be redirected to the file
#pg_log /tmp/postgres.log
auto_remove_wal yes
postgresql_admin postgres
# Timeout period for the last WAL file generated during backup(in seconds)
wal_wait_timeout 10
# Availability check period for last WAL file generated during backup(in seconds)
wal_check_period 1
# Patroni parameters are optional
# and may be needed for the module work in a patroni cluster
patroni_host localhost
patroni_port 8008
patroni_node_type_for_backup leader
# Далее идут параметры для подмодуля PgProbackup
# Возможные значения для restore_target_action: [pause | promote | shutdown]
restore_target_action pause
# Возможные значения для restore_target: [immediate | latest]
restore_target immediate
# Абсолютный путь до утилиты pg_probackup
pg_probackup /opt/pgpro/std-13/bin/pg_probackup
# Абсолютный путь до каталога, в котором хранятся резервные копии
probackup_catalog_copies /opt/rubackup/mnt/pg_probackup
# Имя инстанса. Имя подкаталогов, в которых будут храниться копии
probackup_instance_name data
# Возможные значения для s3_interface: [minio | vk]
s3_interface minio
# Путь до утилиты pg_receivewal (физическая репликация), начиная с 10 версии
pg_receivewal /usr/lib/postgresql/10/bin/pg_receivewal
# Использовать стрим режим. Возможные значения "yes", "no"
stream no
# Выполнить drop физического слота с именем slot_name после создания РК
drop_slot no
# Использовать физический слот, заданный в системе, иначе создать с указанным именем
slot_name my_slot_name
# Директория для сохранения репликационных данных
replication_catalog /opt/rubackup/mnt/postgresql_replica
# Использовать move для переноса WAL из архива вместо копирования
move_on_archive_get yes
# Количество потоков для архивации WAL
num_threads_for_wal_archiving 1
# Количество файлов обрабатываемых за один вызов архивации
batch_size_for_wal_archiving 1
# Макс. размер хранимых локально архивных WAL файлов (0 - нет лимита)
wal_archive_files_size 0
# Макс. время в секундах которое процесс снятия РК ждет освобождения архивного каталога
cleanup_wait_timeout 1000
# Выполнять проверку работы команд архивации перед снятием РК
make_archiving_check yes

1.5. Финальная конфигурация клиента

Теперь можно запустить утилиту rb_init.

root@client-vm:/home/ubuntu# rb_init
RuBackup initialization utility
Copyright 2018-2024: LLC "RUBACKUP"
Исключительные права принадлежат ООО "РУБЭКАП"
Author is Andrey Kuznetsov
Version: 2.4.0; Build: 98e914d.
   RuBackup command service was added to /etc/services
   RuBackup license service was added to /etc/services
   RuBackup media service was added to /etc/services

You MUST agree with the End User License Agreement (EULA) before installing RuBackup (y[es]/n[o]/r[ead]/q[uit])y
Do you want to configure RuBackup server (p[rimary], s[econdary], m[edia]) or RuBackup c[lient] (p/s/m/c/q)?c

   RuBackup client configuration...

Choose client mode: client-server or autonomous (c/a)?c

   RuBackup client configuration: client-server mode

Hostname of primary server: 10.177.72.234
Will you use secondary server (y/n)?n

Possible interfaces for RuBackup client communication: 
   lo [0]
   ens3 [1]
Choose client net interface ID for use: 1
   Selected interface: ens3
Do you allow centralized recovery (y/n)?y
Do you plan to use continuous remote replication to apply remote replicas on this client (y/n)?y
Enter local backup directory path [/tmp] : 

   Create RuBackup master key...

RuBackup master key file was overwritten. Digital signature keys will also be recreated
   Create new secret key
   Create new public key
Will you use digital signature (y/n)?y
Do you want to enable system monitoring of this client (y/n)?y
Do you want to set a soft memory threshold? (y/n)?n
Do you want to use ipv4[1] ipv6[2] or both[3] in DNS requests?3

Запустим клиента.

sudo systemctl enable /opt/rubackup/etc/systemd/system/rubackup_client.service

В логе мы должны увидеть следующее:

[2024-09-11 12:40:19] Info: Try to check module: 'PostgreSQL universal' ...
[2024-09-11 12:40:19] Info: Execute OS command: /opt/rubackup/modules/rb_module_postgresql -t 2>&1
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Patroni node type for backup not set. Processing as a standalone node...
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Warning: Wrong value pg_probackup in the conf file
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Warning: /opt/pgpro/std-13/bin/pg_probackup doesn't exist
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Unable to work with engine pg_probackup
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Module version: 2.4.0.52c4136
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Initiate connection with database
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Connected to postgres
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: PostgreSQL version: 15.7
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: PostgreSQL data directory: /var/lib/postgresql/pgdata
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Enable to work with engine superb
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Module version: 2.4.0.52c4136
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Initiate connection with database
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Connected to postgres
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: PostgreSQL version: 15.7
[2024-09-11 12:40:19] Info: [2024-09-11 12:40:19] rb_module_postgresql[3042216] Info: Enable to work with engine base
[2024-09-11 12:40:19] Info: ... module 'PostgreSQL universal' was checked successfully

Лог означает, что проверка модуля PostgreSQL Universal выполнена успешно, для работы доступны подмодули (движки) Superb и PostgreSQL. Про работу с подмодулем pg_probackup и Superb можно прочитать в статье моего коллеги Обзор модуля PostgreSQL системы резервного копирования RuBackup (PosgreSQL, PostgresPRO, Superb).

Подмодуль postgresql — использует API СУБД PostgreSQL для выполнения резервного копирования с архивированием WAL.

Подмодуль pg_probackup — использует утилиту pg_probackup для выполнения резервного копирования СУБД PostgresPro.

Подмодуль superb — использует снапшоты (снимки файловой системы) для создания резервных копий с архивированием WAL.

На данный момент поддерживаются следующие версии PostgreSQL: 9.6, 10, 11, 12, 13, 14, 15, 16.

Можно начинать работу! Если в логе появляется ошибка, необходимо изменить настройки модуля:

Успешная установка модуля. На клиенте появился PostgreSQL Universal

Успешная установка модуля. На клиенте появился PostgreSQL Universal

Создание резервных копий модулем rb_module_postgresql

Поддерживаемые режимы резервных копий

Модуль поддерживает следующие режимы резервных копий:

  • Полная резервная копия (aka full бэкап),

  • Инкрементальные копии с режимами archive_wal, page, ptrack, delta. Режимы задаются параметром engine.

Подробнее про полную резервную копию

Полная копия содержит копию директории PGDATA и архивированных WAL-файлов. С таких копий начинается построение цепочек резервных копий. Чтобы выполнить полный бэкап, при создании правила в RBM нужно выбрать следующие настройки:

faa2fdb7e0a82365c2dcacd7ab8961dc.pngd434663cb876e1b2f707e2d84aa2b0b2.png

Далее запускаем задачу:

91ec9e1ab1c44e1a7cc7f4e8c554c07a.png

Вуаля! Мы сделали полный бэкап. Можем выполнить рестор во временную директорию или рестор с деплоем. Для этого необходимо в rbm перейти в «Репозиторий» и нажать «восстановить». Последний установит бэкап в директорию PGDATA и выполнит перезапуск кластера PostgreSQL. Архивированные WAL распакуются в директорию из archive_command и автоматически применятся PostgreSQL.

b0b0ce9183659bc48616954b3a8a53fe.png

Подробнее про инкрементальные режимы (archive_wal, page, ptrack, delta)

Инкрементальные режимы позволяют сохранять изменения с момента последнего создания полной резервной копии. Эти режимы имеют главное преимущество — меньший размер резервных копий, — и зачастую их создание происходит быстрее.

  • archive_wal — режим, при котором забираются только архивированные WAL файлы. При этом в конфигурации PostgreSQL должны быть настроены archive_mode, archive_command и restore_command.

  • page — режим, при котором забираются измененные страницы PostgreSQL. Страницы высчитываются при помощи ванильной утилиты pg_waldump.

  • ptrack — режим block-level инкрементального бэкапа. Позволяет отслеживать изменения страниц на лету. Для использования режима необходимо выполнить патч из репозитория https://github.com/postgrespro/ptrack.

  • delta — режим инкрементального бэкапа, при котором забираются изменившиеся на block-level данные. Изменения высчитываются при помощи внутренней утилиты rbfd


Например, создадим инкрементальное правило с режимом archive_wal:

ea10b5637023a28abd8b04cd8acb3a21.pngb48f3f7a7ec9499cc051dd2d8aaea53b.png

Сделаем резервную копию еще дважды. Первая копия будет содержать полный бэкап, вторая и третья — архивные WAL-файлы.

f9e97991e8f5698dacdbe7b88fefa94c.png

В репозитории находится цепочка из трех резервных копий. Первая — полный бэкап, вторая и третья — инкрементальные archive_wal копии. Как мы видим, за основу был взят полный бэкап.

b3c2e5c168023a61150158e9be498f8d.png

Аналогично можно выполнить рестор во временную папку или рестор с деплоем.

7341e5a5487e32198b4f5e614bd74636.png

Как мы видим, будет восстанавливаться цепочка из трех резервных копий:

703fb556b6c67a0ce5c77c5fcb0ff53b.png

Сейчас существует ограничение на создание цепочки копий с разными инкрементальными режимами. Если инкрементальные режимы будут не совпадать, модуль выполнит полную резервную копию.

Заключение

В этой статье мы рассмотрели процесс установки и настройки RuBackup и окружения, выполнили тестовые резервные копии, восстановили их. Подробнее о модуле можно найти в официальной документации.

Мы достаточно часто выпускаем обновления. Они затрагивают как новую функциональность, так и фикс багов. В дальнейших версиях планируем улучшить клиентский опыт работы с модулем, скорость создания резервных копий, работу с Patroni и тонкими настройками.

© Habrahabr.ru