Компания
129,76
рейтинг
4 февраля 2013 в 17:27

Разное → Резервное копирование в «Облачное хранилище»

Резервное копирование в облачное хранилище

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

Специально для этого отлично подходит наше «облачное хранилище». Хранение 1 Гб данных будет стоить всего 3 рубля в месяц.

С чего начать?

Чтобы начать пользоваться «облачным хранилищем» нужно зарегистрироваться (полная регистрация занимает около 5 минут). Для всех новых учетных записей доступны 10 бонусных рублей, с помощью которых можно полноценно протестировать услугу. Если вы уже являетесь нашим клиентом и хотите протестировать услугу — по запросу через тикет систему вам будет начислено 10 бонусных рублей. Теперь все готово к работе.

В панели управления, в разделе «Облачное хранилище» → «Файлы» находится веб-интерфейс файлового менеджера. Создайте в нем приватный контейнер для хранения бэкапов (доступ к приватному контейнеру возможен только после авторизации — более безопасно при хранении важных данных), например «backups». Для загрузки файлов в хранилище лучше создать дополнительного пользователя, который будет иметь минимальный набор прав — это позволит обезопасить основного пользователя, у которого всегда полные права доступа.

Создание дополнительного пользователя находится во вкладке «Облачное хранилище» → «Настройка доступа». Введите любое имя для пользователя и нажмите «Создать» — появится диалог настройки пользователя.
Диалог настройки пользователя
В настройках пользователя нужно сгенерировать новый пароль. Опция хранения пароля является не обязательной, но тогда, в дальнейшем, пароль будет невозможно подсмотреть в настройках пользователя, а только сгенерировать новый. И обязательно надо отметить галочкой контейнеры, к которым пользователь будет иметь доступ. Не забудьте сохранить настройки нажатием «Сохранить изменения доступа».

Теперь все готово для настройки процесса резервного копирования на сервере.

Простой вариант

Если у вас есть сайт средних размеров с базой данных MySQL, которую вы хотите регулярно бекапить, то достаточно скачать два специально подготовленных скрипта и указать необходимые настройки.

Первое что понадобится, это утилита «supload» —позволяет удобно загружать файлы в хранилище. Устанавливается она следующим образом (предположительно на вашем сервере установлена ОС Debian):

$ wget https://raw.github.com/selectel/supload/master/supload.sh
$ mv supload.sh /usr/local/bin/supload
$ chmod +x /usr/local/bin/supload

Дальше нужно скачать и настроить скрипт для выполнения бекапа:

$ wget https://raw.github.com/selectel/storage/master/utils/sbackup.sh
$ chmod +x sbackup.sh

Откройте скрипт «backup.sh» с помощью «вашего любимого текстового редактора» и поменяйте следующие значения:
  • SS_USER — пользователь для авторизации в хранилище (тот дополнительный пользователь который был создан нами ранее);
  • SS_PWD — пароль для пользователя;
  • SS_CONTAINER — имя контейнера в который будут загружаться бэкапы;
  • TARGET_DIR — путь где расположены файлы сайта;
  • BACKUP_DIR — путь на сервере куда временно будут складываться бэкапы;
  • EXCLUDE_LIST — список файлов которые не нужно включать в архив;
  • DB_NAME — имя базы данных MySQL, чтобы бэкапить все имеющиеся базы укажите к качестве значения __ALL__;
  • DB_USER и DB_PWD — пользователь и пароль для подключения к MySQL;
  • EMAIL — email куда будет присылаться отчет о выполнении бекапа (можно указать пустым, чтобы отключить отчет);
  • EMAIL_ONLY_ON_ERROR — если указать yes, то отчет будет отправлен только в случае возникновения проблем/ошибок;
  • DELETE_BACKUPS_AFTER_UPLOAD — если указать yes, то созданные файлы бэкапов будут удалены из временной папки после успешной загрузки в хранилище;
  • STORAGE_EXPIRE — опция позволяет указать сколько дней файл бэкапа должен храниться в хранилище, после чего будет автоматически удален.

Для проверки и выполнения бэкапа скрипт можно запустить вручную:

$ ./sbackup.sh

Результат выполнения будет выведен в консоль.

Результат выполнения будет выведен в консоль

Теперь нужно настроить периодичность выполнения бэкапа, сделать это можно с помощью cron. Для этого просто перемещаем скрипт в специальную директорию:

$ mv backup.sh /etc/cron.daily/50_sbackup

После этого cron будет автоматически запускать скрипт архивирования раз в сутки.

Как восстановить данные?

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

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

Для этого в веб-интерфейсе файлового менеджера находим нужный файл, справа от него нажимаем на значок операций (выглядит как шестеренка) и выбираем пункт «Открыть доступ»:

Пункт «Открыть доступ»
Для ссылки можно ограничить время действия, количество скачиваний файла и, при желании, еще и задать пароль:

Функционал ссылок

После создания ссылки вы получите ссылку перейдя по которой можно будет скачать файл. Сама ссылка будет храниться в контейнере «links», там же можно еще раз подсмотреть ссылку для скачивания.

После загрузки файла с бэкапом на сервер нужно выполнить распаковку данных:

$ mkdir backup_files
  # распаковка файлов из архива в папку backup_files
$ tar xvf backupname_2013-01-26_08h40m.tar.bz2 -C backup_files/
  # восстановление БД (эта операция может перезатереть текущее состояние базы данных)
$ bzcat mysql_backupname_ALL_2013-01-26_08h40m.bz2 | mysql

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

Скрипт «sbackup» обладает достаточно ограниченным функционалом и в ряде случаев его может оказаться недостаточно. Но, его всегда можно модифицировать под свои нужды.

Зачастую на серверах уже используется какая-то система автоматизированных бэкапов, некоторые CMS или системы управления позволяют создавать и настраивать архивирование данных. Можно использовать такие «готовые» системы и «научить» их загружать архивные данные в облачное хранилище. Если в системе предусмотрено выполнение внешних скриптов после завершения архивирования, то это можно использовать чтобы выполнять загрузку данных с помощью утилиты «supload».

Использование «supload»

Supload (GitHub) — утилита, специально созданная, чтобы упростить загрузку файлов в хранилище Селектел. Она написана на bash и использует «стандартные» утилиты, которые установлены практически в любой базовой Linux системе, поэтому будет достаточно скачать скрипт и он сразу будет работать.

Возможности утилиты:
  • загрузка локального файла в хранилище;
  • рекурсивная загрузка всех файлов в указанной папке и подпапках;
  • гарантия загрузки файлов с помощью сверки контрольных сумм;
  • загрузка только изменившихся и новых файлов;
  • настройка авто-удаления файлов в хранилище.

Еще раз про установку:

$ wget https://raw.github.com/selectel/supload/master/supload.sh
$ mv supload.sh /usr/local/bin/supload
$ chmod +x /usr/local/bin/supload

Загрузка одного локального файла «my.doc» в контейнер «files» хранилища (контейнер должен быть создан заранее):

$ supload -u USERNAME -k USERKEY files my.doc

Так же можно загружать и в нужную папку внутри контейнера:

$ supload -u USERNAME -k USERKEY files/docs/ my.doc

При этом перед загрузкой файла вычисляется его контрольная сумма (MD5) и загрузка считается успешной только при совпадении контрольных сумм.

Для загрузки всех файлов из определенной папки нужно использовать опцию -r:

$ supload -u USRNAME -k USERKEY -r files local/docs/

Для каждого загружаемого файла так же будет выполнен контроль по контрольной сумме.

Сверка контрольных сумм дает еще одну дополнительную возможность — если запустить утилиту повторно, то есть данные уже есть в хранилище и контрольные суммы совпадают, загрузка файла пропускается. Это позволяется загружать только новые или изменившиеся файлы.

Хранилище поддерживает автоматическое удаление файлов, «supload» позволяет указать сколько времени нужно хранить файл:

$ supload -u USERNAME -k USERKEY -d 7d files my.doc

Опция -d указывает после какого времени в минутах (m), часах (h) или днях (d) хранилище автоматически выполнит удаление файла. Эта опция действует так же при рекурсивной загрузке файлов. Если файл уже был загружен, то повторный запуск команды не меняет ранее установленный (или вообще не заданный) срок хранения файла.

Это свойство можно интересно использовать — допустим ваша система архивирования складывает файлы с бэкапом в папку /var/backups/site/ и контролирует удаление файлов через определенный период времени. Можно настроить периодический запуск «supload» для загрузки всех файлов с ограничением времени хранения, например:

$ supload -u USERNAME -k USERKEY -d 31d -r backups /var/backups/sites

Тогда каждый новый загруженный файл бэкапа будет храниться в хранилище 31 день, а у ранее загруженных — постепенно будет уменьшатся срок их хранения и они будут автоматически удалены так же через 31 дней с момента их загрузки. Чтобы такая схема правильно работала нужно, чтобы у вашей системы архивирования срок удаления файлов был меньше чем указанный в «supload», иначе старые файлы могут загрузиться заново.

Утилита «supload» хорошо подходит как для ручной загрузки файлов, так и для использования в скриптах систем архивирования. Единственное ограничение — максимальный размер одного загружаемого файла 5 Гб.

