Як можна ефективно використовувати S3 для поступового резервного копіювання файлів?


42

Я розумію, як rsync працює на високому рівні, але є 2 сторони. З S3 немає демона, про який можна говорити - ну є, але в основному це лише HTTP.

Існує кілька підходів.

s3rsync (але це просто підключення rsync до s3). Прямо. Не впевнений, що хочу залежати від чогось третьої сторони. Я хочу, щоб s3 просто підтримував rsync.

Існують також деякі "клони" rsync, такі як подвійність, які стверджують, що підтримують s3 без вказаного болту. Але як це зробити? Чи зберігають вони індексний файл локально? Я не впевнений, наскільки це може бути настільки ефективно.

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

Які тут варіанти? Що я втрачаю, використовуючи duplicity + s3 замість rsync + s3rsync + s3?


4
S3 - дешево? Це для мене новина. Надійний? Напевно, але не дешево.
EEAA

5
Ну, s3 - це $ 0,13 / gb або менше, оскільки ви зберігаєте більше або хочете менше резервування. Швидкий пошук виявляє 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. Вони були чуйними, коли я подав помилку деякий час тому.
Dan Pritts

Команда повинна бути: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S

1
Карлосе, я не впевнений, у чому твій погляд. Якщо ви хочете сказати, що моя команда прикладу неправильна, ми обидва праві. Синхронізація s3 може працювати в будь-якому напрямку.
Dan Pritts

Пізно на вечірку, але ось що відбувається: Під час завантаження на S3 застосовуються правила швидкої перевірки (завантажуйте, якщо розмір чи дата змінилися). Під час завантаження немає правил швидкої перевірки, і все завантажується беззастережно.
Едвард Фолк

16

Інструмент s3cmd має чудовий syncваріант. Я використовую його для синхронізації локальних резервних копій, використовуючи щось на кшталт:

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

Це --skip-existingозначає, що він не намагається перевірити суму порівняння існуючих файлів. Якщо вже є файл з таким ім'ям, він просто швидко його пропустить і рухатиметься далі. Також є --delete-removedваріант, який видалить файли, які не існують локально, але я хочу зберегти на S3 навіть ті, які я очистив локально, тому я не використовую це.


5

Не хочете нікому казати, що робити, але чи можу я розмахувати прапором для подвійності? або інше додаткове рішення резервного копіювання. Синхронізація - це все добре, але якщо робити резервну копію вночі, що станеться, якщо ви не помітите проблеми протягом двох днів? Відповідь: Занадто пізно, ваші локальні файли та резервна копія є дзеркалом один одного і не мають необхідних даних. Ви дійсно повинні розглянути додаткові резервні копії чи знімки, щоб ви могли відновитись до певного моменту та зробити це ефективно, вам потрібні додаткові резервні копії. І якщо втрата ваших даних - це кінець світового сценарію, то зберігайте копії у різних постачальників, як ніколи не знаєте, тоді можна загубитися, зламаний хто знає.

Я використовую duplicity і s3, його штрафом, але він є інтенсивним процесором. Але це робить додаткові резервні копії. У надзвичайних ситуаціях, коли ви хочете відновити dir або певний файл, як це було минулої середи або минулого січня, не відновлюючи інші файли на тому самому розділі, вам потрібні додаткові резервні копії та інструмент, де ви можете запитувати лише потрібні файли.

У мене є крон, який працює повноцінно кожні x місяці, інакше наростаючий і видаляє старше x місяців, щоб зменшити загальний обсяг пам’яті s3, нарешті, статус колекції зменшується, тому я щоранку отримую повідомлення зі статусом. Вам потрібно регулярно стежити за цим, щоб ви помітили, коли ваша резервна копія не працює.

Для збереження локальних підписів таким чином потрібно ретельно налаштувати темп реж. Це резервне копіювання / mnt, виключаючи різні dir всередині / 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 зовні.


1
Я не бачу, як це відповідає на питання. Я запитував, як двозначність вдається робити те, що робить rsync без демона з іншого боку. Він не має можливості отримати навіть контрольну суму, а може, і є, але як би поступово оновити файли?
Хаймі Сірович

ГАРАЗД. Отже, ви говорите, що Duplicity використовує цей хеш від S3, але він також стверджує, що працює над FTP. FTP не має механізму хешування. Я схильний помилятися з безпечної сторони і використовую «перевірені» інструменти. Rsync доведено, що так, але це не буде робити резервні копії s3 без служби s3rsync надбудови s3. Я трохи боюся подвійності, але вона має більш широку привабливість протоколу, якщо я можу отримати деякий рівень функціональності, подібного до rsync, з s3 без вказаного додаткового сервісу. Я просто не розумію, наскільки добре це працює (і, можливо, по-різному з різними протоколами). Як чорт це робить синхронізацію FTP? :)
Хаймі Сірович

