Давно уже ребята из различных компаний задают вопросы, как организовать резервное копирование в облако, при этом не тратя много сил и времени. Поводом для написания статьи послужил очередной диалог на эту тему. По итогами долгой переписки с коллегами, объяснения теории и перебора вариантов практической реализации, я решил написать об этом.
Резервное копирование в облако — тема уже давно не новая. Каждый выбирает своего облачного провайдера, свои инструменты для копирования и пр. Вендоров много, здесь мы рассмотрим именно Google Cloud Platform. Мой выбор обусловлен стоимостью хранилища и простотой подключения. Мы все реализуем самыми простыми скриптами, без покупки софта, покупки дисковых хранилищ и прочего.
Что мы имеем
В тонкости инфраструктуры заказчика вдаваться не станем, каждому свое. В итоге имеется сервер резервного копирования, на который сливаются копии файлового хранилища и данных с машин, пакуются в архивы и падают на два дисковых массива. Один массив планируется использовать под другие цели, потому в любом случае нужно где-то хранить еще одну «копию копий». На ленты никто бюджет не выделит, но есть небольшой запас средств. Об этом и поговорим дальше.
Выбор облака
Кто-то посоветовал заказчику OneDrive или Google Drive. Этот вариант отпал сразу, ибо это бред, хранить около 10Тб бэкапов на облачном диске. Смотрели в сторону Azure — странное ценообразование и предоплата. AWS или Google Cloud… доверились более известному в массах :) Была еще пара облачных провайдеров, один даже выигрывал немного в цене, но последним аргументом стала оплата без банковской карты.
Два вида копирования
Да, нам нужно было применить две схемы резервирования различных данных:
- Репликация существующего набора копий на сервере
- Хранение копий длительное время только в облаке
Начнем с матчасти
Подготовка облака
Создаем триал на 300 долларов в Google Cloud Platform (Кому мало — стучите, обсудим).
После подключения триала, нам будет доступна консоль. В меню переходим в раздел
Storage. Нам будет предложено создать проект, создаем, называем как нам заблагорассудится. После создания проекта, в разделе
Storage создадим
Сегмент, это и будет наше хранилище для копий. Называем как удобно, для статьи я назвал
backwin для репликации и отдельно создал
backupwin для копирования и хранения по дням.
Подготовка машины
С сервером все просто. Идем в раздел документации Google Cloud, открываем раздел
Cloud SDK и действуем по инструкциям. В моем случае была машина с Windows Server, потому скачиваем, ставим. Достаточно стандартных параметров при установке, потому
далее-далее-готово.
Открываем командную строку, пишем
gcloud init
нам будет предложено авторизоваться в окне браузера. Вводим логин-пароль от Google Cloud. Далее будет предложено выбрать в окне командной строки проект, выбираем созданный ранее. При вопросе включить ли API — Да, Хотим ли управлять Compute Engine — нет.
Репликация хранилища
В двух словах, зачем она нам была нужна. Есть машина на которой имеется набор резервных копий в определенном каталоге (
c:\bak\). Это зашифрованные архивы и их нужно хранить где-то снаружи. Без проблем. Открываем командную строку, пишем
gsutil -m rsync -r -d -e -C file://c:\bak gs://bakwin
- c:\bak — каталог с копиями для репликации в облако
- bakwin — "Сегмент" в облачном хранилище Google Cloud Storage, который мы создали ранее
Тут стоит оговориться, что я экспериментирую с машиной Windows, но точно так-же это работает и на Linux, только путь к каталогу поправить нужно.
Команда выполнена, все улетело в облако. Сохраняем как скрипт, включаем в планировщик. Все! Реально пять минут.
Резервное копирование каталога
В этом случае нам потребовалось хранить данные за каждый день в отдельном каталоге в Google Cloud Storage. Тоже оказалось все просто, берем бутерброд и наливаем кофе.
Для любителей PowerShell, я делал именно на нем т.к. машина на Windows Server. Модули у нас установились в системе вместе с Cloud SDK. Потому для начала, кроме
Import-Module GoogleCloud
нам ничего не потребуется.
Показываем где у нас каталог для копирования и в какой сегмент его помещать:
$folder = "C:\Bak"
$bucket = "gs:\backupwin"
Тут можно дописать создание каталога по текущей дате копирования:
$date = Get-date -format dd.MM.yyyy
$bucket = $bucket + "\" + $date
mkdir $bucket
Собственно сам скрипт для копирования:
cd $folder
$files = Get-ChildItem -Recurse -Attributes !Directory
$data = @()
foreach ($file in $files) {
$objectPath = $file | Resolve-Path -Relative
$data += @{file = $file; objectPath = $objectPath} #
}
cd $bucket
foreach($element in $data) {
Write-Host $element.objectPath
New-Item -ItemType File -Path $element.objectPath
}
Проверяем, работает. Составляем в скрипт, ставим в планировщик. Вот и вся любовь.
По стоимости хранения 10 Тб данных (в облачном хранилище) оплата будет от 70 долларов в месяц. В целом все работает. Тюнинг скриптов под конкретные условия не применялся.
Вообще резервное копирование в Google Cloud Storage можно использовать и вместе с таким ПО как Cloudberry, Veritas и др. и использовать облачное хранилище как дополнительное пространство для копий. В случае с железом, большинство вендоров уже на уровне хранилищ поддерживают их резервирование в Google Cloud.
Вывод: дешево, быстро, надежно, а перевод из пробной версии в коммерческую происходит без каких-либо перенастроек и банковских карт.
https://habrahabr.ru/post/332474/