InnoDB Cluster fornisce una soluzione completa
per rendere disponibile
un database MySQL in alta affidabilita' sfruttando la tecnica
della replica virtualmente sincrona.
Tra le diverse modalita' di configurazione disponibili
l'installazione in Sandbox, descritta in questo documento,
ha una modalita' di installazione semplificata molta adatta
per provare tale nuova tecnologia.
La configurazione in Sandbox non e' adatta ad un ambiente di produzione ma e' utile per creare ambienti di laboratorio o di test.
InnoDB Cluster si basa su tre componenti:
il database MySQL configurato in
Group Replication
che mantiene i dati accessibili via SQL,
il componente MySQL Router
che si occupa di indirizzare le connessioni applicative
e l'interfaccia di amministrazione MySQL Shell.
Per amministrare il cluster si utilizza MySQL Shell ed in particolare le AdminAPI che consentono di creare e gestire il cluster con semplici comandi JavaScript.
Il numero dei nodi e' dinamico: puo' variare in caso di fault, per attivita' amministrative, durante gli upgrade, quando si inseriscono nuove istanze nel cluster, ... Anche lo stato delle istanze e' variabile: nella configurazione Single-Primary solo un nodo e' accessibile in scrittura (R/W) mentre gli altri sono attivi in super-read-only (R/O); nella configurazione Multi-Primary tutti i nodi sono accessibili in scrittura (R/W). Lo stato puo' cambiare in caso di fault, quando un'istanza si connette al cluster deve recuperare le transazioni dagli altri nodi e benche' attiva potrebbe non essere allineata, ...
Per accedere al cluster le applicazioni utilizzano MySQL Router che le indirizza sempre al DB corretto. Da MySQL Router sono rese disponibili due differenti porte: una per le connessioni in RW (lettura/scrittura) e l'altra per le connessioni in RO (Read Only). Le applicazioni si collegano alla porta fornita da MySQL Router come se si trattasse di un normale DB MySQL e vengono connesse in modo trasparente al nodo corretto del cluster. Nel caso di caduta di un nodo il cluster si occupa di ogni attivita' senza che sia necessario l'intervento manuale di un DBA.
In una configurazione tradizionale le istanze che compongono il cluster sono ospitate su nodi differenti in configurazione share nothing. Con una configurazione in Sandbox le istanze sono ospitate sullo stesso sistema, condividono il software di base ma utilizzano porte e data-directory differenti.
Per creare istanze sandbox di MySQL ed un cluster sul sistema locale si utilizza la MySQL Shell. Ecco i semplici comandi da eseguire:
E' ora necessario configurare MySQL Router. Basta un comando:
mysqlrouter --bootstrap root:xxx@localhost:3310 --user=mysqlrouter
Quando viene attivato il router con:
nohup mysqlrouter &
vengono rese disponibili alle applicazioni/utenti due porte
per la connessione al database: 6446 (R/W) e 6447 (R/O).
La configurazione di default e' Single-Primary
ma e' possibile anche creare il cluster in modalita'
Multi-Primary
o utilizzare configurazioni custom.
I tre database MySQL vengono mantenuti sincronizzati con i GTID
della Group Replication e si comportano come tre nodi distinti,
il Router si occupa di instradare gli accessi alle istanze attive.
Naturalmente poiche' viene mantenuto tutto sullo stesso server
la configurazione in Sandbox non ha funzioni di HA (High Availability).
Come gia' riportato la configurazione in sandbox non e' adatta per un deploy in produzione.
Per collegarsi al cluster basta utilizzare una delle porte fornite dal router e
si viene reindirizzati sull'istanza corretta:
E' facile creare, cancellare, attivare, ... le istanze locali della sandbox. Sono comandi molto utili per giocare con il cluster:
Naturalmente la parte interessante e' variare lo stato del cluster e controllare cosa succede collegandosi sulla porta del MySQL Router o sulle istanze MySQL.
Le istanze in sandbox sono realizzate in modo semplice.
Nella home directory dell'utente che ha creato la sandbox
(che non e' necessariamente l'utente mysql) viene creata la directory mysql-sandboxes
ed una sottodirectory con il numero della porta scelta nella creazione dell'istanza.
All'interno di tale directory si trovano gli script start.sh e stop.sh (dall'ovvio significato),
il file my.cnf, la data directory dell'istanza ed una directory con gli eseguibili.
La struttura della data directory di un'istanza in sandbox e' standard:
una directory per ogni database, error.log, ...
Quando si esegue il comando dba.startSandboxInstance oppure si lancia lo script start.sh viene avviato il relativo processo:
In questo modo e' possibile avere piu' istanze attive sullo stesso sistema che rispondono a porte diverse, ciascuna con un propria configurazione ed un proprio insieme di dati.
Questo documento contiene
maggiori informazioni sul MySQL InnoDB Cluster.
Altre configurazioni alternative con le sandbox sono riportate
in questo documento [NdA in inglese].
La documentazione ufficiale su InnoDB Cluster e' disponibile sul sito MySQL che contiene anche i dettagli sulla configurazione in Sandbox.
Titolo: MySQL InnoDB Cluster in Sandobox
Livello: Medio
Data:
12 Aprile 2017
Versione: 1.0.1 - 1 Novembre 2017
Autore: mail [AT] meo.bogliolo.name