Mysql
 sql >> Base de données >  >> RDS >> Mysql

Une comparaison entre le plugin MySQL Clone et Xtrabackup

Dans l'un de nos blogs précédents, nous avons expliqué comment Clone Plugin, l'une des nouvelles fonctionnalités présentées dans MySQL 8.0.17, peut être utilisé pour reconstruire un esclave de réplication. Actuellement, l'outil de référence pour cela, ainsi que pour les sauvegardes, est Xtrabackup. Nous avons pensé qu'il était intéressant de comparer le fonctionnement et le comportement de ces outils.

Comparer les performances

La première chose que nous avons décidé de tester est la façon dont les deux fonctionnent lorsqu'il s'agit de stocker la copie des données localement. Nous avons utilisé AWS et l'instance m5d.metal avec deux SSD NVMe et nous avons exécuté le clone sur une copie locale :

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

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

Puis nous avons testé Xtrabackup et fait la copie locale :

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

Comme vous pouvez le voir, le temps nécessaire pour copier les données était fondamentalement le même. Dans les deux cas, la limitation était le matériel, pas le logiciel.

Le transfert de données vers un autre serveur sera le cas d'utilisation le plus courant pour les deux outils. Il peut s'agir d'un esclave que vous souhaitez provisionner ou reconstruire. À l'avenir, il pourrait s'agir d'une sauvegarde, Clone Plugin n'a pas une telle fonctionnalité pour le moment, mais nous sommes presque sûrs qu'à l'avenir, quelqu'un permettra de l'utiliser comme outil de sauvegarde. Étant donné que le matériel est la limitation de la sauvegarde locale dans les deux cas, le matériel sera également une limitation pour le transfert des données sur le réseau. Selon votre configuration, il peut s'agir du réseau, des E/S de disque ou du processeur.

Dans une opération gourmande en E/S, le processeur est le goulot d'étranglement le moins courant. Il est donc assez courant d'échanger une partie de l'utilisation du processeur contre une réduction de la taille de l'ensemble de données. Vous pouvez y parvenir grâce à la compression. Si cela se fait à la volée, vous devez toujours lire la même quantité de données mais vous en envoyez moins (car elles sont compressées) sur le réseau. Ensuite, vous devrez le décompresser et l'écrire. Il est également possible que les fichiers eux-mêmes soient compressés. Dans ce cas, vous réduisez la quantité de données lues, transférées et écrites sur le disque.

Clone Plugin et Xtrabackup sont livrés avec une compression à la volée (nous tenons à remercier Kenny Gryp, qui nous a corrigés sur ce point). Dans Clone Plugin, vous pouvez l'activer via clone_enable_compression, qui est désactivé par défaut. Xtrabackup peut également utiliser des outils externes pour compresser les données. Dans le cas de tables InnoDB compressées, la compression externe ne fera pas trop de différence, les deux outils doivent donc fonctionner de la même manière si la bande passante du réseau est le facteur limitant.

Comparaison de l'utilisabilité

La performance n'est qu'une chose à comparer, il y en a beaucoup d'autres comme la facilité d'utilisation des outils. Dans les deux cas, vous devez effectuer plusieurs étapes. Pour le plugin Clone, c'est :

  1. Installer le plugin sur tous les nœuds
  2. Créer des utilisateurs sur les nœuds donneur et récepteur
  3. Configurer la liste des donateurs sur le récepteur

Ces trois étapes doivent être effectuées une fois. Lorsqu'ils sont définis, vous pouvez utiliser Clone Plugin pour copier les données. Sur la base du système d'initialisation, vous devrez peut-être démarrer le nœud MySQL une fois le processus de clonage terminé. Ce n'est pas nécessaire si, comme dans le cas de systemd, MySQL sera automatiquement redémarré.

Xtrabackup nécessite quelques étapes supplémentaires pour faire avancer les choses.

  1. Installer le logiciel sur tous les nœuds
  2. Créer un utilisateur sur le donateur

Ces deux étapes doivent être exécutées une fois. Pour chaque sauvegarde, vous devez exécuter les étapes suivantes :

  1. Configurer le streaming réseau. Un moyen simple et sécurisé serait d'utiliser SSH, quelque chose comme :
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/"

Nous avons constaté, cependant, que pour les disques durs plus rapides, avec SSH à un seul thread, le processeur devient un goulot d'étranglement. La configuration de netcat nécessite une étape supplémentaire sur le récepteur pour s'assurer que netcat est opérationnel, écoutant et redirigeant le trafic vers le logiciel approprié (xbstream).

  1. Arrêter MySQL sur le nœud récepteur

  2. Exécuter Xtrabackup

  3. Appliquer les journaux InnoDB

  4. Recopier les données

  5. Démarrer MySQL sur le nœud récepteur

Comme vous pouvez le voir, Xtrabackup nécessite plus d'étapes à suivre.

Considérations de sécurité

Clone Plugin peut être configuré pour utiliser SSL pour le transfert de données même si par défaut il utilise du texte brut. Le clonage des espaces de table chiffrés est possible mais il n'y a pas d'option pour chiffrer, par exemple, le clone local. L'utilisateur devra le faire séparément, une fois le processus de clonage terminé.

Xtrabackup lui-même ne fournit aucune sécurité. La sécurité est déterminée par la façon dont vous diffusez les données. Si vous utilisez SSH pour le streaming, les données en transit seront cryptées. Si vous décidez d'utiliser netcat, il sera envoyé sous forme de texte brut. Bien sûr, si les données sont chiffrées dans des tablespaces, elles sont déjà sécurisées, tout comme dans le cas du Clone Plugin. Xtrabackup peut également être utilisé avec un chiffrement à la volée pour garantir que vos données sont également chiffrées au repos.

Fonctionnalités du plug-in

Clone Plugin est un nouveau produit, encore dans une phase infantile. Sa tâche principale est de fournir des moyens de provisionner des nœuds dans InnoDB Cluster et il le fait très bien. Pour d'autres tâches, comme les sauvegardes ou le provisionnement des esclaves de réplication, il peut être utilisé dans une certaine mesure mais il souffre de plusieurs limitations. Nous en avons couvert certains dans notre blog précédent, nous ne le répéterons donc pas ici, mais le plus grave, en ce qui concerne le provisionnement et les sauvegardes, est que seules les tables InnoDB sont clonées. Si vous utilisez un autre moteur de stockage, vous ne pouvez pas vraiment utiliser Clone Plugin. D'un autre côté, Xtrabackup se fera un plaisir de sauvegarder et de transférer les moteurs de stockage les plus couramment utilisés :InnoDB, MyISAM (malheureusement, il est encore utilisé dans de nombreux endroits) et CSV. Xtrabackup est également livré avec un ensemble d'outils destinés à faciliter la diffusion des données d'un nœud à l'autre ou même la sauvegarde en continu vers des compartiments S3.

Pour résumer, lorsqu'il s'agit de sauvegarder des données et de provisionner des esclaves de réplication, xtrabackup est et restera probablement le choix le plus populaire. D'autre part, Clone Plugin, très probablement, s'améliorera et évoluera. Nous verrons ce que l'avenir nous réserve et à quoi ressembleront les choses dans un an.

Faites-nous savoir si vous avez des idées sur le plugin Clone, nous sommes très intéressés de voir votre opinion sur ce nouvel outil.