Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ein Vergleich zwischen dem MySQL Clone Plugin und Xtrabackup

In einem unserer vorherigen Blogs haben wir erklärt, wie Clone Plugin, eine der neuen Funktionen, die in MySQL 8.0.17 gezeigt wurde, verwendet werden kann, um einen Replikations-Slave neu zu erstellen. Derzeit ist Xtrabackup das Tool der Wahl dafür sowie für Backups. Wir fanden es interessant zu vergleichen, wie diese Tools funktionieren und sich verhalten.

Leistungsvergleich

Als erstes haben wir uns entschieden zu testen, wie beide funktionieren, wenn es darum geht, die Kopie der Daten lokal zu speichern. Wir haben eine AWS- und m5d.metal-Instanz mit zwei NVMe-SSDs verwendet und den Klon auf eine lokale Kopie ausgeführt:

mysql> CLONE LOCAL DATA DIRECTORY='/mnt/clone/';

Query OK, 0 rows affected (2 min 39.77 sec)

Dann haben wir Xtrabackup getestet und die lokale Kopie erstellt:

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

Wie Sie sehen können, war die zum Kopieren der Daten benötigte Zeit im Wesentlichen gleich. In beiden Fällen war die Einschränkung die Hardware, nicht die Software.

Das Übertragen von Daten auf einen anderen Server wird der häufigste Anwendungsfall für beide Tools sein. Es kann ein Slave sein, den Sie versorgen oder umbauen möchten. In Zukunft kann es sich um ein Backup handeln, Clone Plugin hat derzeit keine solche Funktionalität, aber wir sind uns ziemlich sicher, dass es in Zukunft jemand ermöglichen wird, es als Backup-Tool zu verwenden. Da die Hardware in beiden Fällen die Einschränkung für die lokale Sicherung darstellt, ist die Hardware auch eine Einschränkung für die Übertragung der Daten über das Netzwerk. Abhängig von Ihrer Einrichtung kann es sich entweder um das Netzwerk, die Festplatten-E/A oder die CPU handeln.

In einem E/A-intensiven Betrieb ist die CPU der am wenigsten verbreitete Engpass. Daher ist es durchaus üblich, einen Teil der CPU-Auslastung gegen eine Reduzierung der Datensatzgröße einzutauschen. Sie können dies durch Komprimierung erreichen. Wenn es on-the-fly gemacht wird, müssen Sie immer noch die gleiche Datenmenge lesen, aber Sie senden weniger davon (da es komprimiert ist) über das Netzwerk. Dann müssen Sie es dekomprimieren und aufschreiben. Es ist auch möglich, dass die Dateien selbst komprimiert sind. In diesem Fall reduzieren Sie die Menge der gelesenen, übertragenen und auf die Festplatte geschriebenen Daten.

Sowohl Clone Plugin als auch Xtrabackup verfügen über eine spontane Komprimierung (wir möchten uns bei Kenny Gryp bedanken, der uns diesbezüglich korrigiert hat). Im Clone Plugin können Sie es über clone_enable_compression aktivieren, das standardmäßig deaktiviert ist. Xtrabackup kann auch externe Tools verwenden, um die Daten zu komprimieren. Bei komprimierten InnoDB-Tabellen macht die externe Komprimierung keinen allzu großen Unterschied, daher sollten beide Tools ähnlich funktionieren, falls die Netzwerkbandbreite der limitierende Faktor ist.

Vergleich der Benutzerfreundlichkeit

Leistung ist nur eine Sache, die verglichen werden muss, es gibt viele andere, wie zum Beispiel die einfache Verwendung von Tools. In beiden Fällen müssen Sie mehrere Schritte ausführen. Für Clone Plugin ist es:

  1. Installieren Sie das Plugin auf allen Knoten
  2. Erstellen Sie Benutzer auf Spender- und Empfängerknoten
  3. Spenderliste auf dem Empfänger einrichten

Diese drei Schritte müssen einmal durchgeführt werden. Wenn sie eingestellt sind, können Sie das Klon-Plugin verwenden, um die Daten zu kopieren. Basierend auf dem Init-System müssen Sie möglicherweise den MySQL-Knoten starten, nachdem der Klonvorgang abgeschlossen ist. Dies ist nicht erforderlich, wenn, wie im Fall von systemd, MySQL automatisch neu gestartet wird.

