W jednym z naszych poprzednich blogów wyjaśniliśmy, w jaki sposób Clone Plugin, jedna z nowych funkcji, które pojawiły się w MySQL 8.0.17, może zostać wykorzystana do odbudowania niewolnika replikacji. Obecnie najlepszym narzędziem do tego, a także do tworzenia kopii zapasowych, jest Xtrabackup. Pomyśleliśmy, że interesujące jest porównanie, jak działają i zachowują się te narzędzia.
Porównywanie wydajności
Pierwszą rzeczą, którą zdecydowaliśmy się przetestować, jest to, jak obie działają, jeśli chodzi o przechowywanie kopii danych lokalnie. Użyliśmy instancji AWS i m5d.metal z dwoma dyskami SSD NVMe i uruchomiliśmy klon do kopii lokalnej:
mysql> CLONE LOCAL DATA DIRECTORY='/mnt/clone/';
Query OK, 0 rows affected (2 min 39.77 sec)
Następnie przetestowaliśmy Xtrabackup i wykonaliśmy lokalną kopię:
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
Jak widać, czas potrzebny na skopiowanie danych był w zasadzie taki sam. W obu przypadkach ograniczeniem był sprzęt, a nie oprogramowanie.
Przesyłanie danych na inny serwer będzie najczęstszym przypadkiem użycia obu narzędzi. Może to być niewolnik, którego chcesz zaopatrzyć lub odbudować. W przyszłości może to być kopia zapasowa, Clone Plugin na razie nie ma takiej funkcjonalności, ale jesteśmy prawie pewni, że w przyszłości ktoś umożliwi jej użycie jako narzędzia do tworzenia kopii zapasowych. Biorąc pod uwagę, że sprzęt jest ograniczeniem dla lokalnego tworzenia kopii zapasowych w obu przypadkach, sprzęt będzie również ograniczał przesyłanie danych przez sieć. W zależności od konfiguracji może to być sieć, dyskowe wejścia/wyjścia lub procesor.
W operacjach intensywnie korzystających z operacji we/wy procesor jest najmniej powszechnym wąskim gardłem. To sprawia, że dość często wymienia się częściowe wykorzystanie procesora w celu zmniejszenia rozmiaru zestawu danych. Możesz to osiągnąć poprzez kompresję. Jeśli odbywa się to w locie, nadal musisz odczytać tę samą ilość danych, ale wysyłasz ich mniej (ponieważ są skompresowane) przez sieć. Następnie będziesz musiał go rozpakować i zapisać. Możliwe jest również, że same pliki są skompresowane. W takim przypadku zmniejszysz ilość danych odczytywanych, przesyłanych i zapisywanych na dysku.
Zarówno Clone Plugin, jak i Xtrabackup są wyposażone w kompresję w locie (chcielibyśmy podziękować Kenny'emu Grypowi, który poprawił nas w tym fragmencie). W Clone Plugin możesz to włączyć poprzez clone_enable_compression, który jest domyślnie wyłączony. Xtrabackup może również wykorzystywać zewnętrzne narzędzia do kompresji danych. W przypadku skompresowanych tabel InnoDB zewnętrzna kompresja nie zrobi zbyt dużej różnicy, więc oba narzędzia powinny działać w podobny sposób, jeśli przepustowość sieci jest czynnikiem ograniczającym.
Porównywanie użyteczności
Wydajność to tylko jedna rzecz do porównania, istnieje wiele innych, takich jak łatwe w użyciu narzędzia. W obu przypadkach musisz wykonać kilka kroków. W przypadku wtyczki Clone jest to:
- Zainstaluj wtyczkę na wszystkich węzłach
- Twórz użytkowników w węzłach dawcy i odbiorcy
- Ustaw listę darczyńców na odbiorcy
Te trzy kroki należy wykonać raz. Kiedy są ustawione, możesz użyć Clone Plugin do skopiowania danych. W oparciu o system init może być konieczne uruchomienie węzła MySQL po zakończeniu procesu klonowania. Nie jest to wymagane, jeśli, tak jak w przypadku systemd, MySQL zostanie automatycznie zrestartowany.
Xtrabackup wymaga jeszcze kilku kroków.
- Zainstaluj oprogramowanie na wszystkich węzłach
- Utwórz użytkownika na dawcy
Te dwa kroki należy wykonać raz. Dla każdej kopii zapasowej musisz wykonać następujące kroki:
- Skonfiguruj strumieniowanie sieciowe. Prostym i bezpiecznym sposobem byłoby użycie SSH, coś takiego:
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/"
Odkryliśmy jednak, że w przypadku szybszych dysków twardych z jednowątkowym SSH procesor staje się wąskim gardłem. Konfiguracja netcata wymaga wykonania dodatkowych czynności na odbiorniku, aby upewnić się, że netcat działa, nasłuchuje i przekierowuje ruch do odpowiedniego oprogramowania (xbstream).
-
Zatrzymaj MySQL w węźle odbiorczym
-
Uruchom Xtrabackup
-
Zastosuj logi InnoDB
-
Skopiuj dane
-
Uruchom MySQL w węźle odbiorczym
Jak widać, Xtrabackup wymaga podjęcia dalszych kroków.
Zagadnienia dotyczące bezpieczeństwa
Wtyczka Clone może być skonfigurowana do używania SSL do przesyłania danych, nawet jeśli domyślnie używa zwykłego tekstu. Klonowanie zaszyfrowanych obszarów tabel jest możliwe, ale nie ma możliwości zaszyfrowania np. lokalnego klonu. Użytkownik musiałby to zrobić osobno, po zakończeniu procesu klonowania.
Sam Xtrabackup nie zapewnia żadnych zabezpieczeń. Bezpieczeństwo zależy od tego, w jaki sposób przesyłasz strumieniowo dane. Jeśli używasz SSH do przesyłania strumieniowego, przesyłane dane będą szyfrowane. Jeśli zdecydujesz się użyć netcata, zostanie on wysłany jako zwykły tekst. Oczywiście, jeśli dane są zaszyfrowane w przestrzeniach tabel, są już zabezpieczone, podobnie jak w przypadku wtyczki Clone. Xtrabackup może być również używany wraz z szyfrowaniem w locie, aby zapewnić szyfrowanie danych również w spoczynku.
Funkcje wtyczek
Wtyczka Clone to nowy produkt, wciąż w fazie niemowlęcej. Jego głównym zadaniem jest zapewnienie sposobów udostępniania węzłów w klastrze InnoDB i robi to dobrze. W przypadku innych zadań, takich jak tworzenie kopii zapasowych lub udostępnianie urządzeń podrzędnych replikacji, może być używany do pewnego stopnia, ale ma kilka ograniczeń. Niektóre z nich omówiliśmy w naszym poprzednim blogu, więc nie będziemy tego tutaj powtarzać, ale najpoważniejszą z nich, jeśli chodzi o udostępnianie i tworzenie kopii zapasowych, jest to, że klonowane są tylko tabele InnoDB. Jeśli zdarzy ci się użyć innego silnika pamięci masowej, tak naprawdę nie możesz użyć wtyczki Clone. Z drugiej strony Xtrabackup z przyjemnością wykona kopie zapasowe i przeniesie najczęściej używane silniki pamięci masowej:InnoDB, MyISAM (niestety nadal jest używany w wielu miejscach) oraz CSV. Xtrabackup jest również wyposażony w zestaw narzędzi, które mają pomóc w przesyłaniu strumieniowym danych z węzła do węzła, a nawet przesyłaniu strumieniowym kopii zapasowych do zasobników S3.
Podsumowując, jeśli chodzi o tworzenie kopii zapasowych danych i udostępnianie niewolników replikacji, xtrabackup jest i najprawdopodobniej nadal będzie najpopularniejszym wyborem. Z drugiej strony Clone Plugin najprawdopodobniej ulegnie poprawie i ewoluuje. Zobaczymy, co przyniesie przyszłość i jak będzie wyglądać za rok.
Daj nam znać, jeśli masz jakieś przemyślenia na temat wtyczki Clone, jesteśmy bardzo zainteresowani, aby zobaczyć, jaka jest Twoja opinia na temat tego nowego narzędzia.