Загрузка больших файлов

Для загрузки файлов размером больше 5 Гб в хранилище нужно использовать специальный метод загрузки — загрузка по сегментам. В таком случае файл разбивается на виртуальные части и загружается по отдельности. Скачивание такого файла обратно происходит «прозрачно» как одного целого файла, «склеивание» сегментов происходит незаметно на стороне хранилища.

Python-swiftclient — одна из утилит которая позволяет загружать файлы по сегментам. Выполнить загрузку можно так:

$ swift upload container -S 1073741824 large_file

При этом файл будет «на лету» разбит на сегменты по 1 Гб и загружен в хранилище. Опция -S указывает размер одного сегмента в байтах, максимальный размер сегмента 5 Гб (5368709120 байт).

Ссылка на этот пост в нашем блоге.
Автор: @Enchant
Селектел
рейтинг 129,76

Комментарии (45)

  • +8
    Перед отправкой на некое внешнее хранилище бэкап не плохо бы зашифровать с помощью gpg(к примеру).
    • +1
      Планируется добавить возможность шифрования в утилиту supload. Спасибо :-) Сейчас это не сложно сделать модифицировав предложенный в статье скрипт для бэкапа.
      • 0
        Хм, вот вы даете тестовые 10 рублей, в принципе довольно любопытно, и я даже создал аккаунт, чтобы прикрутить ваш API к своей софтине и чтобы можно было потестить. Но зачем для этого обязательно вводить паспортные данные? Вы же этим только способствуете введению фейковой инфы.
        • +2
          Законодательство РФ, Люк.
          • 0
            Ну, когда создавал хранилище на Яндекс.Диске никто паспортом не интересовался. Но спасибо хоть примеры полей сделали, чтобы было откуда копипастить :)
            • 0
              Вы ССЗБ, в случае утраты данных для доступа в панель управления без валидных данных аккаунта просто не сможете их восстановить.
              И не путайте бесплатный сервис яндекса без гарантий и договора на оказание услуг с платным сервисом, где необходимо заключение договора (оферты).
              • –1
                В данном случае фиолетово, так как зарегил именно тестовый аккаунт как разработчик, чтобы пользователи моей софтины могли использовать ваш сервис.

                Могли бы сделать, чтобы паспортные данные вводились перед тем как пополнять счет живыми деньгами, тогда это вполне оправдано. А на этапе когда просто интересно протестить (мало ли может у меня скорость будет к вам маленькая, или другие нюансы не понравятся), раздавать свои паспортные данные кому попало не привык, вот если после теста захочется сотрудничать, то другое дело.
                • +1
                  Сделать запрос на удаление аккаунта — дело нескольких минут.
  • 0
    aws.amazon.com/glacier/pricing/ В чем выигрыш?
    • +6
      Время, через которое вы «это» скачаете в случае необходимости. Glacier хорош, но только в роли last hope. В качестве штатного бэкапа оно не годится, потому что когда вы с холодеющей спиной осознаете, что не там сказали «rm -r *» не там, ждать 4-6 часов, пока glacier ответит, будет крайне неприятно.

      Иными словами, glacier это второй-третий уровень бэкапов. Тут речь про оперативный текущий (базовый).
      • –2
        Ладно, glacer — чем это выгоднее чем Amazon S3? Вроде даже по цене не выгодно.
        • НЛО прилетело и опубликовало эту надпись здесь
        • +1
          Так вроде у Селектела траффик дешевле.
          • +5
            У амазона 12центов за 1Гб — это если 1-10Гб в месяц и 9центов если 10-40Гб ->> 3.6 и 2.7 рублей.
            У selectel 80 копеек.
            Для меня важнее скорость. Не знаю как у остальных, но у меня с амазона медленнее.
            Если объем в мегабайтах то не существенно, а вот 4-8Гб уже очень заметно.
            • 0
              У Amazon S3 для европы сейчас самая высокая цена — "$0.095 per GB".

              На счет скорости — согласен. Она может быть существенным критерием. Хотя, нормально все-таки хранить оперативный бэкап где-то поближе, а в облаках только историю бэкапов за какой-то период (включая оперативный конечно). В этом случае скорость облака будет не существенна.
              • 0
                Вы про Ирландию.
                Я привел цены на трафик.
                Up to 10 TB / month $0.120 per GB
                Next 40 TB / month $0.090 per GB
                А вот Standard Storage
                First 1 TB / month $0.095 per GB
                Next 49 TB / month $0.080 per GB
                • 0
                  У S3 _входящий_ трафик бесплатен. Если мы говорим про бэкапное применение, то трафик и будет только входящий. Исходящий если и понадобится (тьфу-тьфу), то разово, для восстановления из бэкапа.
                  • +1
                    Вы не поверите, но у селектела то-же.
                    Сеть (входящий трафик) бесплатно
    • +4
      А у Амазона есть Российское представительство? Он может закрывающие документы прислать которые наша налоговая примет?
      • 0
        Я слышал, в России есть одна тян такие конторы…
  • 0
    Серьезно пока не копал, но было бы здорово еще заиметь туториал по установке python-swiftclient, в питоне не рублю, как я понял, там еще какие-то питоновские модули надо ставить? Может, у кого есть готовое описание процесса? (если что, на серваке debian5)
    • +1
      Сначала должен быть установлен easy_install:
      $ aptitude install python-setuptools

      Потом установить сам swiftclient:
      $ easy_install python-swiftclient
      • 0
        А на FreeBSD не подскажете? Просто поискать нужные порты, и все?
        • 0
          setuptools так же должен быть в портах.
  • +1
    Лучше б вы локальный трафик халявным сделали наконец-то )
  • +1
    Кто-нибудь пробовал загружать бекапы, около 70Гб? Как проходит?
    • +2
      В нашем Хранилище хранят и гораздо большие объемы данных, так что проблем быть не должно.
  • +1
    Я правильно понимаю, что в момент заливки файла на хранилище пользователи (или приложения) могут увидеть логин и пароль к нему?
    • +1
      Потенциально сейчас можно подсмотреть пароль по пиду процесса supload, но скоро это будет исправлено. Спасибо за наводку :-)
    • +1
      Уже исправлено.
  • 0
    [мечтательно] вот если бы пакет готовый для Synology NAS был выпущен… да с шифрованием файлов, да с поддержкой маски файлов (бекапить не все, а, например, лишь jpg)…
  • +2
    Реквестирую тоже самое на Power Shell
  • 0
    Интересно, нужно будет попробовать. Протестировал скорость с локальной машины, по FTP льёт 5 мб/сек легко.
  • 0
    лучше бы снапшоты дисков вернули в новую вебморду…
    • 0
      В родмапе есть. Стандартный XCP'ный механизм не справляется — будем писать свой.
  • 0
    Для загрузки файлов размером больше 5 Гб в хранилище нужно использовать специальный метод загрузки — загрузка по сегментам.

    А поделитесь с чем связано это ограничение.
    • +2
      С архитектурой Swift. Он как backend нагладывает такое ограничение.
  • 0
    А вот чем лучше синкать в хранилище каталоги, потенциально содержащие файлы больше 5 Гб?.. Так чтобы настроить и забыть?.. Я делал cloudfuse, но там, ЕМНИП, с большими файлами было плохо.
    • 0
      Ниодна из известных мне утилит монтирования не умеет загружать файлы больше 5 ГБ, к сожалению. Нужно использовать python-swiftclient.
      • 0
        s3sync?
        • 0
          s3sync не умеет большие файлы.
  • 0
    Ох где ж вы были раньше? Я два месяца уже безуспешно настраиваю cloudfuse. Работает крайне нестабильно. Файлы размером чуть больше 1Gb. Отваливается на ровном месте. Я даже не могу нормально md5 суммы посчитать.

    Вот сейчас специально один и тот же файл три раза проверил:

    $ time md5sum /mnt/storage/energo/2013-02-05-22-43-01.zip.ssl > /tmp/md5OnCloud.txt
    real    5m55.695s
    user    0m2.680s
    sys     0m0.957s
    
    $ time md5sum /mnt/storage/energo/2013-02-05-22-43-01.zip.ssl > /tmp/md5OnCloud.txt
    real    13m9.772s
    user    0m2.533s
    sys     0m0.846s
    
    $ time md5sum /mnt/storage/energo/2013-02-05-22-43-01.zip.ssl > /tmp/md5OnCloud.txt
    ... не дождался результатов ...
    

  • +1
    я давно написал свой скрипт через апи селектела, с блекджеком и шифрованием %)
  • 0
    только у меня?

    root@srv:~# wget https://raw.github.com/selectel/supload/master/supload.sh --2013-02-12 02:49:20-- https://raw.github.com/selectel/supload/master/supload.sh Resolving raw.github.com... 199.27.75.193 Connecting to raw.github.com|199.27.75.193|:443... connected. ERROR: certificate common name `*.a.ssl.fastly.net' doesn't match requested host name `raw.github.com'. To connect to raw.github.com insecurely, use `--no-check-certificate'.

    сервер на selectel
    • 0
      а причем тут selectel?
      если на raw.github.com используется кривой сертификат?
      добавьте --no-check-certificate и всё без проблем скачается

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

Самое читаемое Разное