Быстрая реализация резервного копирования в Amazon S3

    Я устал испытывать определённые опасения за сохранность данных на выделенном сервере, наблюдая за происходящим у хостеров последнее время… 3FN, Agava, Hosting.UA, МакХост — тенденция получается очень нехорошая.

    В итоге, МакХост стал последней каплей, и, чтобы не оказаться в числе тех, кто «уже делает бекапы», я перевёл систему бекапов своего сервера на Amazon S3. Получилось вполне себе быстро и прозрачно.

    Хочу поделиться с общественностью простейшей реализацией.

    1. Первым делом, памятуя о том, что сервис платный, подсчитываем расходы
      Воспользуемся калькулятором, любезно предоставленным нам Amazon'ом.
      В меню слева выбираем Amazon S3, убираем галочку с FREE INBOUND и заполняем необходимые поля (там всё предельно просто). Заполнив, жмём Add to bill и изучаем цену в окне справа. Так, например, при хранении 100 Gb данных, закачивании 20 Gb в месяц и скачивании 2 Gb в месяц мы платим около 17 долларов, что по мне является вполне приемлемой платой за спокойствие. Если необходимые вам объёмы на порядок меньше (что, подозреваю, так и будет), то и плата становится равной нескольким долларам. Рискну предположить, что это будет не сильно напряжно для бюджета. Если вы считаете так же, идём далее.
    2. Подписываемся на сервис Amazon Simple Storage Services (S3)
      На странице сервиса нажимаем Sign Up For Amazon S3.
      Если у вас нет аккаунта в Amazon Web Services, выбираем I am a new user, иначе вводим свой пароль к аккаунту в предлагаемую форму.
      Для регистрации в AWS вводим своё имя, почтовый адрес, пароль и создаём аккаунт.
      Следующей страницей будет уже регистрация собственно в S3: снова вводим почтовый адрес, принимаем соглашение и попадаем на страницу с информацией о тарифах и выбором метода платежа.
      Вбиваем данные своей кредитки и биллинговый адрес. Ещё разок окидываем заполненную анкету взглядом и жмём Complete Sign Up.
      Теперь остаётся немного подождать, пока на почту придёт письмо с подтверждением того, что аккаунт активирован и доступен.
    3. Получаем ключи доступа к сервису
      Заходим в раздел безопасности аккаунта и в пункте Access Credentials -> Access Keys видим необходимый нам для авторизации ключ (пара Access Key ID — Secret Access Key). Он нам понадобится при настройке бекапа на сервере.
    4. Устанавливаем утилиту для работы с S3
      Для Debian и Ubuntu есть в репозиториях: apt-get install s3cmd
    5. Выполняем начальную конфигурацию утилиты
      Под тем пользователем, из-под которого в дальнейшем будем выполнять резервное копирование:
      s3cmd --configure
      Вводим Access Key, Secret Key, пароль для шифрования, путь к программе GPG.
      Выбираем использовать или нет HTTPS и прокси.
      После ввода всех настроек конфигуратор предложит протестировать соединение. Соглашаемся, и после успешного прохождения теста соглашаемся сохранить настройки в конфигурационный файл.
      Теперь s3cmd готов к работе.
    6. Подготавливаем S3
      Создаём хранилище, так называемый bucket:
      # s3cmd --acl-private --bucket-location=EU mb s3://mybucketname
      Bucket 'mybucketname' created

      --acl-private — доступ только для нас
      --bucket-location=EU — bucket создаётся в европейском хранилище (от Москвы, где у меня сервер, будет поближе). Если вам ближе США, то вместо EU пишем US.
      mybucketname — имя хранилища, должно быть уникальным среди всех (не только ваших) хранилищ.

      Проверяем:
      # s3cmd la
      Bucket 'mybucketname':

    7. Собственно, бекапим
      s3cmd имеет режим работы а-ля rsync, что в случае простейшего бекапа получается очень удобно:
      s3cmd --acl-private --bucket-location=EU --guess-mime-type --delete-removed sync /local/backup/dir/ s3://mybucketname/backupfolder
      Что есть что:
      Первые два параметра описаны выше.
      --guess-mime-type — подбирать MIME-тип содержимого исходя из раширения.
      --delete-removed — удалять файлы в хранилище, если они были удалены из локальной папки.
      Далее указана локальная папка, в которой лежат бекапы на сервере (вы же делаете локальные бекапы, правда?) и папка, в которую бекапить на s3 (если её ещё нет — создастся автоматически).

      Подставляем нужные вам параметры, запускаем, проверяем что всё закачивается куда нужно:
      s3cmd ls s3://mybucketname

      UPD: Размер файла в S3 не должен превышать 5 Gb. Если ваша система бекапов делает файлы большего размера, то её придётся немного модифицировать, например, пропуская архивы через split. Спасибо nightfog за освещение этого вопроса.

    8. Добавляем запуск команды синхронизации в вашу систему изготовления локальных бекапов или просто в cron (как сделал я).
    9. PROFIT!


    Как восстановить данные?
    Чтобы восстановить все данные из S3, в команде синхронизации меняем местами источник и цель, не забывая убрать удаление отсутсвующих файлов:
    s3cmd sync s3://mybucketname/backupfolder /local/backup/dir/
    Происходит синхронизация в обратную сторону и voila, все данные снова на локальном диске.

    Либо, для восстановления одного файла, воспользуемся командой get:
    s3cmd get s3://mybucketname/backupfolder/backup.tar.gz /local/backup/dir/

    UPD2: Спасибо за карму, перенёс в системное администрирование.
    Поделиться публикацией

    Комментарии 62

      +4
      Просто и доступно. Спасибо за инструкцию, мысленно ставлю плюс.
        –6
        спасибо анонимусу за вполне реальный минус в коммент!
          0
          Сам сейчас пишу абстракцию над стандартным PHP-коннектором для S3.
          От себя отмечу, что если у вас карта Альфабанк, то на обычную дебет-карту Амазон почему-то не принимает, однако с виртуальной работает на ура.
            0
            У меня как раз для платежей в интернете есть master card virtual от Альфабанка. Работает всегда, даже с paypal.
          +10
          маленький нюанс, при работе в S3 надо учесть то размер файла не должен превышать 5G.
            +1
            спасибо, добавил в статью
            +3
            Я использую для бекапа и для CDN доступа английскую компанию rackspace.com (http://www.rackspacecloud.com/), смысл тот же, но вроде немного дешевле (0.15$ за GB + 0.22$ за траффик). К тому же они имеют уже готовый API для php, python и т.д.

            Правда для своих нужд я всё равно API переписал. :)
              +1
              О, спасибо большое за наводку! thx!
              Глянул цены — что-то вообще коммунизм какой-то, для бекапов копейки получаются…
                +1
                А может о них тоже статью напишите?
                  0
                  Там не очень много писать, я-то использую в основном их в качестве CDN со своим API, а бекап делаю только базы данных. Но могу попробовать.
                    0
                    ждем, про цдн тоже напишите
                      0
                      Честно говоря я уже уволился и перешел на Amazon, но попробую покопать старый библиотеки.
                  0
                  Зарегся посмотреть, они не смогли дозвониться до меня для подтверждения акка (зачем им такое суровое подтверждение?) и засуспендили аккаунт.
                    0
                    А почему дешевле? у амазона 0.15+0.15, у rackspace 0.15+0.22.
                    +1
                    Какая у вас скорость upload'а получилась? У меня примерно ~150кб/с, что собственно «ни в какие рамки». На канал никогда не жаловались
                      0
                      у меня сервер в Долгопрудном (Агава), бекапы заливались на европейский E3 со скоростью ~500 KB/s
                        +1
                        Пардон, я указал скорость в килобайтах/секунду. У вас тоже самое?
                        Собственно даже 500, это крайне мало, бэкап размером 10 Гб (на деле больше) будет заливаться больше трех часов, а при наших реалиях, возможен обрыв связи или еще что и нужно будет повторять процесс заново — это жопа.
                        Кто-нибудь может посоветовать более быстрое решение, аналогичное S3?
                          +1
                          килобайты в секунду, да.
                          бекапить, например, хостинговую инфраструктуру в S3 было бы как-то странно, а для личного использования скорость такого значения, мне кажется, не имеет.
                          пыхтит сервер ночью 1 час или 5 часов — в итоге разницы особой нет.

                          ну и кстати, у вас больше 10Гб изменённых данных каждый день? у меня полный бекап делается раз в неделю, в остальные дни — делаются инкрементальные бекапы, они сильно компактнее.
                            0
                            Есть приятная тонкость: при использовании протокола rSync, в хранилище отправляется только измененный фрагмент файла.
                          +1
                            0
                            Москва, провайдер — МГУ. Скорость закачки на европейский S3 — около 2МБайт\сек.
                            Кстати странно с этим S3 — ни один из клиентов, кроме s3cmd, не давал такой скорости ни винде ни в линухе.
                              0
                              Тоже заметил странную зависимость. Через s3sync скорость примерно в два раза ниже чем через CloudBerry Explorer for Amazon S3…
                              Только вот последний в командную строку нельзя прикрутить для автоматизации.
                                0
                                CloudBerry у меня вообще отказался что-то качать, s3fox работал, но макс. скорость была около 100КБайт, S3 Browser был чуть быстрее. s3cmd и в винде и в линухе давал стабильно 2МБайта. Но было это в сентябре 2009, как сейчас — не знаю.
                                  0
                                  Зато есть CloudBerry Backup под Windows
                                  0
                                  2 МБайт/сек — мало или много? =)
                                    0
                                    Ну пока качается 20Гб за раз ночью и само — хватает =).
                                  0
                                  Сервера в англии, бэкапы заливаем, соответственно, в --bucket-location=US. s3cmd выдаёт в разные дни от 400 килобайт/сек до 4 мегабайт/сек. Но какая разница, какая там скорость — ресурсов заметных на это не тратится, успевает залить меньше чем за сутки (т.е. до следующего бэкапа) — ну и отлично.
                                    0
                                    Яндексом скорость мерить зачастую без толку, т.к он локален для многих провайдеров.
                                    –12
                                    сегодня и Оверсаном занялись, если верить этому.

                                    www.soft-teleport.ru/

                                    АХТУНГ!!!
                                    Сервер SOFT-TELEPORT.RU вечером 6/04/10 был незаконно арестован в ДатаЦентре «Оверсан-Меркурий».
                                    PS: Переезжаем заграницу… Скоро будем…

                                    /грустно всё это :(
                                      +1
                                      если незаконно — в суд пишите, а не хабр
                                      +1
                                      Спасибо огромное за статью.
                                      У меня маленький вопрос: а какой смысл, например в вашем случае, брать 20Гб закачивания и 2Гб скачивания?
                                      По идее, если вдруг накроется текущий хостинг, тьфу-тьфу-тьфу, то придется бекап «гнать» на новый сервер, а это фактически потребует скачивания полного бекапа (ну допустим 10Гб). Или же есть ситуация, что в случае необходимости восстановления из бекапа — вы просто увеличиваете скачивание и восстанавливаетесь?
                                        +4
                                        я не осветил этот момент, каюсь, а вы чуть-чуть неверно поняли…
                                        в S3 нет тарифов и лимитов в привычном понимании, вы платите только за то, что фактически хранилось, скачивалось и закачивалось в прошедшем месяце.

                                        в примере я привёл цифры с потолка, эдакий средний use-case (бекапим 20 Г в месяц, храним бекапы 5 месяцев, иногда скачиваем что-нибудь назад по мелочи).

                                        если вам вдруг понадобится стянуть полный бекап, то за этот месяц вы заплатите чуть больше, чем за предыдущий. ничего перенастраивтаь в этом случае не придётся.
                                          +1
                                          Спасибо за разъяснения про лимиты — теперь у меня в голове все разложилось по полочкам.
                                          0
                                          Там нет понятия четкого тарифного плана. Есть цена на трафик, дисковое пространство и запросы. По итогам месяца вам выпишут счет.
                                          У меня бекап проектов с домашнего ПК обходится в 1-2 «зеленых» в месяц.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            Цена за скачивание (GET) и другие операции (PUT/COPY/POST/LIST)
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                0
                                                Там все цены есть на сайте, посчитайте)
                                                Я в прошлый месяц залил около 140 000 файлов, заплатил за это удовольствие 3 бакса.
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                    0
                                                    Один файл — одна операция.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                        +2
                                                        попробуйте задействовать мозг, по назначению.
                                                          0
                                                          12 — еще. и…
                                                  0
                                                  а я тогда спрошу, один цыкл бакапа (инкрементального или полного) это один запрос или по файлу на запрос? или еще как то?

                                                  P.S. какой то коммунизм там с ценами О_о
                                                0
                                                Лучше вообще все файлы по возможности держать на S3, тогда, во-первых, они будут доступны в любой момент, даже если сам ваш сайт умер, а во вторых, при смене сайта не надо будет перекачивать тонны бэкапов.
                                                  –3
                                                  Прочитал в ГуглРидере анонс этой статьи, открыл Хабр, а он на профилактике.
                                                  «Наверное, реализуют бекап на S3» — подумал я.
                                                    0
                                                    А этот s3cmd он совсем как rsync или нет? --link-dest он поддерживает? Если да, то тогда можно было бы модифицировать модифицировать rsnapshot вообще красота.
                                                      0
                                                      не поддерживает. там простейшая реализация.
                                                        0
                                                        Очень жаль :(
                                                          0
                                                          каюсь, но я покурив ман к rsync, я так и не понял для чего нужен --link-dest
                                                            0
                                                            вкурил ещё раз, на этот раз осознал всю глубину глубин =)
                                                            примерно представляю, в каких случаях это может пригодиться, и для моих задач точно не актуально
                                                              0
                                                              Ну это длоя больших бекапов, которые со временем не сильно меняются. Архив фоток например.
                                                        0
                                                        Зарегистрировался, залил бэкапы. Только вот не могу найти где у них статистика сколько места я занял, и сколько трафла прокачал. Если кто нашел биллинг, напишите где он у них находится.
                                                          0
                                                          https://aws-portal.amazon.com/gp/aws/developer/account/index.html
                                                          Слева Account Activity и Usage Reports. Только обновляется оно явно не в реальном времени.
                                                          0
                                                          а фрёвый хендбук упоминает о www.tarsnap.com/
                                                          Да и в портах вроде есть.
                                                            +4
                                                            Не забудьте расширения к Chrome и FF — они простецкие, но свое дело делают :)
                                                            https://chrome.google.com/extensions/detail/appeggcmoaojledegaonmdaakfhjhchf?hl=ru

                                                            Еще www.cloudberrylab.com — сам эту пользую.

                                                            С ценами — коммунизм. Меньше доллара выходит если особо данных не гоняю.
                                                            Пишу всюду US. Разницы пока не заметил.

                                                            Слегка погуглил на тему backup S3 www.google.ru/search?aq=f&sourceid=chrome&ie=UTF-8&q=s3+backup — утилит хватает
                                                            jeremy.zawodny.com/blog/archives/007641.html — такой список есть
                                                              0
                                                              А если дома достаточно быстрый интернет, то можно и без амазона обойтись :)
                                                              Я бекапы своего сервера (установлен в Agava) делаю на домашний мини-сервер — раз в 3 суток запускается процедура бекапа всех openVZ контейнеров (через LVM), после завершения бекапа все архивы сливаются домой.
                                                              При необходимости из них можно буквально за час (ограничение — скорость домашнего интернета на upload) развернуть работающие сайты на любом сервере с поддержкой openVZ
                                                                0
                                                                Или можно не изобретать велосипед и использовать существуещее решение :): astrails.com/astrails-safe
                                                                устанавливка и конфигурация за 5 минут.

                                                                В кратце о возможностях:

                                                                бэкапим:
                                                                * mysql (mysqldump)
                                                                * postgresql (pgdump)
                                                                * svn (svndump)
                                                                * files (tar)

                                                                на
                                                                * Amazon S3
                                                                * любой sftp сервер
                                                                * локально

                                                                + поддержка шифрования данных с GnuPG и ротация бэкапов.
                                                                  0
                                                                  Как там платить картой Visa, если нет поля ввода CVV2?
                                                                    0
                                                                    идти в банк, писать заявление и отказыватся от кода =)
                                                                    у амазона как и у гугла свои замарочки…
                                                                    0
                                                                    Попробывал запустить s3cmd на FreeBSD!
                                                                    Установил из портов + установил gpg (требует путь)
                                                                    При вызове s3cmd --configure и на этапе тестирования соединения выдаёт:

                                                                    ERROR: Test failed: 403 (NotSignedUp): Your account is not signed up for the S3 service. You must sign up before you can use S3.

                                                                    хотя акаунт активирован, ключи выданы… кто нить сталкивался с подобным?
                                                                      0
                                                                      По Amazon S3 хотелось бы уточнить информацию, если кто знает:

                                                                      1. Если я вовремя не оплачу аккаунт, то файлы мои удалят или просто доступ приостановят до момента погашения задолженности?

                                                                      2. Оплата взымается за фактически произведённые операции или я должен заранее купить себе пакет на месяц и если не израсходовал, то всё-равно абонплата будет сниматься?

                                                                      3. «режим работы а-ля rsync» — в этом режиме если я, например, 1000 файлов синхронизирую иа поменялось только 5, то сколько будет операций PUT/COPY/POST/LIST Requests?

                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                      Самое читаемое