Xtrabackup erfordert ein paar weitere Schritte, um die Dinge zu erledigen.

  1. Installieren Sie die Software auf allen Knoten
  2. Benutzer auf Spender erstellen

Diese beiden Schritte müssen einmal ausgeführt werden. Für jede Sicherung müssen Sie folgende Schritte ausführen:

  1. Netzwerk-Streaming konfigurieren. Ein einfacher und sicherer Weg wäre die Verwendung von SSH, etwa so:
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/"

Wir haben jedoch festgestellt, dass bei schnelleren Festplatten mit Singlethread-SSH die CPU zum Engpass wird. Das Einrichten von netcat erfordert zusätzliche Schritte auf dem Empfänger, um sicherzustellen, dass netcat aktiv ist, zuhört und den Datenverkehr an die richtige Software (xbstream) umleitet.

  1. Beenden Sie MySQL auf dem Empfängerknoten

  2. Xtrabackup ausführen

  3. InnoDB-Protokolle anwenden

  4. Daten zurückkopieren

  5. Starten Sie MySQL auf dem Empfängerknoten

Wie Sie sehen können, erfordert Xtrabackup weitere Schritte.

Sicherheitsüberlegungen

Clone Plugin kann so konfiguriert werden, dass es SSL für die Datenübertragung verwendet, obwohl es standardmäßig Klartext verwendet. Das Klonen der verschlüsselten Tablespaces ist möglich, aber es gibt keine Möglichkeit, beispielsweise den lokalen Klon zu verschlüsseln. Der Benutzer müsste dies separat tun, nachdem der Klonvorgang abgeschlossen ist.

Xtrabackup selbst bietet keine Sicherheit. Die Sicherheit wird dadurch bestimmt, wie Sie die Daten streamen. Wenn Sie SSH zum Streamen verwenden, werden die übertragenen Daten verschlüsselt. Wenn Sie sich für netcat entscheiden, wird es als Klartext gesendet. Wenn die Daten in Tablespaces verschlüsselt sind, sind sie natürlich bereits gesichert, genau wie im Fall des Clone-Plugins. Xtrabackup kann auch zusammen mit der On-the-Fly-Verschlüsselung verwendet werden, um sicherzustellen, dass Ihre Daten auch im Ruhezustand verschlüsselt sind.

Plugin-Funktionen

Clone Plugin ist ein neues Produkt, noch in der Anfangsphase. Seine Hauptaufgabe besteht darin, Möglichkeiten zur Bereitstellung von Knoten im InnoDB-Cluster bereitzustellen, und das tut es gut. Für andere Aufgaben, wie Backups oder die Bereitstellung von Replikations-Slaves, kann es in gewissem Umfang verwendet werden, leidet jedoch unter mehreren Einschränkungen. Wir haben einige davon in unserem vorherigen Blog behandelt, also werden wir sie hier nicht wiederholen, aber der schwerwiegendste, wenn es um Bereitstellung und Backups geht, ist, dass nur InnoDB-Tabellen geklont werden. Wenn Sie zufällig eine andere Speicher-Engine verwenden, können Sie Clone Plugin nicht wirklich verwenden. Andererseits sichert und überträgt Xtrabackup gerne die am häufigsten verwendeten Speicher-Engines:InnoDB, MyISAM (leider wird es immer noch an vielen Stellen verwendet) und CSV. Xtrabackup wird auch mit einer Reihe von Tools geliefert, die beim Streamen der Daten von Knoten zu Knoten oder sogar beim Streamen von Backups in S3-Buckets helfen sollen.

Um es zusammenzufassen, wenn es um die Sicherung von Daten und die Bereitstellung von Replikations-Slaves geht, ist und wird xtrabackup höchstwahrscheinlich immer noch die beliebteste Wahl sein. Auf der anderen Seite wird sich Clone Plugin höchstwahrscheinlich verbessern und weiterentwickeln. Wir werden sehen, was die Zukunft bringt und wie es in einem Jahr aussehen wird.

Lassen Sie uns wissen, wenn Sie irgendwelche Gedanken zum Clone Plugin haben, wir sind sehr an Ihrer Meinung zu diesem neuen Tool interessiert.