MariaDB
 sql >> Database >  >> RDS >> MariaDB

Test automatizzato del processo di aggiornamento per MySQL/MariaDB/Percona Server

Gli aggiornamenti sono sempre un compito difficile e che richiede tempo. Innanzitutto, dovresti testare la tua applicazione in un ambiente di test, quindi, idealmente, dovrai clonare il tuo attuale ambiente di produzione per questo. Quindi, è necessario elaborare un piano per eseguire l'aggiornamento che, a seconda dell'attività, potrebbe comportare zero tempi di inattività (o quasi zero), o anche pianificare una finestra di manutenzione per assicurarsi che se qualcosa va storto, influirà il minimo possibile.

Se vuoi fare tutte queste cose manualmente, c'è una grande possibilità di errore umano e il processo sarà lento. In questo blog vedremo come automatizzare i test per aggiornare i database MySQL, MariaDB o Percona Server utilizzando ClusterControl.

Tipo di upgrade

Esistono due tipi di potenziamenti:potenziamenti minori e potenziamenti maggiori.

Miglioramenti minori

Il primo, Minor Upgrade, è l'aggiornamento più comune e sicuro e, nella maggior parte dei casi, viene eseguito sul posto. Poiché nulla è sicuro al 100%, devi sempre disporre di backup e nodi slave di replica, quindi nel caso in cui qualcosa vada storto con l'aggiornamento e per qualche motivo non puoi eseguire il rollback/downgrade, puoi promuovere un nodo slave e i tuoi sistemi possono comunque lavorare senza interruzioni.

Puoi eseguire questo tipo di aggiornamento utilizzando ClusterControl. Per questo, vai su ClusterControl -> Seleziona il Cluster -> Gestisci -> Aggiornamenti.

Su ogni nodo selezionato, la procedura di aggiornamento:

  • Arresta nodo

  • Aggiorna nodo

  • Avvia nodo

Il nodo master in una topologia di replica non verrà aggiornato. Per aggiornare il Master, è necessario prima promuovere un altro nodo per diventare il nuovo Master.

Miglioramenti principali

Per gli aggiornamenti principali, non è consigliabile l'aggiornamento sul posto, poiché il rischio che qualcosa vada storto è troppo alto per un ambiente di produzione. Invece di ciò, puoi clonare il tuo attuale cluster di database e testare lì la tua applicazione e, al termine, puoi ricrearlo o persino creare un nuovo cluster nella nuova versione e cambiare il traffico quando è pronto. Esistono diversi approcci per questi aggiornamenti. Puoi aggiornare i nodi uno per uno o creare un cluster diverso replicando il traffico da quello attuale, puoi anche utilizzare i bilanciatori del carico per migliorare l'alta disponibilità e più opzioni. L'approccio migliore dipende dalla tolleranza ai tempi di fermo e dal Recovery Time Objective (RTO).

Non puoi eseguire gli aggiornamenti principali direttamente con ClusterControl, perché, come accennato, devi prima testare tutto per assicurarti che l'aggiornamento sia sicuro, ma puoi utilizzare diverse funzionalità di ClusterControl per fare questo compito più facile. Vediamo quindi alcune di queste caratteristiche.

Backup

I backup sono obbligatori prima di qualsiasi aggiornamento. Una buona politica di backup può evitare grossi problemi per l'azienda. Quindi, vediamo come ClusterControl può automatizzare questo.

Creazione di un backup

Vai a ClusterControl -> Seleziona il cluster -> Backup -> Crea backup.

Puoi creare un nuovo backup o configurarne uno pianificato.

Puoi scegliere diversi metodi di backup, a seconda della tecnologia del database, e, nella stessa sezione, puoi scegliere il server da cui eseguire il backup, dove vuoi archiviare il backup e se vuoi caricare il backup nel cloud (AWS, Azure o Google Cloud) nello stesso lavoro.

Puoi anche comprimere e crittografare il tuo backup e specificare il periodo di conservazione, tra le altre opzioni.

Nella sezione backup, puoi vedere lo stato di avanzamento del backup e informazioni come metodo, dimensione, posizione e altro.

Distribuzione di un ambiente di test

Per questo, non è necessario creare tutto da zero. Invece di questo, puoi usare ClusterControl per farlo in modo manuale o automatizzato.

Ripristina backup su host autonomo

