Ответ
Чтобы минимизировать потерю данных (снизить RPO — Recovery Point Objective) между бэкапами, необходимо использовать комбинацию подходов на разных уровнях:
-
Аппаратный уровень: RAID
- Использование массивов избыточных независимых дисков (RAID). RAID 1 (зеркалирование) дублирует данные на два или более диска. При отказе одного диска система продолжает работать со вторым без потери данных.
-
Уровень базы данных: Репликация и журналирование
- Write-Ahead Logging (WAL): Это фундаментальный механизм. Все изменения сначала записываются в журнал (WAL-файл) на диске, и только потом применяются к файлам данных. В случае сбоя, СУБД может восстановить своё состояние из журнала, гарантируя, что закоммиченные транзакции не будут потеряны.
- Репликация: Создание копий (реплик) базы данных на других серверах.
- Синхронная репликация: Транзакция не считается завершённой, пока не будет подтверждена и основной базой, и репликой. Это гарантирует нулевую потерю данных (RPO=0), но увеличивает задержку записи.
- Асинхронная репликация: Транзакция подтверждается сразу после записи на основной сервер, а на реплику данные передаются с небольшой задержкой. Это обеспечивает высокую производительность, но допускает минимальную потерю данных при отказе мастера.
-
Уровень бэкапов: Point-in-Time Recovery (PITR)
- Помимо полных бэкапов, необходимо настроить непрерывное архивирование WAL-файлов. Это позволяет восстановить состояние базы данных на любой момент времени, а не только на момент создания последнего бэкапа, эффективно закрывая "окно" между ними.
Пример настройки репликации в PostgreSQL:
-- На основном сервере (primary) в postgresql.conf:
wal_level = replica -- Уровень журналирования, достаточный для репликации
max_wal_senders = 3 -- Количество процессов, отправляющих WAL на реплики
archive_mode = on -- Включаем архивирование WAL для PITR
archive_command = 'cp %p /path/to/archive/%f' -- Команда для архивации
-- Для синхронной репликации:
synchronous_commit = on
synchronous_standby_names = 'replica_name' -- Имя реплики, подтверждения которой нужно ждать
Комбинация RAID, WAL, репликации и PITR создаёт многоуровневую защиту, которая сводит риск потери данных к минимуму.