System administration
April 2010 7

Быстрая реализация резервного копирования в 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: Спасибо за карму, перенёс в системное администрирование.
+164
19.5k 334
Comments 62