@JaimieSirovich Перевірте це і подивіться. Якби у вас було, ви б знали, що Duplicity створює "маніфестні" файли за менший час, ніж потрібно, щоб набрати всі ці коментарі щодо того, що це може робити.
ceejayoz

3

Ви також можете використовувати minio client aka mc Використання команди 'mc mirror' зробить цю роботу.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: міні-клієнт
  • share / sharegain: локальний каталог
  • s3: Псевдонім для https://s3.amazonaws.com
  • MyS3Bucket: Мій віддалений відро S3
  • share / sharegain: Мій об’єкт на s3

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

Сподіваюся, це допомагає.


Зараз також є -wпрапор, за допомогою якого fsnotifyслідкуватимуть за змінами. Його можна легко налаштувати як системний сервіс або подібний.
alkar

2

Я не впевнений, чи справжня rsync підходить для Amazon.

Як я розумію, стандартний алгоритм rsync означає, що клієнт обчислює хеші для кожного блоку файлу, а сервер обчислює хеші для його копії та надсилає ці хеші клієнту, а це означає, що клієнт може визначити, які блоки змінилися та потребують завантаження.

Це спричиняє дві проблеми для Amazon в тому, що багато хешей потрібно надсилати через Інтернет, а також потрібна обробна потужність, щоб обчислити всі ті хеші, які б збільшили витрати Amazon. за цю функцію стягується додаткова плата.

Що стосується клонів, вони, очевидно, зберігають хеші десь і десь можуть змінюватися залежно від клону. Вони можуть зберігати хеші як окремий об'єкт у файлі на Amazon або у базі даних, що зберігається на Amazon, або вони можуть зберігати їх локально та віддалено.

Є переваги і недоліки робити це будь-яким способом. Якщо хеші зберігаються віддалено в окремих файлах, то їх постійне відновлення може бути дорогим. Якщо хеші зберігаються в базі даних віддалено, то ця база може набути великих масштабів, а їх постійне відновлення та оновлення може бути дорогим. Якщо хеші зберігаються локально, то це сприяє зменшенню витрат, але створює інші ускладнення та проблеми.

(Звичайно, в Amazon є інші сервіси, тому можна було б зберігати базу даних у Amazon DB)

Як приклад, я спробував один ранній клон rsync багато років тому. Це було написано не для врахування структури ціноутворення в Amazon, і було видано багато http, щоб отримати хеш кожного блоку, і оскільки стягнення Amazon за кожне отримання, це означало, що, хоча частина зберігання мого рахунку різко впала, частина передачі повітряна куля.

Що я втрачаю, використовуючи duplicity + s3 замість rsync + s3rsync + s3?

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


0

Після порівняння кількох варіантів, згаданих у цій темі, я вирішив перейти до S3fs. Це дозволяє монтувати S3 як локальну файлову систему. Потім ви можете продовжити та використовувати rsync так, як ви це вже знаєте.

Це хороший підручник для початку роботи: Amazon S3 з Rsync

Автор раніше використовував згаданий s3sync, але потім перейшов до параметра з S3F. Мені це подобається, тому що у мене також є інші резервні папки, локально встановлені через SSHFS.


12
Небезпека, Віл Робінзон! Це дуже дорого, оскільки ви не отримуєте жодних переваг від зв'язку з низькою пропускною здатністю rsync --- s3fs в кінцевому підсумку прочитає (а потім запише, якщо він зміниться) весь файл, а це означає, що Amazon виставить вам рахунок удвічі. Натомість розгляньте можливість використання екземпляра EC2 та віддаленого використання rsync до цього через ssh. Перекази на S3 від екземпляра EC2 безкоштовні, тому все, за що ви платите, - це низька пропускна здатність rsync від вашої локальної машини до екземпляра EC2. Запуск мікропримірника EC2 на вимогу практично нічого не коштує.
Давид Дано

2
Це! Там є багато поганих порад для тих, хто не розуміє rsync та S3 ...
Марк

Недоліком цього є те, що тепер у вас є мікроаппарат для управління. Тривіально, якщо ви вмієте, але перешкода для вступу для багатьох. З іншого боку, EBS-накопичувач, прикріплений до EC2, становить приблизно половину ціни за байт S3.
Dan Pritts

@DavidGiven Що робити, якщо я писав безпосередньо на змонтований s3fs, не використовуючи rysnc, а потім керував довговічністю через життєвий цикл?
Провісник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.