Резервно копиране, част 2: Преглед и тест на средства за резервно копиране, базирани на rsync

Резервно копиране, част 2: Преглед и тест на средства за резервно копиране, базирани на rsync
Тази бележка продължава

цикълът за резервно копиране

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

Както вече споменахме в първата статия, съществува значителен брой програми за резервно копиране, основани на rsync.

От онези, които най-добре отговарят на нашите условия, ще разгледам 3: rdiff-backup, rsnapshot и burp.

Тестови файлови набори

Файловите набори за тестове ще бъдат еднакви за всички кандидати, включително и бъдещите статии.

Първи набор: 10 ГБ медийни файлове и около 50 МБ — изходен код на сайта на php, размерите на файловете варират от няколко килобайта за изходния код до десетки мегабайти за медийните файлове. Целта е да се симулира сайт с т статичен контент.

Втори набор: произлиза от първия чрез преименуване на подкаталог с медийни файлове с размер 5 ГБ. Целта е да се проучат реакциите на системата за резервно копиране при преименуване на каталог.

Трети набор: получен от първия чрез изтриване на 3 ГБ медийни файлове и добавяне на нови 3 ГБ медийни файлове. Целта е да се изучи поведението на системата за резервно копиране при типични операции за обновление на сайта.

Получаване на резултатите

Всяко резервно копиране се извършва минимум 3 пъти и се съпровожда с изчистване на кешовете на файловата система с командите sync и echo 3 > /proc/sys/vm/drop_caches както на тестовия сървър, така и на сървъра за съхранение на резервни копия.

На сървъра, който ще бъде източник на резервните копия, е инсталирано софтуерно средство за мониторинг — netdata, с помощта на което ще бъде оценена натовареността на сървъра по време на копирането. Това е необходимо за оценка на натовареността на сървъра от процеса на резервно копиране.

Смятам също, че сървърът за съхранение на резервни копия е по-бавен по процесор от основния сървър, но разполага с по-обемисти дискове с относително ниска скорост на случайно записване — най-честата ситуация при резервно копиране. Поради това, че сървърът за резервни копия не трябва да извършва други задачи, освен резервно копиране, няма да следя натовареността му с netdata.

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

В момента те имат следните характеристикиПроцесор

sysbench --threads=2 --time=30 --cpu-max-prime=20000 cpu run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Тестът се изпълнява с следните опции:
Брой нишки: 2
Инициализиране на генератор на случайни числа от текущото време


Граница на простите числа: 20000

Инициализиране на работещи нишки...

Нишките стартираха!

Скорост на CPU:
    събития в секунда:  1081.62

Обща статистика:
    общо време:                          30.0013s
    общ брой събития:                   32453

Забавяне (ms):
         мин:                                    1.48
         средно:                                1.85
         макс:                                   9.84
         95-ти процентил:                     2.07
         сума:                              59973.40

Справедливост на нишките:
    събития (средно/стандартно отклонение):  16226.5000/57.50
    време на изпълнение (средно/стандартно отклонение): 29.9867/0.00

Оперативна памет, четене…

sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=read memory run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Тестът се изпълнява с следните опции:
Брой нишки: 4
Инициализиране на генератор на случайни числа от текущото време


Изпълняване на тест за скорост на паметта с следните опции:
  размер на блока: 1KiB
  общ размер: 102400MiB
  операция: четене
  обхват: глобален

Инициализиране на работещи нишки...

Нишките стартираха!

Общ брой операции: 104857600 (5837637.63 на секунда)

102400.00 MiB прехвърлени (5700.82 MiB/сек)


Обща статистика:
    общо време:                          17.9540s
    общ брой събития:                   104857600

Забавяне (ms):
         мин:                                    0.00
         средно:                                0.00
         макс:                                   66.08
         95-ти процентил:                     0.00
         сума:                              18544.64

Справедливост на нишките:
    събития (средно/стандартно отклонение):  26214400.0000/0.00
    време на изпълнение (средно/стандартно отклонение): 4.6362/0.12

… и запис

sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=write memory run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Тестът се изпълнява с следните опции:
Брой нишки: 4
Инициализиране на генератор на случайни числа от текущото време


Изпълняване на тест за скорост на паметта с следните опции:
  размер на блока: 1KiB
  общ размер: 102400MiB
  операция: запис
  обхват: глобален

Инициализиране на работещи нишки...

Нишките стартираха!

Общ брой операции: 91414596 (3046752.56 на секунда)

89272.07 MiB прехвърлени (2975.34 MiB/сек)


Обща статистика:
    общо време:                          30.0019s
    общ брой събития:                   91414596

Забавяне (ms):
         мин:                                    0.00
         средно:                                0.00
         макс:                                 1022.90
         95-ти процентил:                     0.00
         сума:                              66430.91

