Как эффективно использовать S3 для резервного копирования файлов?

42

Я понимаю, как rsync работает на высоком уровне, но есть две стороны. С S3 нет демона, о котором можно было бы говорить - ну, есть, но в основном это просто HTTP.

Есть несколько подходов.

s3rsync (но это только болты на rsync для s3). Непосредственная. Не уверен, что я хочу зависеть от чего-то третьего лица. Я бы хотел, чтобы s3 только что поддержал rsync.

Существуют также некоторые rsync-клоны, такие как двуличие, которые утверждают, что поддерживают s3 без использования болтов. Но как это может сделать это? Они хранят индексный файл локально? Я не уверен, как это может быть так эффективно.

Я, очевидно, хочу использовать s3, потому что это дешево и надежно, но есть вещи, для которых rsync является инструментом, например, резервное копирование гигантского каталога изображений.

Какие варианты здесь? Что я потеряю, используя duplicity + s3 вместо rsync + s3rsync + s3?

Джейми Сирович
источник
4
S3 дешево? Это новость для меня. Надежная? Конечно, но не дешево.
EEAA
5
Что ж, s3 составляет $ 0,13 / ГБ или меньше, так как вы храните больше или хотите меньше избыточности. Быстрый поиск показывает evbackup.com для rsync хранилища. Гораздо дороже. Что дешевле и имеет некоторый уровень избыточности?
Джейми Сирович
Если бы я разработал rsync, он бы поддерживал плагины, чтобы можно было добавлять новые протоколы (например, s3: //). Однако в настоящее время rsync не поддерживает это, поэтому я не верю, что rsync можно использовать напрямую для резервного копирования на S3.
Эдвард Фальк
Следующая проблема заключается в том, что я не думаю, что S3 хранит метаданные, такие как владение или разрешения, поэтому использование, например, «aws s3 sync» для создания резервных копий будет работать, но, вероятно, не подходит для полномасштабного резервного копирования файловой системы Unix, так как слишком много данных будет потеряно при восстановлении. Я также думаю, что символические ссылки, жесткие ссылки и другие специальные файлы будут потеряны.
Эдвард Фальк

Ответы:

39

Поскольку на этот вопрос был дан последний ответ, появился новый инструмент командной строки AWS aws.

Он может синхронизироваться , как rsync, между локальным хранилищем и s3. Пример использования:

aws s3 sync s3://mybucket /some/local/dir/

Если среда Python вашей системы настроена правильно, вы можете установить клиент AWS, используя pip:

pip install awscli
Дэн Приттс
источник
1
По моему опыту, это загружает все, а не просто дельта изменений. Например, я отправлял статический сайт на сервер разработки с помощью rsync, и это занимало в среднем 1 секунду, и только изменения происходили по моему медленному соединению. aws s3 syncс другой стороны, заняло около 5 минут, повторная передача каждого файла.
рибред
2
Я полагаю, что это не работает, но в документах говорится: «Локальный файл потребует загрузки, если размер локального файла отличается от размера объекта s3, время последнего изменения локального файла новее, чем время последнего изменения объекта s3 или локальный файл не существует с указанным интервалом и префиксом. " Убедитесь, что у вас установлена ​​последняя версия aws-cli - если вы можете воспроизвести это, отправьте им сообщение об ошибке на github. Они были отзывчивы, когда я подал ошибку недавно.
Дэн Притц
Команда должна быть: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S
1
Карлос, я не уверен, в чем твоя точка зрения. Если вы хотите сказать, что мой пример команды неверен, мы оба правы. Синхронизация s3 может работать в любом направлении.
Дэн
Поздно к вечеринке, но вот что происходит: при загрузке на S3 применяются правила быстрой проверки (загрузка, если размер или дата изменились). При загрузке нет правил быстрой проверки, и все скачивается безоговорочно.
Эдвард Фальк
16

У инструмента s3cmd отличный syncвариант. Я использую его для синхронизации локальных резервных копий, используя что-то вроде:

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

Это --skip-existingозначает, что контрольная сумма не пытается сравнить существующие файлы. Если файл с таким именем уже существует, он просто быстро пропустит его и продолжит работу. Есть также --delete-removedопция, которая удалит файлы, не существующие локально, но я хочу сохранить на S3 даже те, которые я очистил локально, поэтому я не использую это.

Ник Коттрелл
источник
5

Не хочу никому говорить, что делать, но могу ли я помахать флагом за двуличие? или другое решение для инкрементного резервного копирования. Синхронизация все очень хорошо, но если вы делаете резервное копирование ночью, что произойдет, если вы не заметите проблему в течение двух дней? Ответ. Уже слишком поздно, ваши локальные файлы и резервная копия являются зеркальным отражением друг друга, и ни у одной из них нет нужных вам данных. Вы действительно должны рассмотреть возможность создания инкрементных резервных копий или моментальных снимков, чтобы можно было восстановить данные в определенный момент времени, а для эффективного выполнения этого вам нужны инкрементные резервные копии. И если потеря ваших данных - это сценарий конца света, храните копии у разных провайдеров, о которых вы никогда не узнаете, тогда они могут быть потеряны, взломаны, кто знает.

Я использую двуличность и s3, это хорошо, но процессор интенсивно. Но это делает инкрементные резервные копии. В чрезвычайной ситуации, когда вы хотите восстановить каталог или определенный файл, как это было в прошлую среду или в январе прошлого года, без восстановления других файлов в том же разделе, вам нужны инкрементные резервные копии и инструмент, в котором вы можете запросить только те файлы, которые вам нужны.

У меня есть cron, который заполняется каждые x месяцев, в ином случае - инкрементный и удаляет старше x месяцев, чтобы уменьшить объем хранилища s3, наконец, делает состояние сбора, так что каждое утро мне отправляют по почте со статусом. Вы должны регулярно следить за этим, чтобы вы заметили, когда ваша резервная копия не работает.

Для хранения локальных подписей требуется значительное локальное временное пространство, поэтому тщательно настройте временную папку. Это резервные копии / MNT, исключая различные каталоги внутри / MNT. Это хорошо для резервного копирования данных, для системных разделов используйте инструменты для создания образов amazon или моментальных снимков.

PHP скрипт:

# Duplicity Backups

$exclude  = "--exclude /mnt/ephemeral ".
            "--exclude /mnt/logs ".
            "--exclude /mnt/service ".
            "--exclude /mnt/mail ".
            "--exclude /mnt/mysql ";

$key = "PASSPHRASE=securegpgpassphrase";

$tmp = "/mnt/mytempdir";

system("mkdir -p $tmp");

# Amazon

$aws = "AWS_ACCESS_KEY_ID=xxxxxx ".
       "AWS_SECRET_ACCESS_KEY=xxxxxx ";

$ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs";
$target = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Clean + Backup

system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target");
system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target");
system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target");
system("$key $aws /usr/bin/duplicity $ops collection-status $target")
Джек
источник
1
включите управление версиями для корзины s3, тогда она сохранит старые копии
mcmillab
3

S3 - это система хранения объектов общего назначения, которая обеспечивает достаточную гибкость для проектирования того, как вы хотите ее использовать.

Я не уверен по вашему вопросу о проблемах с rsync (кроме индексации) или о проблемах со сторонним инструментом, с которыми вы столкнулись.

Если у вас большой набор хорошо структурированных файлов, вы можете запустить несколько синхронизаций s3 в своих подпапках.

Приятные люди в Amazon также позволяют вам выполнять импорт / экспорт с вашего портативного жесткого диска для передачи больших файлов на S3 или EBS - http://aws.amazon.com/importexport/, который вы можете использовать для первой загрузки.

Ознакомьтесь с рекомендациями Amazon s3 здесь - http://aws.amazon.com/articles/1904

Что касается различных инструментов, попробуйте их и посмотрите, что работает лучше для вас. Что касается ценообразования, то снижается стоимость резервирования, если она соответствует вашим потребностям - http://aws.amazon.com/s3/pricing/

Общая рекомендация - иметь быстрый многоядерный процессор и хороший сетевой канал.

ОБНОВЛЕНИЕ: упоминание о контрольной сумме на S3

Относительно S3 хранит данные в парах ключ-значение, и нет концепции каталогов. S3sync проверяет контрольную сумму (S3 имеет механизм для отправки контрольной суммы в качестве заголовка для проверки - заголовок Content-MD5). Лучшие практики связывают целостность данных, в ней есть подробности. S3 позволяет отправлять / проверять и получать контрольные суммы. Есть много людей, делающих инкрементные резервные копии с двуличностью. Несмотря на то, что rsync не запущен на S3, вы можете делать контрольные суммы, как я упоминал здесь.

rsync - проверенный инструмент, и большинство современных инструментов используют один и тот же алгоритм или библиотеку rsync или вызывают rsync извне.

Chida
источник
1
Я не понимаю, как это отвечает на вопрос. Я спрашивал, как двуличность справляется с тем, что делает rsync без демона на другой стороне. У него нет возможности даже получить контрольную сумму, или, может быть, это так, но тогда как он будет постепенно обновлять файлы?
Джейми Сирович
ХОРОШО. Итак, вы говорите, что Duplicity использует этот хэш от S3, но он также утверждает, что работает по FTP. FTP не имеет механизма хеширования. Я склонен ошибаться и использовать «проверенные» инструменты. Rsync доказано, что да, но он не будет выполнять резервное копирование s3 без дополнительного сервиса s3 s3rsync. Я немного боюсь двуличия, но у него более широкая привлекательность протокола, если я могу получить некоторый уровень rsync-подобной функциональности с s3 без упомянутой вспомогательной службы. Я просто не понимаю, насколько хорошо это работает (и, возможно, по-разному с различными протоколами). Как, черт возьми, это делает синхронизацию FTP? :)
Джейми Сирович
@JaimieSirovich Проверьте это и посмотрите. Если бы вы это сделали, вы бы знали, что Duplicity создает файлы «манифеста» за меньшее время, чем требовалось, чтобы вы набрали все эти комментарии о том, что он может делать.
ceejayoz
3

