sql >> Base de Datos >  >> RDS >> Mysql

Una comparación entre el complemento de clonación de MySQL y Xtrabackup

En uno de nuestros blogs anteriores, explicamos cómo se puede usar el complemento de clonación, una de las nuevas características que se mostraron en MySQL 8.0.17, para reconstruir un esclavo de replicación. Actualmente, la herramienta de acceso para eso, así como para las copias de seguridad, es Xtrabackup. Pensamos que es interesante comparar cómo funcionan y se comportan esas herramientas.

Comparación de rendimiento

Lo primero que decidimos probar es cómo funcionan ambos cuando se trata de almacenar la copia de los datos localmente. Usamos AWS y la instancia m5d.metal con dos SSD NVMe y ejecutamos el clon en copia local:

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

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

Luego probamos Xtrabackup e hicimos la copia local:

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

Como puede ver, el tiempo requerido para copiar los datos fue básicamente el mismo. En ambos casos la limitación era el hardware, no el software.

La transferencia de datos a otro servidor será el caso de uso más común para ambas herramientas. Puede ser un esclavo que desee aprovisionar o reconstruir. En el futuro puede ser una copia de seguridad, Clone Plugin no tiene esa funcionalidad a partir de ahora, pero estamos bastante seguros de que en el futuro alguien hará posible su uso como herramienta de copia de seguridad. Dado que el hardware es la limitación para la copia de seguridad local en ambos casos, el hardware también será una limitación para la transferencia de datos a través de la red. Según su configuración, podría ser la red, la E/S del disco o la CPU.

En una operación intensiva de E/S, la CPU es el cuello de botella menos común. Esto hace que sea bastante común cambiar parte de la utilización de la CPU por la reducción del tamaño del conjunto de datos. Puedes lograr eso a través de la compresión. Si se hace sobre la marcha, todavía tiene que leer la misma cantidad de datos pero envía menos (ya que está comprimido) a través de la red. Luego, tendrás que descomprimirlo y anotarlo. También es posible que los propios archivos estén comprimidos. En ese caso, reduce la cantidad de datos leídos, transferidos y escritos en el disco.

Tanto Clone Plugin como Xtrabackup vienen con una compresión sobre la marcha (nos gustaría agradecer a Kenny Gryp, quien nos corrigió en esta parte). En Clone Plugin, puede habilitarlo a través de clone_enable_compression, que está deshabilitado de forma predeterminada. Xtrabackup también puede utilizar herramientas externas para comprimir los datos. En el caso de las tablas InnoDB comprimidas, la compresión externa no supondrá una gran diferencia, por lo que ambas herramientas deberían funcionar de manera similar en caso de que el ancho de banda de la red sea el factor limitante.

Comparación de usabilidad

El rendimiento es solo una cosa para comparar, hay muchas otras, como la facilidad de uso de las herramientas. En ambos casos hay varios pasos que tienes que realizar. Para el complemento de clonación es:

  1. Instalar el complemento en todos los nodos
  2. Crear usuarios en los nodos donante y receptor
  3. Configurar la lista de donantes en el receptor

Esos tres pasos deben realizarse una vez. Cuando están configurados, puede usar el complemento de clonación para copiar los datos. Según el sistema de inicio, es posible que deba iniciar el nodo MySQL después de que se haya completado el proceso de clonación. Esto no es necesario si, como en el caso de systemd, MySQL se reiniciará automáticamente.

Xtrabackup requiere un par de pasos más para hacer las cosas.

  1. Instalar el software en todos los nodos
  2. Crear usuario en el donante

Esos dos pasos deben ejecutarse una vez. Para cada copia de seguridad, debe ejecutar los siguientes pasos:

  1. Configurar transmisión en red. Una forma simple y segura sería usar SSH, algo como:
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/"

Descubrimos, sin embargo, que para discos duros más rápidos, con SSH de subproceso único, la CPU se convierte en un cuello de botella. La configuración de netcat requiere un paso adicional en el receptor para garantizar que netcat esté activo, escuchando y redirigiendo el tráfico al software adecuado (xbstream).

  1. Detener MySQL en el nodo receptor

  2. Ejecute Xtrabackup

  3. Aplicar registros de InnoDB

  4. Copiar los datos

  5. Inicie MySQL en el nodo receptor

Como puede ver, Xtrabackup requiere que se tomen más medidas.

Consideraciones de seguridad

El complemento de clonación se puede configurar para usar SSL para la transferencia de datos, aunque de manera predeterminada usa texto sin formato. Es posible clonar los tablespaces cifrados, pero no hay opción para cifrar, por ejemplo, el clon local. El usuario tendría que hacerlo por separado, después de que se complete el proceso de clonación.

Xtrabackup en sí mismo no proporciona ningún tipo de seguridad. La seguridad está determinada por la forma en que transmite los datos. Si usa SSH para la transmisión, los datos en tránsito se cifrarán. Si decide utilizar netcat, se enviará como texto sin formato. Por supuesto, si los datos están encriptados en tablespaces, ya están protegidos, como en el caso del complemento Clone. Xtrabackup también se puede usar junto con el cifrado sobre la marcha para garantizar que sus datos también se cifren en reposo.

Características del complemento

Clone Plugin es un producto nuevo, todavía en una fase infantil. Su tarea principal es proporcionar formas de aprovisionar nodos en InnoDB Cluster y lo hace muy bien. Para otras tareas, como copias de seguridad o aprovisionamiento de esclavos de replicación, se puede usar hasta cierto punto, pero tiene varias limitaciones. Cubrimos algunos de ellos en nuestro blog anterior, por lo que no lo repetiremos aquí, pero el más grave, cuando se habla de aprovisionamiento y copias de seguridad, es que solo se clonan las tablas de InnoDB. Si usa cualquier otro motor de almacenamiento, realmente no puede usar el complemento Clone. Por otro lado, Xtrabackup felizmente realizará copias de seguridad y transferirá los motores de almacenamiento más utilizados:InnoDB, MyISAM (desafortunadamente, todavía se usa en muchos lugares) y CSV. Xtrabackup también viene con un conjunto de herramientas diseñadas para ayudar a transmitir los datos de un nodo a otro o incluso transmitir copias de seguridad a depósitos S3.

Para resumir, cuando se trata de realizar copias de seguridad de datos y aprovisionar esclavos de replicación, xtrabackup es y probablemente seguirá siendo la elección más popular. Por otro lado, Clone Plugin, lo más probable es que mejore y evolucione. Veremos qué depara el futuro y cómo se verán las cosas dentro de un año.

Háganos saber si tiene alguna idea sobre el complemento de clonación, estamos muy interesados ​​en ver su opinión sobre esta nueva herramienta.