Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

В тази бележка се разглеждат средства за архивиране, които извършват резервно копиране чрез създаване на архиви на резервен сървър.

От тези, които отговарят на изискванията, са duplicity (към който има удобен интерфейс под формата на deja dup) и duplicati.

Още едно доста забележително средство за архивиране е dar, но тъй като има доста обширен списък от опции — методът на тестване покрива едва 10% от това, на което е способен — не го тестваме в рамките на текущия цикъл.

Очаквани резултати

Тъй като и двата кандидата така или иначе създават архиви, ориентиранието може да бъде обикновеният tar.

Допълнително ще оценим колко добре се оптимизира съхранението на данни на сървъра за съхранение чрез създаване на резервни копия, съдържащи само разликата между пълно копие и текущото състояние на файловете, или между предишни и текущи архиви (инкрементални, декрементални и т.н.).

Поведение при създаване на резервни копия:

  1. Сравнително малко на брой файлове на сървъра за съхранение на резервни копия (сравнимо с броя на резервните копия или размера на данните в GB), но с достатъчно голям размер (десетки до стотици мегабайти).
  2. Размерът на репозитория ще включва само промените — дубликатите няма да се съхраняват, така че размерът на репозитория ще бъде по-малък в сравнение с работата на софтуера на базата на rsync.
  3. Очаква се голямо натоварване на процесора при използване на компресия и/или криптиране, както и вероятно достатъчно голямо натоварване на мрежата и дисковата подсистема, ако процесът на архивиране и/или криптиране работи на сървъра за съхранение на резервни копия.

Като еталонна стойност ще стартираме следната команда:

cd /src/dir; tar -cf - * | ssh backup_server "cat > /backup/dir/archive.tar"

Резултатите от изпълнението са следните:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Времето за изпълнение е 3m12s. Ясно е, че скоростта е уплътнена от дисковата подсистема на сървъра за съхранение на резервни копия, както и в примера с rsync. Само малко по-бързо, тъй като записът става в един файл.

Също така, за оценка на компресията, ще стартираме същия вариант, но ще включим компресия на страната на сървъра за резервно копие:

cd /src/dir; tar -cf - * | ssh backup_server "gzip > /backup/dir/archive.tgz"

Резултатите са такива:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Времето за изпълнение е 10m11s. Вероятно, тясното място е еднопоточният компресор на входящата страна.

Същият екип, но с преминаване на компресията на сървъра с изходните данни, за да се провери хипотезата, че тясното място е однопоточният компресор.

cd /src/dir; tar -czf - * | ssh backup_server "cat > /backup/dir/archive.tgz"

Получиха се така:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Времето за изпълнение беше 9m37s. Ясно се вижда натоварването на едното ядро от компресора, тъй като скоростта на предаване по мрежата и натоварването на дисковата подсистема на источника са сходни.

За оценка на криптирането можете да използвате openssl или gpg, добавяйки допълнителна команда openssl или gpg в pipe. За ориентир ще бъде такава команда:

cd /src/dir; tar -cf - * | ssh backup_server "gzip | openssl enc -e -aes256 -pass pass:somepassword -out /backup/dir/archive.tgz.enc"

Резултатите излязоха такива:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Времето за изпълнение се оказа 10m30s, тъй като бяха стартирани 2 процеса на приемащата страна – отново тясното място е однопоточният компресор, плюс малки разходи за криптиране.

UPD: По молба на bliznezz добавям тестовете с pigz. Ако се използва само компресор – получи се за 6m30s, а ако добавим и криптиране – около 7m. Провалът на долната графика – неосвободен дисков кеш:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Тестване на duplicity

Duplicity е софтуер на python за резервно копиране, чрез създаване на криптирани архиви във формат tar.

За инкрементални архиви се прилага librsync, следователно, можем да очакваме поведение, описано в предишната бележка на цикъла.

Резервните копия могат да бъдат криптирани и подписвани с помощта на gnupg, което е важно при използването на различни доставчици за съхранение на резервни копия (s3, backblaze, gdrive и т.н.)

Нека видим какви ще бъдат резултатите:

Така изглеждат резултатите при стартиране без криптиране

спойлер

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Време на работа на всеки тестов стартиращ процес:

Стартиране 1
Стартиране 2
Стартиране 3

16m33s
17m20s
16м30с

8m29s
9м3с
8m45s

5m21s
6m04s
5m53s

А ето резултатите при включено криптиране gnupg, с ключ размер 2048 бита:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Времето на работа с одни и същи данни, с криптиране:

Стартиране 1
Стартиране 2
Стартиране 3

17m22s
17m32s
17m28s

8m52s
9m13s
9м3с

5m48s
3m33s
5m30s