В качестве альтернативы вы можете использовать minio client aka mc. Команда 'mc mirror' сделает эту работу.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • клиент mc: minio
  • share / sharegain: локальный каталог
  • s3: псевдоним для https://s3.amazonaws.com
  • MyS3Bucket: мой удаленный S3 bucket
  • share / sharegain: мой объект на s3

Вы можете написать простой скрипт как cronjob, который будет поддерживать синхронизацию с периодическим интервалом.

Надеюсь, это поможет.

Атула
источник
Также есть -wфлаг, который будет использоваться fsnotifyдля отслеживания изменений. Его можно легко настроить как системный сервис или аналогичный.
Алькар
2

Я не уверен, что true rsync подходит для Amazon.

Насколько я понимаю, стандартный алгоритм rsync означает, что клиент вычисляет хэши для каждого блока файла, а сервер вычисляет хэши для своей копии и отправляет эти хэши клиенту, что означает, что клиент может определить, какие блоки были изменены и нуждаются в загрузке.

Это создает две проблемы для Amazon в том, что многие хэши должны отправляться через Интернет, а также требуется вычислительная мощность для вычисления всех тех хешей, которые могут увеличить расходы Amazon - возможно, поэтому они оставляют это сторонним поставщикам, которые могут взимать дополнительную плату за эту функцию.

Что касается клонов, они, очевидно, хранят хэши где-то, и где-то может варьироваться в зависимости от клона. Они могут хранить хэши как отдельный объект для каждого файла в Amazon или как базу данных, хранящуюся в Amazon, или они могут хранить их локально и удаленно.

Есть преимущества и недостатки в том или ином случае. Если хеши хранятся удаленно в отдельных файлах, то их постоянное получение может быть дорогостоящим. Если хеши хранятся в базе данных удаленно, эта база данных может стать большой, и может быть дорогостоящим их постоянное получение и обновление. Если хеши хранятся локально, это помогает сократить расходы, но создает другие сложности и проблемы.

(Конечно, у Amazon есть другие сервисы, поэтому можно было бы хранить базу данных в Amazon DB)

Как пример, я попробовал один ранний клон rsync много лет назад. Это было написано не для того, чтобы принять во внимание структуру ценообразования Amazon, и он выдавал большое количество http-запросов для извлечения хэша каждого блока, и, поскольку Amazon взимал плату за каждое получение, это означало, что хотя часть моего счета на хранение резко упала, часть переноса раздулся.

Что я потеряю, используя duplicity + s3 вместо rsync + s3rsync + s3?

Вы теряете тот факт, что с rsync вы знаете, что сравниваете исходные файлы с файлами резервных копий. С двуличностью и другими клонами вы сравниваете ваши исходные файлы с хешем, который был взят при выполнении резервного копирования. Например, может быть возможен прямой доступ к S3 и замена одного из его файлов без повторного вычисления хэша или обновления базы данных хэша.

sgmoore
источник
0

После сравнения нескольких вариантов, упомянутых в этой теме, я решил перейти на S3fs. Это позволяет вам монтировать S3 как локальную файловую систему. Затем вы можете продолжить и использовать rsync так, как вы его уже знаете.

Это хороший учебник для начала: Amazon S3 с Rsync

Автор ранее использовал упомянутый s3sync, но затем переключился на опцию с S3Fs. Мне это нравится, потому что у меня также есть другие резервные папки, локально смонтированные через SSHFS.

Хендрик
источник
12
Опасность, Уилл Робинсон! Это действительно дорого, так как вы не получаете никаких преимуществ от связи rsync с низкой пропускной способностью - s3fs в конечном итоге прочитает (а затем запишет, если он изменится) весь файл, что означает, что Amazon выставит вам счет в два раза. Вместо этого рассмотрите возможность использования экземпляра EC2 и удаленного использования rsync по ssh. Передачи на S3 из экземпляра EC2 бесплатны, поэтому все, за что вы платите, это низкоскоростная связь rsync с вашего локального компьютера на экземпляр EC2. Запуск микроэкземпляра EC2 по требованию практически ничего не стоит.
Дэвид дал
2
Это! Есть много плохих советов для тех, кто не понимает rsync и S3 ...
Марк
Единственным недостатком этого является то, что теперь у вас есть микро-экземпляр для управления. Тривиально, если вы знаете, как, но барьер для входа для многих. С другой стороны, хранилище EBS, подключенное к EC2, составляет примерно половину цены за байт S3.
Дэн Притц
@DavidGiven Что если я напишу напрямую на смонтированные s3fs без использования rysnc, а затем управляю долголетием через жизненный цикл?
дальновидный