Nella sezione Backup, puoi scegliere l'opzione "Ripristina e verifica su host standalone" per ripristinare un backup in un nodo separato.

Qui puoi specificare se vuoi che ClusterControl installi il software nel nuovo nodo e disabiliti il ​​firewall o AppArmor/SELinux (a seconda del sistema operativo). Per questo, è necessario un host (o VM) dedicato che non faccia parte del cluster.

È possibile mantenere il nodo attivo e funzionante oppure ClusterControl può arrestare il servizio database fino al successivo processo di ripristino. Al termine, vedrai il backup ripristinato/verificato nell'elenco dei backup contrassegnato da un segno di spunta.

Se non si desidera eseguire questa attività manualmente, è possibile pianificare questo processo utilizzando la funzione Verifica backup, per ripetere periodicamente questo processo in un processo di backup. Vedremo come farlo nella prossima sezione.

Verifica automatica del backup di ClusterControl

Per automatizzare questa attività, vai su ClusterControl -> Seleziona il tuo cluster -> Backup -> Crea backup e scegli l'opzione Backup pianificato.

La funzione di verifica automatica del backup è disponibile solo per i backup pianificati e il processo è lo stesso descritto in una sezione precedente. Nel secondo passaggio, assicurati di aver abilitato l'opzione Verifica backup e completa le informazioni richieste.

Quando il lavoro è terminato, puoi vedere l'icona di verifica nella sezione Backup ClusterControl, la stessa che avrai facendo la verifica in modo manuale, con la differenza che non ti serve preoccuparsi del compito di restauro. ClusterControl ripristinerà il backup ogni volta automaticamente e potrai testare la tua applicazione con i dati più recenti.

Ripristino automatico e Failover

Avendo abilitata la funzione Autorecovery, in caso di guasto, ClusterControl promuoverà il nodo slave più avanzato a master e ti avviserà del problema. Inoltre, esegue il failover del resto dei nodi slave per replicare dal nuovo server master.

Se nella topologia sono presenti Load Balancer, ClusterControl li riconfigura per applicare le modifiche alla topologia.

Puoi anche eseguire un failover manualmente, se necessario. Vai su ClusterControl -> Seleziona il Cluster -> Nodi -> Seleziona il Nodo da promuovere -> Azioni Nodo -> Promuovi Slave.

In questo modo, se qualcosa va storto durante l'aggiornamento, puoi utilizzare ClusterControl per risolverlo il prima possibile.

Automatizzazione delle cose con ClusterControl CLI

ClusterControl CLI, noto anche come s9s, è uno strumento da riga di comando introdotto in ClusterControl versione 1.4.1 per interagire, controllare e gestire i cluster di database utilizzando il sistema ClusterControl. ClusterControl CLI apre una porta per l'automazione del cluster in cui puoi integrarla facilmente con gli strumenti di automazione della distribuzione esistenti come Ansible, Puppet, Chef, ecc. Vediamo ora alcuni esempi di questo strumento.

Aggiorna

$ s9s cluster --cluster-id=19 \
--check-pkg-upgrades \
--log
$ s9s cluster --cluster-id=19 \
--available-upgrades \
--nodes='10.10.10.146' \
--log \
--print-json
$ s9s cluster --cluster-id=19 \
--upgrade-cluster \
--nodes='10.10.10.146' \
--log

Crea backup

$ s9s backup --create \
--backup-method=mysqldump \
--cluster-id=2 \
--nodes=10.10.10.146:3306 \
--on-controller \
--backup-directory=/storage/backups
--log

Ripristina backup

$ s9s backup --restore \
--cluster-id=19 \
--backup-id=3 \
--wait

Verifica backup

$ s9s backup --verify \
--backup-id=3 \
--test-server=10.10.10.151 \
--cluster-id=19 \
--log

Promuove il nodo slave

$ s9s cluster --promote-slave \
--cluster-id=19 \
--nodes='10.10.10.146' \
--log

Conclusione

Gli aggiornamenti sono necessari ma richiedono molto tempo. Distribuire un ambiente di test ogni volta che è necessario eseguire l'aggiornamento potrebbe essere un incubo ed è difficile mantenerlo aggiornato senza uno strumento di automazione.

ClusterControl consente di eseguire aggiornamenti minori o persino distribuire l'ambiente di test per rendere l'attività di aggiornamento più semplice e sicura. Puoi anche integrarlo con diversi strumenti di automazione come Ansible, Puppet e altri.