Archive mode postgresql: How to enable archive mode in PostgreSQL
Содержание
PostgreSQL — Как включить архивацию логов WAL
Коллеги всем привет.
В сегодняшней статье мы поговорим о том, как включить архивацию журнала WAL в PostgreSQL.
Журналы WAL переводятся как «Write Ahead Log». Включение архивирования журнала событий — очень важный шаг, если вы хотите защитить данные любой важной базы данных. Простыми словами, архивирование — это процесс создания резервной копии всех транзакций, которые происходили в базе данных, чтобы впоследствии можно было восстановить базу данных на любой момент времени в случае серьезного сбоя.
В PostgreSQL абсолютно любая выполняемая транзакция сначала записывается в файл журнала WAL, а затем применяется к реальным файлам данных базы данных. Пока вы продолжаете добавлять и изменять данные в базе данных, файлы WAL продолжают создаваться. В терминах PostgreSQL копирование журналов, сгенерированных WAL, называется архивированием, которое используется для резервного копирования и восстановления, восстановления на определенный момент времени и репликации базы данных на сервер резервного копирования в случае чрезвычайной ситуации.
Содержание статьи:
- Проверка состояния архивного режима.
- Создание каталога для архивных журналов WAL.
- Включить режим архивации.
- Перезапуск базы данных.
- Чек.
- Сжать журналы WAL перед архивированием.
1. Проверка состояния режима архива.
Архивация журналов WAL в PostgreSQL управляется параметром archive_mode . Параметр может иметь два значения: включено или выключено. Чтобы проверить, включено ли архивирование, мы можем использовать sql-запросы.
sql> SHOW archive_mode;
Или
sql> ВЫБЕРИТЕ имя, установив ИЗ pg_settings ГДЕ имя, например «архив%»;
Как видно из обоих результатов, режим архивации у нас отключен.
2. Создание каталога для архивных журналов WAL.
Перед тем, как включить архивирование журналов WAL, нам сначала нужно создать где-нибудь каталог, куда наш PostgreSQL будет помещать журналы WAL. Обычно я создаю этот каталог рядом с каталогом, в котором развернута наша база данных. Каталог будет называться pg_wal_archive .
$. mkdir -p /app/postgresql/pg_wal_archive
3. Включите режим архивации.
После того, как мы создали каталог для наших журналов WAL, теперь мы можем включить режим архивирования на основе базы данных. Есть два важных параметра для включения режима архива в PostgreSQL: первый параметр называется archive_mode , а второй — archive_command .
Параметр archive_mode необходимо изменить с выключенного на включенный. В параметре archive_command должна быть указана локальная команда, которая будет выполняться для архивирования завершенного сегмента журнала WAL. Вам нужно добавить эти параметры в основной файл конфигурации с именем postgresql.conf.
archive_mode = on
archive_command = 'cp -i %p /app/postgresql/pg_wal_archive/%f'
Переменные являются статическими, поэтому после внесения изменений необходимо перезапустить базу данных.
4. Перезапуск базы данных.
После изменения параметров архивирования необходимо перезапустить базу данных, чтобы изменения вступили в силу.
$. pg_ctl перезапуск
5. Проверьте.
После перезапуска базы данных проверьте результат. Первый — выполнить sql-запрос для проверки параметров архивации.
sql> SELECT имя, настройка FROM pg_settings WHERE имя, например «archive%»;
Как видите, для параметра archive_mode установлено значение на , что означает, что архивирование журналов WAL включено.
Во-вторых, мы проверим, как мы переносим журналы WAL в созданный нами каталог.
$. cd /app/postgresql/pg_wal_archive
Как видите, журналы WAL успешно переносятся в созданный нами каталог.
6. Сжатие журналов WAL перед архивированием.
Каждый журнал WAL имеет размер 16 мегабайт, и если журналов будет много, место на диске быстро закончится. Мы можем решить эту проблему, заархивировав каждый журнал WAL перед его отправкой в наш каталог. Для того, чтобы это сделать, нам нужно изменить значения archive_command на .
с:
cp -i %p/app/postgresql/pg_wal_archive/ %f
до:
Gzip < %p>/app/postgresql/pg_wal_archive/ %f
После внесения изменений не забудьте перезапустить базу данных.
Всем спасибо, надеюсь, что моя статья вам чем-то помогла.
Архивирование WAL в PostgreSQL — OpsDash
Все об архивировании WAL в PostgreSQL.
PostgreSQL поставляется с инструментами, необходимыми для резервного копирования,
инкрементное/непрерывное резервное копирование и восстановление на определенный момент времени из резервных копий.
Архивация файлов WAL является фундаментальной операцией, которая упрощает эти функции.
Читайте дальше, чтобы узнать больше о том, что это такое.
Что такое WAL?
WAL является сокращением от Журнал упреждающей записи .
WAL используются почти во всех современных системах СУБД для обеспечения надежного и атомарного
транзакции. Проще говоря, любая транзакция, выполняемая в базе данных, является первой.
записывается как файл WAL, а затем применяется к фактическим файлам данных таблицы на диске.
Файлы WAL строго последовательны. Это делает последовательность файлов WAL «воспроизведением».
журнал» изменений.
Концепция аналогична AOF в Redis, binlog в MySQL и oplog в MongoDB.
Так это настоящие файлы? Да. Они живут в $PGDATA/pg_xlog
, где
$PGDATA
— это каталог данных, например /var/lib/postgresql/9.6/main
. Они есть
бинарные файлы по 16 МБ каждый.
Не будут ли они накапливаться? Будут, если вы не укажете Postgres, когда
очистить. Вы можете ограничить эти файлы по номеру ( wal_keep_segments
) и/или
общий размер ( max_wal_size
).
Архивирование WAL
Поскольку вы продолжаете изменять данные в базах данных на сервере, файлы WAL сохраняются.
генерируются (и отбрасываются через некоторое время).
Если вы сохраните копию каждого созданного файла WAL, вы сможете воспроизвести его
весь набор изменений на другом сервере. Делать это в режиме реального времени
более известный как репликация. Вы можете прочитать больше о репликации PostgreSQL
здесь.
Сохранение всех сгенерированных файлов WAL в безопасном автономном месте по существу становится
инкрементная резервная копия .
[Примечание: технически существует одна последовательность файлов WAL для одного
экземпляр работающего сервера PostgreSQL. Файлы WAL будут содержать все
изменения во всех базах данных, управляемых этим экземпляром.]
В терминах PostgreSQL копирование сгенерированных файлов WAL называется архивированием ,
и заставить сервер прочитать файл WAL и применить его, называется восстановление .
pgDash
Узнать больше
Углубленный мониторинг PostgreSQL
Команда архивирования
Поскольку PostgreSQL не знает, как вы хотите архивировать файлы WAL, вы
предоставить сценарий. PostgreSQL будет вызывать этот скрипт по мере того, как будет выполняться каждый WAL.
файл готов к архивации. Сценарий должен его обработать (обычно копирует
в безопасное место) и сообщить, было ли это успешным, с помощью кода выхода
(то есть выход 0 из вашего скрипта при успешном завершении).
После того, как сценарий успешно обработал файл WAL, сервер может
удалите или переработайте его, когда сочтете нужным.
Сценарий задается с помощью параметра конфигурации archive_command
.
(документы).
Вот несколько примеров:
# Скопируйте файл в безопасное место (например, на смонтированный том NFS) archive_command = 'cp %p /mnt/nfs/%f' # Рекомендуется не перезаписывать файлы archive_command = 'проверить! -f /mnt/nfs/%f && cp %p /mnt/nfs/%f' # Скопировать в корзину S3 archive_command = 's3cmd поместите %p s3://BUCKET/путь/%f' # Скопировать в корзину Google Cloud archive_command = 'gsutil cp %p gs://BUCKET/path/%f' # Внешний скрипт archive_command = '/opt/scripts/archive_wal %p'
При написании собственного сценария помните о нескольких вещах:
- В случае сбоя сценария он будет вызываться снова и снова до тех пор, пока не сработает.
Нет никаких задержек между повторными попытками или функций остановки после N повторных попыток. - Файлы имеют размер 16 МБ и обычно хорошо сжимаются.
- Скрипт будет вызываться последовательно, параллелизма нет.
- Не рекомендуется перезаписывать целевые файлы, если они существуют.
- Вы должны рассматривать файл, который PostgreSQL передает вам, как доступный только для чтения. Если вы
хотите сжать его, не изменяйте оригинал. - Скрипт будет запущен от имени пользователя
postgres
. Убедитесь, что этот пользователь
имеет необходимые права на чтение/запись для соответствующих каталогов.
Уровень WAL
По умолчанию файлы WAL содержат только необходимую информацию
для восстановления после сбоя или немедленного отключения. Это минимальный уровень
WAL.
Следующий уровень архив
(или реплика
в версии 9.6 и выше). Настройка
Уровень WAL до архив
или выше заставляет сервер включать достаточно информации для
разрешить архивирование (и восстановление) файлов WAL.
Уровень после этого называется hot_standy
(также сопоставляется с репликой
в
версия 9.6 и выше) и содержит информацию, необходимую для запуска только для чтения
запросы на резервный сервер.
С последним уровнем логический
можно извлечь наборы логических изменений
из ВАЛ.
Уровень WAL — это параметр конфигурации, называемый wal_level
. Для наших нужд,
нам нужно установить это как минимум на архив
. PostgreSQL отказывается запускаться
если вы запрашиваете архивацию, но wal_level
меньше этого.
# Уровень WAL должен быть архивным или выше. wal_level = archive
Время ожидания архива
Если у вашего сервера PostgreSQL сегодня спокойный день с низкой скоростью транзакций,
заполнение одного полного файла WAL может занять некоторое время. Из операций
однако, как правило, неплохо иметь хотя бы один файл WAL.
резервное копирование каждые X минут (или часов или дней, в зависимости от ваших настроек).
Параметр archive_timeout
можно использовать, чтобы PostgreSQL генерировал в
по крайней мере один файл WAL каждый период времени «archive_timeout», даже если он пуст.
# Убедитесь, что существует хотя бы один файл WAL для каждой длительности "archive_timeout". archive_timeout = 1h
Управление файлами WAL
PostgreSQL предлагает несколько рычагов для управления количеством файлов WAL, которые лежат
примерно в каталоге pg_xlog
.
Настройки min_wal_size
и max_wal_size
ограничивают общее количество
размер файлов WAL. Наличие минимального лимита позволяет перерабатывать старые файлы
(они переименовываются в первую очередь). Верхний предел является мягким пределом, поскольку сервер
может безопасно удалить только те файлы, которые были успешно заархивированы.
wal_keep_segments
можно использовать для установки минимального ограничения на количество
Файлы WAL в pg_xlog
. Это в основном для обеспечения медленного или прерывистого режима ожидания.
серверы.
# Это мягкий верхний предел общего размера файлов WAL. max_wal_size = 1 ГБ # Держите под рукой хотя бы эти файлы WAL (сегменты). wal_keep_segments = 10
Настройки архивации
Наконец, есть параметр archive_mode
, который, очевидно, должен быть установлен на
на
для архивации на работу. Вот важные настройки для архивации,
округлено:
# Уровень WAL должен быть архивным или выше. wal_level = архив # Это мягкий верхний предел общего размера файлов WAL. max_wal_size = 1 ГБ # Держите под рукой хотя бы эти файлы WAL (сегменты). wal_keep_segments = 10 # Режим archive_mode должен быть включен для архивации. архив_режим = вкл. # Эта команда вызывается для каждого архивируемого файла WAL. archive_command = '/opt/scripts/archive_wal %p' # Убедитесь, что существует хотя бы один файл WAL для каждой длительности "archive_timeout".архив_таймаут = 1 час
Восстановление WAL
Восстановление WAL обычно выполняется в контексте восстановления из резервной копии,
выполнение восстановления на момент времени (PITR) или потоковой репликации. это немного
слишком обширно, чтобы осветить его в этом же сообщении в блоге, поэтому нам просто нужно сделать это
как еще один пост — следите за обновлениями!
Вы можете прочитать о потоковой репликации в другом нашем блоге под названием
«Все о потоковой репликации PostgreSQL».
Мониторинг архивации WAL
PostgreSQL предоставляет сборщик статистики, который можно запрашивать для проверки
состояние архивации WAL. В частности, вы можете использовать pg_stat_archiver
чтобы увидеть количество успехов и неудач WAL.
С помощью OpsDash вы можете быстро начать мониторинг вашего PostgreSQL
серверов и получить мгновенную информацию о ключевых показателях производительности и работоспособности
включая архивирование WAL.
Добавление оповещения на основе порогового значения к метрике количества сбоев архива выполняется быстро.