Справедливост на нишките:
    събития (средно/стандартно отклонение):  22853649.0000/945488.53
    време на изпълнение (средно/стандартно отклонение): 16.6077/1.76

Диск на сървъра с източник на данни

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Тестът се изпълнява с следните опции:
Брой потоци: 4
Инициализиране на генератора на произволни числа от текущото време


Допълнителни флагове за отваряне на файл: (няма)
128 файла, по 8MiB всеки
Общ размер на файловете: 1GiB
Размер на блока: 4KiB
Брой IO заявки: 0
Съотношение Четене/Запис за комбиниран произволен IO тест: 1.50
Периодичен FSYNC активиран, извикване на fsync() на всеки 100 заявки.
Извикване на fsync() в края на теста, активирано.
Използване на синхронен I/O режим
Извършване на произволен r/w тест
Инициализиране на работещите потоци...

Потоковете стартираха!


Операции с файлове:
    reads/s:                      4587.95
    writes/s:                     3058.66
    fsyncs/s:                     9795.73

Пропускна способност:
    четене, MiB/s:                  17.92
    записано, MiB/s:               11.95

Обща статистика:
    общо време:                          60.0241s
    общ брой събития:              1046492

Забавяне (ms):
         min:                                    0.00
         avg:                                    0.23
         max:                                   14.45
         95-ти процентил:                        0.94
         сума:                               238629.34

Справедливост на потоковете:
    събития (avg/stddev):           261623.0000/1849.14
    време на изпълнение (avg/stddev):   59.6573/0.00

Диск на сървъра за съхранение на резервни копия

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Тестът се изпълнява с следните опции:
Брой потоци: 4
Инициализиране на генератора на произволни числа от текущото време


Допълнителни флагове за отваряне на файл: (няма)
128 файла, по 8MiB всеки
Общ размер на файловете: 1GiB
Размер на блока: 4KiB
Брой IO заявки: 0
Съотношение Четене/Запис за комбиниран произволен IO тест: 1.50
Периодичен FSYNC активиран, извикване на fsync() на всеки 100 заявки.
Извикване на fsync() в края на теста, активирано.
Използване на синхронен I/O режим
Извършване на произволен r/w тест
Инициализиране на работещите потоци...

Потоковете стартираха!


Операции с файлове:
    reads/s:                      11.37
    writes/s:                     7.58
    fsyncs/s:                     29.99

Пропускна способност:
    четене, MiB/s:                  0.04
    записано, MiB/s:               0.03

Обща статистика:
    общо време:                          73.8868s
    общ брой събития:              3104

Забавяне (ms):
         min:                                    0.00
         avg:                                   78.57
         max:                                 3840.90
         95-ти процентил:                      297.92
         сума:                               243886.02

Справедливост на потоковете:
    събития (avg/stddev):           776.0000/133.26
    време на изпълнение (avg/stddev):   60.9715/1.59

Скорост на мрежата между сървърите

iperf3 -c backup
Connecting to host backup, port 5201
[  4] local x.x.x.x port 59402 connected to y.y.y.y port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   419 MBytes  3.52 Gbits/sec  810    182 KBytes
[  4]   1.00-2.00   sec   393 MBytes  3.30 Gbits/sec  810    228 KBytes
[  4]   2.00-3.00   sec   378 MBytes  3.17 Gbits/sec  810    197 KBytes
[  4]   3.00-4.00   sec   380 MBytes  3.19 Gbits/sec  855    198 KBytes
[  4]   4.00-5.00   sec   375 MBytes  3.15 Gbits/sec  810    182 KBytes
[  4]   5.00-6.00   sec   379 MBytes  3.17 Gbits/sec  765    228 KBytes
[  4]   6.00-7.00   sec   376 MBytes  3.15 Gbits/sec  810    180 KBytes
[  4]   7.00-8.00   sec   379 MBytes  3.18 Gbits/sec  765    253 KBytes
[  4]   8.00-9.00   sec   380 MBytes  3.19 Gbits/sec  810    239 KBytes
[  4]   9.00-10.00  sec   411 MBytes  3.44 Gbits/sec  855    184 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec  8100             sender
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec                  receiver

Методика на тестване

  1. На тестовия сървър се подготвя файловата система с първия тестови набор, а на сървъра за резервни копия при необходимост се инициализира хранилището.
    Започва процесът на резервно копиране и времето му се измерва.
  2. На тестовия сървър се извършва миграция на файловете до втория тестови набор. Започва процесът на резервно копиране и времето му се измерва.
  3. На тестовия сървър се извършва миграция до третия тестови набор. Започва процесът на резервно копиране и времето му се измерва.
  4. Полученият трети тестови набор става новият първи; стъпки 1-3 се повтарят още 2 пъти.
  5. Данните се въвеждат в обобщаваща таблица, добавят се графики с netdata.
  6. Съставя се отчет за отделния метод на резервно копиране.

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