Беше указан размерът на блока – 512 мегабайта, което ясно се вижда на графиките; натоварването на процесора фактически се задържа на ниво 50%, така че програмата използва не повече от едно процесорно ядро.

Също така, доста добре се вижда принципът на работа на програмата: взеха се парче данни, компресираха го, изпратиха го на сървъра за съхранение на резервни копия, който може да бъде доста бавен.
Още една особеност – предсказуемото време на работа на програмата, което зависи само от размера на променените данни.

Включването на криптиране не увеличи особено времето за работа на програмата, но увеличи натоварването на процесора с около 10%, което може да се счита за доста приятен бонус.

За съжаление, тази програма не успя коректно да открие ситуацията с прекръстването на директорията, и полученият размер на репозиторията се оказа равен на размера на промените (т.е. всички 18гб), но възможността за използване на неподписан сървър за архивиране однозначно компенсира такова поведение.

Тестване на duplicati

Този софтуер е написан на C# и се стартира, използвайки библиотеките на Mono. Има GUI, както и CLI версия.

Примерният списък с основни функции е близък до duplicity, включително различни доставчици за съхранение на резервни копия, но, за разлика от duplicity, повечето функции са достъпни без допълнителни средства. Дали това е плюс или минус — зависи от конкретния случай, но за новаците вероятно е по-лесно да имат пред себе си списък с всички функции, отколкото да инсталират пакети за python, както е в случая с duplicity.

Още един малък нюанс — програмата активно записва локална база sqlite от името на потребителя, който стартира архивирането, затова е нужно допълнително внимание при задаването на правилната база всеки път при стартиране на процеса с CLI. При работа чрез GUI или WEBGUI детайлите ще бъдат скрити от потребителя.

Нека видим какви показатели може да предостави това решение:

Ако изключим криптирането (което WEBGUI не препоръчва), резултатите са следните:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Време на работа:

Стартиране 1
Стартиране 2
Стартиране 3

20м43с
20м13с
20м28с

5m21s
3m33s
5m35s

7м36с
7м54с
7м49с

С включено криптиране, използвайки aes, получаваме следните резултати:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Време на работа:

Стартиране 1
Стартиране 2
Стартиране 3

29м9с
30м1с
29м54с

5м29с
6м2с
5м54с

8м44с
9м12с
9м1с

Ако се използва външна програма gnupg, резултатите са следните:

Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati

Стартиране 1
Стартиране 2
Стартиране 3

26м6с
26м35с
26м17с

5м20с
5m48s
3m33s

8м12с
8м42с
8м15с

Както се вижда — програмата може да работи в няколко потока, но от това не става по-производителна, а при сравняване на работата на криптиране — стартирането на външна програма
беше по-бързо от използването на библиотеката от комплекта Mono. Вероятно това се дължи на факта, че външната програма е по-добре оптимизирана.

Приятен е фактът, че размерът на репозитория заема точно толкова, колкото реално бяха променените данни, т.е. duplicati откри преименуването на директорията и коректно обработи тази ситуация. Това може да се види при изпълнението на втория тест.

Като цяло, впечатленията от програмата са достатъчно положителни, включително достатъчна дружелюбност към новаците.

Резултати

И двамата кандидати работиха сравнително бавно, но в сравнение с обикновения tar, има напредък, поне при duplicati. Цената на този напредък също е ясна — значителна натовареност
на процесора. Като цяло, няма особени отклонения в прогнозиране на резултатите.

Изводи

Ако не е необходимо да бързате, и също така имате резерв по процесора — подхожда всяко от разгледаните решения, във всеки случай е извършена достатъчно голяма работа, която не трябва да се повтаря чрез написването на обвиващи скриптове над tar. Наличието на криптиране е изключително необходимо свойство, ако сървърът за съхранение на резервни копия няма как да бъде напълно доверен.

Ако сравняваме с решения, основани на rsync — производителността може да бъде няколко пъти по-лоша, въпреки че чистият tar работи по-бързо от rsync с 20-30%.
Има икономия на размера на репозитория, но само при duplicati.

Анонс

Резервно копиране, част 1: Защо е необходимо резервното копиране, преглед на методите и технологиите
Архивиране, част 2: Преглед и тестване на инструменти за архивиране на базата на rsync
Резервно копиране, част 3: Преглед и тестване на duplicity, duplicati, deja dup
Резервно копие, част 4: Преглед и тестване на zbackup, restic, borgbackup
Резервно копиране, част 5: Тестване на bacula и veeam backup for linux
Резервно копиране, част 6: Сравнение на инструменти за резервно копиране
Резервно копиране, част 7: Изводи

Автор на публикацията: Павел Демкович

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster