Резервное копирование
В Tarantool используется архитектура хранения с добавлением (append-only): данные дозаписываются в файлы, но никогда не перезаписываются. Сборщик мусора Tarantool удаляет старые файлы после контрольной точки. Работу сборщика мусора можно предотвратить или отсрочить настройками демона контрольных точек. Резервное копирование можно выполнять в любое время с минимальной нагрузкой на производительность базы данных.
Для резервного копирования в определенных ситуациях используются две функции:
- box.backup.start() уведомляет сервер о необходимости приостановить удаление устаревших резервных копий, и возвращает таблицу с именами файлов-снимков и vinyl-файлов, которые следует скопировать.
- box.backup.stop() уведомляет сервер о возможности возобновить нормальную работу.
Это описание относится к установкам, в которых используются только in-memory таблицы.
Последний файл-снимок является резервной копией всей базы данных; а WAL-файлы, созданные после него - инкрементными. Поэтому резервное копирование сводится к копированию последнего файла-снимка и следующих за ним WAL-файлов.
-
Используйте
tarдля создания (возможно, сжатой) копии последних файлов .snap и .xlog в директориях snapshot.dir и wal.dir. -
Если включена политика безопасности, зашифруйте .tar-файл.
-
Скопируйте .tar-файл в безопасное место.
Восстановление базы данных сводится к извлечению .tar-файла и перемещению его содержимого обратно в
директории snapshot.dir и wal.dir.
Vinyl хранит свои файлы в директории vinyl_dir и создает для каждого спейса отдельную поддиректорию. Процессы создания дампов и уплотнения являются append-only - они создают новые файлы, а старые не перезаписывают. Сборщик мусора Tarantool может удалять старые файлы после очередной контрольной точки.
Для создания смешанной (когда в базе используются и memtx, и vinyl) резервной копии:
- Выполните функцию
box.backup.start() на
административной консоли. Будет возвращен список файлов для резервного копирования,
а сборщик мусора для них приостановлен до следующего вызова функции
box.backup.stop(). - Скопируйте файлы из списка в безопасное место. В список войдут файлы-снимки memtx, а также run- и index-файлы vinyl в состоянии, соответствующем последней контрольной точке.
- Выполните функцию box.backup.stop(), чтобы сборщик мусора мог продолжить работу в обычном режиме.
Репликация данных помогает при резервном копировании и балансировке.
Поэтому резервное копирование сводится к тому, чтобы убедиться, что любая реплика актуальна, и выполнить на ней холодное резервное
копирование. Поскольку все остальные реплики продолжают работать, с точки зрения конечного пользователя это не является холодным
резервным копированием. Такое копирование можно выполнять регулярно с помощью планировщика cron или файбера Tarantool.
В процессе работы системы необходимо сохранять изменения, внесенные со времени последнего холодного резервного копирования.
Для этого нужна утилита для копирования файлов (например, rsync), которая позволит удаленно копировать только изменившиеся части WAL-файла, а не весь файл целиком.
Если использовать обычную утилиту для копирования целых файлов, то потребуется создавать новые файлы-снимки или WAL-файлы при каждом изменении, чтобы копировать только новые файлы.