Тъй като всички 3 кандидата се основават на една и съща технология (rsync), се очаква резултатите да бъдат близки до обичайния rsync, включително всички негови предимства, а именно:

  1. Файловете в хранилището ще се съхраняват "както са".
  2. Размерът на хранилището ще нараства само с разликата между резервните копия.
  3. Ще има сравнително голямо натоварване на мрежата при предаване на данни, както и малко натоварване на процесора.

Тестовият пробег на обичайния rsync ще се използва като еталон, резултатите му

са следнитеРезервно копиране, част 2: Преглед и тест на средства за резервно копиране, базирани на rsync

Тесните места бяха на сървъра за резервни данни, представени с диск на основата на HDD, което ясно се вижда на графиките под формата на зъбно колело.

Данните бяха копирани за 4 минути и 15 секунди.

Тестване на rdiff-backup

Първият кандидат е rdiff-backup, скрипт на python, който извършва резервно копиране на една директория в друга. В този процес актуалната резервна копия се съхранява 'както е', а предишните резервни копия се съхраняват в специална поддиректория инкрементално, което икономисва пространство.

Ще проверим типичния режим на работа, т.е. стартирането на процеса на резервно копиране се иницира от клиента, а на сървъра за резервно копиране се стартира процес, който приема данните.

Нека видим какво може в нашите условия.

Резервно копиране, част 2: Преглед и тест на средства за резервно копиране, базирани на rsync

Времето на работа на всяко тестово стартиране:

Първо стартиране
Второ стартиране
Трето стартиране

Първи набор
16m32s
16m26s
16m19s

Втори набор
2h5m
2h10m
2h8m

Трети набор
2h9m
2h10m
2h10m

Rdiff-backup реагира доста болезнено на всяко голямо изменение на данни, също така не използва мрежата напълно.

Тестиране на rsnapshot

Вторият кандидат е rsnapshot, който представлява скрипт на perl, при основно изискване за ефективна работа — поддръжка на твърди връзки. Така се икономисва пространство на диска. Непроменените от предходното архивиране файлове ще се свържат с оригиналния файл чрез твърди връзки.

Също така логиката на процеса на резервно копиране е инвертирана: сървърът активно 'обикаля' своите клиенти и взима данните.

Резултати от теста

резултатите са следнитеРезервно копиране, част 2: Преглед и тест на средства за резервно копиране, базирани на rsync

Първо стартиране
Второ стартиране
Трето стартиране

Първи набор
4m22s
4m19s
4m16s

Втори набор
2m6s
2m10s
2m6s

Трети набор
1m18s
1m10s
1m10s

Работи много бързо, многократно по-бързо от rdiff-backup и много близо до чистия rsync.

Тестиране на burp

Още един вариант — реализация на C върху librsync — burp, с клиент-сървърна архитектура, включително удостоверяване на клиенти, а също така наличието на уеб интерфейс (не влиза в основния пакет). Една интересна особеност — резервно копиране без права за възстановяване на клиентите.

Нека погледнем напроизводителността.

Резервно копиране, част 2: Преглед и тест на средства за резервно копиране, базирани на rsync

Първо стартиране
Второ стартиране
Трето стартиране

Първи набор
11m21s
11m10s
10m56s

Втори набор
5m37s
5m40s
5m35s

Трети набор
3m33s
3m24s
3m40s

Работи два пъти по-бавно от rsnapshot, но също така е достатъчно бързо и със сигурност по-бързо от rdiff-backup. Графиките са малко зъбати — производителността отново е ограничена от дисковата подсистема на сървъра за резервни копия, макар че не е толкова изразена, колкото при rsnapshot.

Резултати

Размерите на репозиториите на всички кандидати бяха приблизително еднакви, т.е. първо растеж до 10 ГБ, след това до 15 ГБ, а след това до 18 ГБ и т.н., което е свързано с особеностите на работата на rsync. Също така е важно да се отбележи еднопоточността на всички кандидати (натоварването на процесора около 50% при двойноядрена машина). Всички 3 кандидата предлагаха възможност за възстановяване на последната резервна копия „както е“, т.е. можеше да се възстановяват файлове без използване на каквито и да било трети страни програми, включително тези, които са използвани за създаване на репозиториите. Това също е „родово наследство“ на rsync.

Изводи

Колкото по-сложна е системата за резервно копиране и колкото повече различни възможности предлага — толкова по-бавно ще работи, но за не толкова взискателни проекти всяка от тях ще е подходяща, освен, възможно, rdiff-backup.

Анонс

Тази бележка продължава цикъла за резервно копиране

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

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

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

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