Mysql
 sql >> Database >  >> RDS >> Mysql

Un confronto tra MySQL Clone Plugin e Xtrabackup

In uno dei nostri blog precedenti abbiamo spiegato come Clone Plugin, una delle nuove funzionalità mostrate in MySQL 8.0.17, può essere utilizzata per ricostruire uno slave di replica. Attualmente lo strumento di riferimento per questo, oltre che per i backup, è Xtrabackup. Abbiamo pensato che fosse interessante confrontare come funzionano e come si comportano questi strumenti.

Confronto delle prestazioni

La prima cosa che abbiamo deciso di testare è il rendimento di entrambi quando si tratta di archiviare la copia dei dati in locale. Abbiamo utilizzato l'istanza AWS e m5d.metal con due SSD NVMe ed abbiamo eseguito il clone nella copia locale:

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

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

Poi abbiamo testato Xtrabackup e fatto la copia 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

Come puoi vedere, il tempo necessario per copiare i dati era sostanzialmente lo stesso. In entrambi i casi il limite era l'hardware, non il software.

Il trasferimento dei dati a un altro server sarà il caso d'uso più comune per entrambi gli strumenti. Può essere uno schiavo che desideri fornire o ricostruire. In futuro potrebbe essere un backup, Clone Plugin non ha tali funzionalità al momento, ma siamo abbastanza sicuri che in futuro qualcuno consentirà di usarlo come strumento di backup. Dato che l'hardware è la limitazione per il backup locale in entrambi i casi, l'hardware sarà anche una limitazione per il trasferimento dei dati attraverso la rete. A seconda della configurazione, potrebbe essere la rete, l'I/O del disco o la CPU.

In un'operazione ad alta intensità di I/O la CPU è il collo di bottiglia meno comune. Ciò rende abbastanza comune scambiare un po' di utilizzo della CPU con una riduzione delle dimensioni del set di dati. Puoi farlo attraverso la compressione. Se viene eseguito al volo, devi comunque leggere la stessa quantità di dati ma ne invii meno (poiché è compresso) sulla rete. Quindi, dovrai decomprimerlo e annotarlo. È anche possibile che i file stessi siano compressi. In tal caso riduci la quantità di dati letti, trasferiti e scritti su disco.

Sia Clone Plugin che Xtrabackup sono dotati di una compressione al volo (vorremmo ringraziare Kenny Gryp, che ci ha corretto su questo bit). In Clone Plugin puoi abilitarlo tramite clone_enable_compression, che è disabilitato per impostazione predefinita. Xtrabackup può anche utilizzare strumenti esterni per comprimere i dati. In caso di tabelle InnoDB compresse, la compressione esterna non farà molta differenza, quindi entrambi gli strumenti dovrebbero funzionare in modo simile nel caso in cui la larghezza di banda della rete sia il fattore limitante.

Confronto dell'usabilità

Le prestazioni sono solo una cosa da confrontare, ce ne sono molte altre come la facilità d'uso degli strumenti. In entrambi i casi ci sono diversi passaggi da eseguire. Per Clone Plugin è:

  1. Installa il plugin su tutti i nodi
  2. Crea utenti su entrambi i nodi donatore e ricevente
  3. Imposta l'elenco dei donatori sul ricevente

Questi tre passaggi devono essere eseguiti una volta. Quando sono impostati, puoi utilizzare Clone Plugin per copiare i dati. In base al sistema init potrebbe essere necessario avviare il nodo MySQL dopo il completamento del processo di clonazione. Questo non è richiesto se, come nel caso di systemd, MySQL verrà riavviato automaticamente.

Xtrabackup richiede un altro paio di passaggi per portare a termine le operazioni.

  1. Installa il software su tutti i nodi
  2. Crea utente sul donatore

Questi due passaggi devono essere eseguiti una volta. Per ogni backup devi eseguire i seguenti passaggi:

  1. Configura lo streaming di rete. Un modo semplice e sicuro sarebbe usare SSH, qualcosa come:
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/"

Abbiamo riscontrato, tuttavia, che per i dischi rigidi più veloci, con SSH a thread singolo, la CPU diventa un collo di bottiglia. La configurazione di netcat richiede un passaggio aggiuntivo sul ricevitore per garantire che netcat sia attivo, in ascolto e reindirizzamento del traffico al software appropriato (xbstream).

  1. Arresta MySQL sul nodo ricevitore

  2. Esegui Xtrabackup

  3. Applica i log di InnoDB

  4. Copia i dati

  5. Avvia MySQL sul nodo ricevitore

Come puoi vedere, Xtrabackup richiede più passaggi.

Considerazioni sulla sicurezza

Clone Plugin può essere configurato per utilizzare SSL per il trasferimento dei dati anche se per impostazione predefinita utilizza testo normale. La clonazione dei tablespace crittografati è possibile ma non è disponibile alcuna opzione per crittografare, ad esempio, il clone locale. L'utente dovrebbe farlo separatamente, dopo che il processo di clonazione è stato completato.

Xtrabackup stesso non fornisce alcuna sicurezza. La sicurezza è determinata dal modo in cui esegui lo streaming dei dati. Se utilizzi SSH per lo streaming, i dati in transito verranno crittografati. Se decidi di utilizzare netcat, verrà inviato come testo normale. Naturalmente, se i dati sono crittografati nei tablespace, sono già protetti, proprio come nel caso del plug-in Clone. Xtrabackup può anche essere utilizzato insieme alla crittografia al volo per garantire che i tuoi dati siano crittografati anche inattivi.

Funzionalità del plug-in

Clone Plugin è un nuovo prodotto, ancora in una fase iniziale. Il suo compito principale è fornire modi per eseguire il provisioning dei nodi in InnoDB Cluster e lo fa bene. Per altre attività, come i backup o il provisioning di slave di replica, può essere utilizzato in una certa misura, ma presenta diverse limitazioni. Ne abbiamo discussi alcuni nel nostro blog precedente, quindi non lo ripeteremo qui ma il più serio, quando si parla di provisioning e backup, è che vengono clonate solo le tabelle InnoDB. Se ti capita di utilizzare qualsiasi altro motore di archiviazione, non puoi davvero utilizzare Clone Plugin. D'altra parte, Xtrabackup eseguirà il backup e trasferirà felicemente i motori di archiviazione più comunemente utilizzati:InnoDB, MyISAM (purtroppo è ancora utilizzato in molti posti) e CSV. Xtrabackup include anche una serie di strumenti che hanno lo scopo di aiutare con lo streaming dei dati da un nodo all'altro o persino con il backup in streaming ai bucket S3.

Per riassumere, quando si tratta di eseguire il backup dei dati e il provisioning di slave di replica, xtrabackup è e molto probabilmente sarà ancora la scelta più popolare. D'altra parte, Clone Plugin, molto probabilmente, migliorerà e si evolverà. Vedremo cosa riserva il futuro e come saranno le cose tra un anno.

Facci sapere se hai qualche idea sul plug-in Clone, siamo molto interessati a vedere qual è la tua opinione su questo nuovo strumento.