Использование WAL-G для: 1) s3 хранилища Yandex Cloud 2) NFS 3) совместно с Patroni
1. Настройка WAL-G для работы с s3 хранилищем Yandex Cloud
Данный блок настроек необходим для работы с S3 в качестве хранилища данных. В случае, если в качестве места хранения бэкапов используется файловая система - проделайте инструкции из соответствующего раздела.
Работа с YC
- Создаём сервисный аккаунт для работы с бакетом без дополнительных ролей в каталоге (имя произвольное):
- Создаём бакет для хранения бэкапов:
- Выдаём сервисному аккаунту, созданному ранее, права storage.uploader на созданный бакет:
На этом этапе работа с YC завершена.
Создаём конфигурационный файл для wal-g и выдаём права пользователю postgres на работу с ним:
wal-g s3 configuration
Объяснение параметров из блока выше:
PGDATA - каталог, содержащий данные СУБД;
AWS_ACCESS_KEY_ID - идентификатор пользователя, созданного в YC (см инструкцию выше);
AWS_SECRET_ACCESS_KEY - пароль (ключ) пользователя, созданного в YC (см инструкцию выше);
WALE_S3_PREFIX - имя бакета, созданного в YC (см инструкцию выше), для сохранения данных при помощи утилиты wal-g;
AWS_ENDPOINT - указание конечного сервиса, на базе которого создан бакет
AWS_S3_FORCE_PATH_STYLE - параметр для включения адресации в стиле пути (например, http://s3.amazonaws.com/BUCKET/KEY) при подключении к S3-совместимому сервису, который не поддерживает URL-адреса бакетов в стиле поддомена (например, http://BUCKET.s3.amazonaws.com/KEY);
AWS_REGION - регион бакета, созданного в YC (см инструкцию выше);
2. Настройка WAL-G для работы с NFS
Данный блок настроек необходим для работы с NFS в качестве хранилища данных. В случае, если в качестве места хранения бэкапов используется s3 хранилище - проделайте инструкции из соответствующего раздела.
wal-g nfs configuration
Объяснение параметров из блока выше:
WALG_FILE_PREFIX - каталог, примонтированный в систему из NFS сервера, в котором будут хранится бэкапы;
WALG_COMPRESSION_METHOD - определяет метод сжатия, который будет использоваться для резервных копий (поддерживаемые значения: lz4, brotli, gzip, xz, lzo)
WALG_DELTA_MAX_STEPS - определяет максимальное количество шагов (инкрементальных бэкапов) между полными резервными копиями
PGHOST - определяет хост PostgreSQL, с которым будет взаимодействовать WAL-G
PGDATA - определяет каталог, содержащий файлы данных СУБД
Особенности настройки WAL-G
В примерах выше были использованы ряд настроек (например, "PGHOST": "/var/run/postgresql/.s.PGSQL.5432", или "AWS_REGION":"ru-central1" и т.д.) . Это полностью настраиваемые параметры, которые необходимо выставить согласно конкретной инсталляции, типу и версии СУБД и т.д.
3. Настройка Patroni для работы с WAL-G
Для работы с кластером будет использован кастомный метод (в примере ниже - wal-g). Размещаем листинг из кода ниже в блоке bootstrap конфигурационного файла (в данном примере он располагается в каталоге /opt/tantor/etc/patroni/<имя узла>.yml) patroni:
patroni bootstrap configuration
В блок dsc > postgresql > parameters добавляем следующие настройки:
patroni dsc postgresql parameters configuration
Создаём скрипт для кастомной загрузки c содержимым:
patroni custom bootstrap script
Добавляем в скрипт следующее содержимое:
patroni custom bootstrap script
Известные особенности, ошибки и необходимые доработки
- Кластер patroni всегда стартует с tl = 2;
- После запуска кластера wal-g начинает сразу же писать WAL-файлы , используя выбранный метод бэкапирования. В случае полного выхода из строя всего кластера (пример rm -rf по каталогу PGDATA) до создания полного бэкапа patroni не сможет собрать кластер с нуля, используя WAL файлы. Узлы будут находится в статусе ожидания лидера. В данном кейсе необходимо удаление WAL-файлов, после чего требуется повторный запуск patroni.
- В случае выхода из строя узла, имеющего роль "лидер" (пример выполнения функции переключения лидера при помощи patronictl switchover ) одна из реплик берёт на себя эту роль (ожидаемое поведение), в то время как другая переходит в состояние archive recovery (нестандартное поведение);
- Восстановление данных и наливка WAL-журналов всегда происходит при помощи wal-g (т.е. с NFS хранилища или S3 бакета), вне зависимости от доступности узла мастера.