В един от предишните ни блогове обяснихме как Clone Plugin, една от новите функции, показани в MySQL 8.0.17, може да се използва за възстановяване на роб за репликация. В момента основният инструмент за това, както и за архивиране, е Xtrabackup. Сметнахме, че е интересно да сравним как работят и се държат тези инструменти.
Сравняване на производителността
Първото нещо, което решихме да тестваме, е как се представят и двете, когато става въпрос за локално съхранение на копието на данните. Използвахме AWS и m5d.metal инстанция с два NVMe SSD и стартирахме клонинга към локално копие:
mysql> CLONE LOCAL DATA DIRECTORY='/mnt/clone/';
Query OK, 0 rows affected (2 min 39.77 sec)
След това тествахме Xtrabackup и направихме локалното копие:
rm -rf /mnt/backup/ ; time xtrabackup --backup --target-dir=/mnt/backup/ --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=16
200120 13:12:28 completed OK!
real 2m38.407s
user 0m45.181s
sys 4m18.642s
Както можете да видите, времето, необходимо за копиране на данните, е основно същото. И в двата случая ограничението беше хардуерът, а не софтуерът.
Прехвърлянето на данни към друг сървър ще бъде най-често срещаният случай на използване и за двата инструмента. Може да бъде роб, който искате да осигурите или възстановите. В бъдеще може да е резервно копие, Clone Plugin няма такава функционалност към момента, но сме сигурни, че в бъдеще някой ще направи възможно използването му като инструмент за архивиране. Като се има предвид, че хардуерът е ограничение за локално архивиране и в двата случая, хардуерът също ще бъде ограничение за прехвърляне на данни през мрежата. В зависимост от вашата настройка това може да бъде или мрежата, дисков вход/изход или процесор.
В I/O операции процесорът е най-рядко срещаното затруднение. Това прави доста обичайно да се търгува известно използване на процесора за намаляване на размера на набора от данни. Можете да постигнете това чрез компресия. Ако се прави в движение, все още трябва да четете същото количество данни, но изпращате по-малко от тях (тъй като са компресирани) по мрежата. След това ще трябва да го декомпресирате и да го запишете. Възможно е също така самите файлове да са компресирани. В този случай намалявате количеството данни, прочетени, прехвърлени и записани на диска.
И Clone Plugin, и Xtrabackup идват с компресия в движение (бихме искали да благодарим на Kenny Gryp, който ни поправи по този бит). В Clone Plugin можете да го активирате чрез clone_enable_compression, което е деактивирано по подразбиране. Xtrabackup може също да използва външни инструменти за компресиране на данните. В случай на компресирани таблици на InnoDB, външната компресия няма да направи твърде голяма разлика, така че и двата инструмента трябва да работят по подобен начин, в случай че честотната лента на мрежата е ограничаващият фактор.
Сравняване на използваемостта
Ефективността е само едно нещо за сравнение, има много други като лесни за използване инструментите. И в двата случая има няколко стъпки, които трябва да изпълните. За Clone Plugin това е:
- Инсталирайте приставката на всички възли
- Създавайте потребители както на донорни, така и на приемни възли
- Настройте списъка с донори на приемника
Тези три стъпки трябва да се извършат веднъж. Когато са зададени, можете да използвате Clone Plugin, за да копирате данните. Въз основа на системата init може да се наложи да стартирате MySQL възел, след като процесът на клониране приключи. Това не се изисква, ако, както в случая на systemd, MySQL ще се рестартира автоматично.
Xtrabackup изисква още няколко стъпки, за да свършите нещата.
- Инсталирайте софтуера на всички възли
- Създаване на потребител на донора
Тези две стъпки трябва да се изпълнят веднъж. За всяко архивиране трябва да изпълните следните стъпки:
- Конфигуриране на мрежово поточно предаване. Прост и сигурен начин би бил да използвате SSH, нещо като:
xtrabackup --backup --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=8 --stream=xbstream --target-dir=/mnt/backup/ | ssh [email protected] "xbstream -x -C /mnt/backup/"
Открихме обаче, че за по-бързи твърди дискове, с еднонишков SSH, процесорът се превръща в пречка. Настройването на netcat изисква допълнителна стъпка на приемника, за да се гарантира, че netcat работи, слушане и пренасочване на трафика към правилния софтуер (xbstream).
-
Спрете MySQL на приемния възел
-
Изпълнете Xtrabackup
-
Прилагане на регистрационни файлове на InnoDB
-
Копирайте обратно данните
-
Стартирайте MySQL на приемния възел
Както можете да видите, Xtrabackup изисква повече стъпки, за да бъдат предприети.
Съображения за сигурност
Clone Plugin може да бъде конфигуриран да използва SSL за пренос на данни, въпреки че по подразбиране използва обикновен текст. Клонирането на криптираните пространства за таблици е възможно, но няма опция за криптиране, например, локалният клонинг. Потребителят ще трябва да го направи отделно, след като процесът на клониране приключи.
Самото Xtrabackup не осигурява никаква сигурност. Сигурността се определя от начина, по който предавате данните. Ако използвате SSH за стрийминг, данните в транзит ще бъдат криптирани. Ако решите да използвате netcat, той ще бъде изпратен като обикновен текст. Разбира се, ако данните са криптирани в пространства за таблици, те вече са защитени, точно както в случая с Clone Plugin. Xtrabackup може също да се използва заедно с криптиране в движение, за да се гарантира, че вашите данни са криптирани и в покой.
Функции на приставката
Clone Plugin е нов продукт, все още в начална фаза. Неговата основна задача е да осигури начини за осигуряване на възли в InnoDB Cluster и го прави добре. За други задачи, като архивиране или осигуряване на подчинени устройства за репликация, може да се използва до известна степен, но страда от няколко ограничения. Разгледахме някои от тях в предишния ни блог, така че няма да го повтаряме тук, но най-сериозният, когато говорим за обезпечаване и архивиране, е, че се клонират само InnoDB таблици. Ако случайно използвате друг механизъм за съхранение, не можете да използвате Clone Plugin. От друга страна Xtrabackup с радост ще архивира и прехвърля най-често използваните машини за съхранение:InnoDB, MyISAM (за съжаление все още се използва на много места) и CSV. Xtrabackup се предлага и с набор от инструменти, които са предназначени да помогнат при поточно предаване на данните от възел на възел или дори при поточно архивиране в S3 кофи.
За да обобщим, когато става въпрос за архивиране на данни и осигуряване на подчинени устройства за репликация, xtrabackup е и най-вероятно все още ще бъде най-популярният избор. От друга страна, Clone Plugin най-вероятно ще се подобри и ще се развива. Ще видим какво носи бъдещето и как ще изглеждат нещата след една година.
Уведомете ни, ако имате някакви мисли относно Clone Plugin, много ни е интересно да видим какво е вашето мнение за този нов инструмент.