Управление резервными копиями в облаке с помощью Duplicacy

Duplicacy – это инструмент межплатформенного резервного копирования, который предлагает ряд полезных функций, включая инкрементный бэкап, одновременное резервное копирование и шифрование на стороне клиента, которые направлены на оптимизацию процесса копирования данных в облако. Интерфейс командной строки CLI Linux является бесплатным для личного использования, но для коммерческих целей требуется платная лицензия. Кроме того, Duplicacy доступен для MacOS и Windows с графическим интерфейсом, и эта версия платная для всех.

Основанный на идее lock-free deduplication, инструмент Duplicacy был разработан для безопасного управления резервными копиями широкого спектра облачных сервисов хранения. Когда клиент Duplicacy создает и сохраняет новый фрагмент, другие клиенты, использующие тот же контейнер хранения, видят, что фрагмент уже существует и, следовательно, не будут загружать его снова. Это позволяет отдельным клиентам совместно использовать и создавать резервные копии одних и тех же данных, не прилагая дополнительных усилий для отслеживания резервных копий.

В этом мануале вы узнаете, как установить версию CLI Duplicacy и использовать ее для управления типичными процессами резервного копирования данных в облаке. Также вы научитесь создавать резервные копии распределенного репозитория из нескольких серверов в одно хранилище объектов и копии снапшотов нескольких хранилищ объектов для большей безопасности данных.

Требования

  • Два сервера Ubuntu 16.04, настроенные по этому мануалу. В этом руководстве они будут условно называться server-01 и server-02.
  • Два хранилища объектов.
  • Access key и Secret key хранилищ.

Установка Duplicacy

Последнюю CLI-версию Duplicacy можно загрузить из репозитория GitHub с помощью wget (для персонального использования лицензия не нужна).

Следующие команды нужно выполнить на обоих серверах, чтобы загрузить пакет Duplicacy на каждый сервер:

sudo wget -O /opt/duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v2.0.10/duplicacy_linux_x64_2.0.10

Примечание: Ссылка на последний релиз может отличаться.

После этого создайте симлинк между каталогом загрузки и новым каталогом в /usr/local/bin:

sudo ln -s /opt/duplicacy /usr/local/bin/duplicacy

Сделайте duplicacy исполняемым:

sudo chmod 0755 /opt/duplicacy

Теперь на каждом сервере есть инструмент Duplicacy, и вы можете настроить его для работы с вашими хранилищами.

Инициализация репозитория и настройка Duplicacy

Duplicacy выполняет резервное копирование данных на уровне каталогов, поэтому, прежде чем начать загрузку файлов в хранилище, вы должны связать Duplicacy с определенным каталогом или хранилищем на обоих ваших серверах. Для этого вам нужно создать репозиторий проекта и инициализировать его с помощью команды инициализации Duplicacy.

Команда init следует такому синтаксису:

duplicacy init repository_id s3://region@endpoint/space_name

  • repository_id: Это метка, с помощью которой Duplicacy различает репозитории. Если вы планируете создавать резервные копии одного и того же репозитория из нескольких источников (как будет в этом мануале), значение repository_id должно быть одним и тем же на обоих серверах.
  • region: название региона, в котором находится ваш сервер.
  • endpoint: конечная точка, статическое местоположение, используемое серверными веб-интерфейсами, чтобы указать, где находятся определенные ресурсы (в мануале используется условная конечная точка nyc3.your-object-storage.com).
  • space_name: имя хранилища, которое вы выбрали во время его создания. Это не то же самое, что URL хранилища. Если хранилище использует URL https://example_storage.nyc3.your-object-storage.com, то имя хранилища – example_storage.

Если вы хотите, чтобы резервные копии помещались в определенную папку в хранилище, добавьте имя папки после имени вашего хранилище при запуске команды init. При этом после имени папки нужно поставить слеш:

duplicacy init repository_id s3://region@endpoint/space_name/folder_name/

Собрав эти данные, вы можете создать каталог репозитория на каждом из ваших серверов, используя команду mkdir. После этого перейдите в новый репозиторий с помощью cd:

mkdir project-repository
cd project-repository/

Находясь в каталоге project-repository/ на сервере server-01, запустите команду init (укажите в ней свои данные).

duplicacy init project_01 s3://nyc3@nyc3.your-object-storage.com/example_storage

Чтобы включить шифрование данных Duplicacy, просто добавьте флаг -e в команду init:

duplicacy init -e project_01 s3://nyc3@nyc3.your-object-storage.com/example_storage

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

После запуска команды init Duplicacy предложит ввести ключи Access и Secret key, которые можно скопировать со страницы API панели управления.

Enter S3 Access Key ID:ExampleAccessKeyGBBI
Enter S3 Secret Access Key:ExampleSecretKeyEC1wnP2YiHobVcSBaZvLoFXXlnA

Вы увидите такой вывод:

/home/8host/project-repository will be backed up to s3://nyc3@your-object-storage.com/example_storage with id project_01
/home/8host/project-repository will be backed up to s3://nyc3@your-object-storage.com/example_storage with id project_01

Когда вы запускаете команду init, она создает в репозитории каталог с именем .duplicacy/, который содержит файл preferences. Этот файл содержит информацию о хранилище, а также все параметры шифрования или хранения, которые вы указали. Если позднее вы решите внести изменения в конфигурацию Duplicacy, вы можете либо отредактировать файл preferences, либо удалить его. Файл будет воссоздан при следующем запуске команды init в этом репозитории.

Затем повторите команду init на втором сервере:

duplicacy init project_01 s3://nyc3@nyc3.your-object-storage.com/example_storage

Указав ключи, вы получите немного другой вывод:

The storage 's3://nyc3@nyc3.your-object-storage.com/example_storage' has already been initialized
Compression level: 100
Average chunk size: 4194304
Maximum chunk size: 16777216
Minimum chunk size: 1048576
Chunk seed: 6475706c6963616379
/home/8host/project-repository will be backed up to s3://nyc3@nyc3.your-object-storage.com/example_storage with id project_01

Оба репозитория теперь инициализированы, но есть еще один шаг, который вы можете предпринять для настройки Duplicacy. Duplicacy будет запрашивать ваши ключи Access и Secret key при создании каждой резервной копии данных, а это довольно неудобно. Чтобы этого избежать, вы можете использовать команду set для записи учетных данных хранилища в файл настроек Duplicacy. Выполните следующие команды на каждом из серверов, чтобы сохранить ключи Access и Secret key в Duplicacy:

duplicacy set -key s3_id -value ExampleAccessKeyGBBI
duplicacy set -key s3_secret -value ExampleSecretKeyEC1wnP2YiHobVcSBaZvLoFXXlnA

Теперь Duplicacy может копировать данные.

Резервное копирование репозитория из нескольких источников

Распределенные команды разработчиков могут воспользоваться средствами резервного копирования облачных данных, которые предотвращают конфликты файлов и потерю данных. Загружая моментальный снимок (снапшот) репозитория в хранилище объектов с помощью одной команды Duplicacy, вы упрощаете резервное копирование, избегая конфликтов файлов на нескольких компьютерах.

Чтобы протестировать резервное копирование Duplicacy, с помощью touch создайте на каждом сервере фиктивные файлы в каталоге project-repository:

touch /project-repository/file-1.txt
touch /project-repository/file-2.txt

Затем на сервере server-01 используйте команду backup, чтобы создать снапшот репозитория и загрузить его в свое хранилище объектов. Поскольку при инициализации репозитория было указано всего одно хранилище, вам не нужны дополнительные опции:

duplicacy backup
No previous backup found
Indexing /home/mark/project-repository
Listing all chunks
Packed file-1.txt (0)
Packed file-2.txt (0)
Backup for /home/8host/project-repository at revision 1 completed

Затем попробуйте скопировать репозиторий сервера server-02:

duplicacy backup
Last backup at revision 1 found
Indexing /home/8host/project-repository
Backup for /home/8host/project-repository at revision 2 completed

Вы заметите, что, поскольку хранилища на server-01 и server-02 были идентичны, Duplicacy не пакует файлов, как это было при запуске команды backup  на первом сервере. Теперь откройте один из фиктивных файлов на server-02 и добавьте в него текст:

nano file-1.txt
The quick brown fox jumped over the lazy dogs.

Сохраните и закройте файл. Повторите команду:

duplicacy backup
Storage set to s3://nyc3@nyc3.your-object-storage.com/example_storage
Last backup at revision 2 found
Indexing /home/8host/project-repository
Packed file-1.txt (45)
Backup for /home/8host/project-repository at revision 3 completed

Поскольку в одном из файлов в репозитории произошли изменения, Duplicacy перепакует этот файл и загрузит его как часть версии 3.

Вы можете использовать команду restore, чтобы откатить версию репозитория, используя опцию -r и указав номер версии. Обратите внимание, что без параметра -overwrite это не перезаписывает существующие файлы:

duplicacy restore -overwrite -r 2

После запуска команды restore вы можете убедиться, что Duplicacy действительно переписал file-1.txt. для этого проверьте наличие текста в файле.

cat file-1.txt

Если эта команда не дает никакого вывода, file-1.txt снова пуст, вы успешно откатили свой репозиторий до предыдущей версии.

Резервное копирование в несколько хранилищ

Хранение резервных копий на нескольких удаленных ресурсах является общей практикой обеспечения безопасности данных на протяжении многих лет. Тем не менее, процесс резервного копирования файлов в несколько точек может оказаться утомительным и привести к снижению производительности. Однако существует ряд сторонних инструментов резервного копирования, которые могут обеспечить быстрое решение для бэкапа данных в несколько мест в облаке.

Читайте также: Важность удаленного резервного копирования

Чтобы продемонстрировать эту функциональность в Duplicacy, добавьте второе хранилище объектов в репозиторий на server-01. Вы не сможете этого сделать через команду init, потому что этот репозиторий уже был инициирован Duplicacy и связан с первым хранилищем. Для подобных сценариев вам нужно использовать команду add, которая соединяет уже инициализированный репозиторий с другим хранилищем.

Эта команда имеет такой синтаксис:

duplicacy add storage_id repository_id s3://region@endpoint/example_storage_02

Она очень похожа на команду init, основное отличие заключается в том, что для add нужно указать идентификатор нового хранилища. Когда вы запускали команду init, Duplicacy назначил идентификатор по умолчанию для вашего первого хранилища. Имя, которое вы присваиваете второму хранилищу, может быть любым, но полезнее выбрать описательное имя, чтобы в дальнейшем вы могли легко отличить хранилища друг от друга.

Добавьте второе хранилище в репозиторий:

duplicacy add space_02 project_01 s3://nyc3@nyc3.your-object-storage.com/example_storage_02

Теперь репозиторий поддерживает еще одно хранилище объектов. Рекомендуется сначала создать резервную копию в хранилище по умолчанию, а затем с помощью команды copy скопировать эту резервную копию во второе хранилище:

duplicacy backup
duplicacy copy -from default -to space_02

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

Заключение

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

Если вам интересно узнать больше о том, как работает Duplicacy, вы можете обратиться к вики проекта на GitHub.

Читайте также:

Tags: ,