В настоящее время я создаю NFS и монтирую его на специальном сервере, который делает фактические резервные копии и загружает его на s3. Меня больше всего беспокоит то, что эта простая задача кажется мне слишком сложной. Я планирую задание cron для запуска резервного копирования в нерабочее время, но все же хочу оптимизировать и улучшить свою стратегию.
В настоящее время сценарий на сервере резервного копирования будет просто находить файлы в общей папке NFS в определенные даты, архивировать их все и использовать команду aws sync для загрузки в s3 glacier. При следующем запуске скрипт получает список объектов aws s3 и пропускает поиск файлов для этих дат (дата является частью имени файла архива, поэтому это очень быстрый настраиваемый механизм синхронизации)
Проверка использования сети во время команды tar через NFS никогда не превышает 200 Мбит / с, и это выполняется через LAN через коммутатор 1 Гбит. Загрузка в s3 ограничена конфигурацией aws cli. Так что сценарий очень сдержанный, чего я и хочу. И все же что-то подсказывает мне, что, возможно, мне стоило просто использовать aws sync для резервного копирования данных каждый день и не пытаться изобретать велосипед. Дополнительная сложность в поиске и tar, а также дополнительная логика синхронизации могут привести к некоторым непредвиденным ошибкам просто из-за чрезмерной сложности.
У меня вопрос: каковы недостатки того, что я делаю по-своему (меня больше всего беспокоит использование NFS для тяжелых операций резервного копирования с чтением - плохая практика?) И добавление всей этой дополнительной логики.
Но если я просто перебью его для простоты и использую aws sync для всех файлов, это займет очень много времени для терабайт данных, а также приведет к скачку ЦП на сервере резервного копирования и из-за огромного объема чтения, пика ЦП на производстве с общим ресурсом NFS. Полагаю, я мог бы попробовать синхронизировать определенные даты и сохранить локальный файл с теми датами, которые я уже скопировал.
Был бы признателен за мудрость здесь :)
Программы синхронизации, такие как aws sync или rsync, просты в использовании, но содержат много метаданных. Большое количество файлов вызывает невероятное количество операций ввода-вывода метаданных.
Ваша команда tar настраивает синхронизацию в соответствии с тем, что вам нужно. Только проверка метаданных mtime или обход деревьев с датами в имени будет более эффективным. Но да, заказ означает, что вы должны убедиться, что он правильный.
Резервные копии на уровне блоков не беспокоят файлы, они создают резервную копию всего тома. Однако инкрементное резервное копирование и восстановление отдельных файлов сложнее. Может помочь моментальный снимок (Linux LVM, ZFS). Но вам нужно сделать это на устройстве хранения, а не на общей папке NFS.
Какой бы ни была реализация, всегда самое важное - это восстановление.
Протестируйте восстановление. Определите набор файлов, установите таймер на целевое время восстановления и сделайте это. Выборочная проверка: список файлов полный и имеет хорошую целостность. Особенно проверяйте крайние случаи, такие как первый и последний файлы дня.