Я устал испытывать определённые опасения за сохранность данных на выделенном сервере, наблюдая за происходящим у хостеров последнее время… 3FN, Agava, Hosting.UA, МакХост — тенденция получается очень нехорошая.
В итоге, МакХост стал последней каплей, и, чтобы не оказаться в числе тех, кто «уже делает бекапы», я перевёл систему бекапов своего сервера на Amazon S3. Получилось вполне себе быстро и прозрачно.
Хочу поделиться с общественностью простейшей реализацией.
Как восстановить данные?
Чтобы восстановить все данные из S3, в команде синхронизации меняем местами источник и цель, не забывая убрать удаление отсутсвующих файлов:
Происходит синхронизация в обратную сторону и voila, все данные снова на локальном диске.
Либо, для восстановления одного файла, воспользуемся командой get:
UPD2: Спасибо за карму, перенёс в системное администрирование.
В итоге, МакХост стал последней каплей, и, чтобы не оказаться в числе тех, кто «уже делает бекапы», я перевёл систему бекапов своего сервера на Amazon S3. Получилось вполне себе быстро и прозрачно.
Хочу поделиться с общественностью простейшей реализацией.
- Первым делом, памятуя о том, что сервис платный, подсчитываем расходы
Воспользуемся калькулятором, любезно предоставленным нам Amazon'ом.
В меню слева выбираем Amazon S3, убираем галочку с FREE INBOUND и заполняем необходимые поля (там всё предельно просто). Заполнив, жмём Add to bill и изучаем цену в окне справа. Так, например, при хранении 100 Gb данных, закачивании 20 Gb в месяц и скачивании 2 Gb в месяц мы платим около 17 долларов, что по мне является вполне приемлемой платой за спокойствие. Если необходимые вам объёмы на порядок меньше (что, подозреваю, так и будет), то и плата становится равной нескольким долларам. Рискну предположить, что это будет не сильно напряжно для бюджета. Если вы считаете так же, идём далее.
- Подписываемся на сервис Amazon Simple Storage Services (S3)
На странице сервиса нажимаем Sign Up For Amazon S3.
Если у вас нет аккаунта в Amazon Web Services, выбираем I am a new user, иначе вводим свой пароль к аккаунту в предлагаемую форму.
Для регистрации в AWS вводим своё имя, почтовый адрес, пароль и создаём аккаунт.
Следующей страницей будет уже регистрация собственно в S3: снова вводим почтовый адрес, принимаем соглашение и попадаем на страницу с информацией о тарифах и выбором метода платежа.
Вбиваем данные своей кредитки и биллинговый адрес. Ещё разок окидываем заполненную анкету взглядом и жмём Complete Sign Up.
Теперь остаётся немного подождать, пока на почту придёт письмо с подтверждением того, что аккаунт активирован и доступен.
- Получаем ключи доступа к сервису
Заходим в раздел безопасности аккаунта и в пункте Access Credentials -> Access Keys видим необходимый нам для авторизации ключ (пара Access Key ID — Secret Access Key). Он нам понадобится при настройке бекапа на сервере.
- Устанавливаем утилиту для работы с S3
Для Debian и Ubuntu есть в репозиториях:apt-get install s3cmd
- Выполняем начальную конфигурацию утилиты
Под тем пользователем, из-под которого в дальнейшем будем выполнять резервное копирование:
s3cmd --configure
Вводим Access Key, Secret Key, пароль для шифрования, путь к программе GPG.
Выбираем использовать или нет HTTPS и прокси.
После ввода всех настроек конфигуратор предложит протестировать соединение. Соглашаемся, и после успешного прохождения теста соглашаемся сохранить настройки в конфигурационный файл.
Теперь s3cmd готов к работе.
- Подготавливаем 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':
- Собственно, бекапим
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 за освещение этого вопроса.
- Добавляем запуск команды синхронизации в вашу систему изготовления локальных бекапов или просто в cron (как сделал я).
- PROFIT!
Как восстановить данные?
Чтобы восстановить все данные из S3, в команде синхронизации меняем местами источник и цель, не забывая убрать удаление отсутсвующих файлов:
s3cmd sync s3://mybucketname/backupfolder /local/backup/dir/
Происходит синхронизация в обратную сторону и voila, все данные снова на локальном диске.
Либо, для восстановления одного файла, воспользуемся командой get:
s3cmd get s3://mybucketname/backupfolder/backup.tar.gz /local/backup/dir/
UPD2: Спасибо за карму, перенёс в системное администрирование.