Galera Cluster è una delle soluzioni ad alta disponibilità più popolari per MySQL. È un cluster virtualmente sincrono, che aiuta a tenere sotto controllo il ritardo di replica. Grazie al controllo del flusso, il cluster Galera può rallentare e consentire a più nodi caricati di mettersi al passo con il resto del cluster. La recente versione di Galera 4 ha portato nuove funzionalità e miglioramenti. Li abbiamo trattati in un post sul blog in cui si parlava di MariaDB 10.4 Galera Cluster e in un post sul blog in cui si discuteva delle funzionalità esistenti e future di Galera 4.
Come funziona Galera 4 se utilizzato in Amazon EC2? Come probabilmente saprai, Amazon offre servizi di database relazionali, progettati per fornire agli utenti un modo semplice per distribuire database MySQL ad alta disponibilità. Il mio collega, Ashraf Sharif, ha confrontato i tempi di failover per RDS MySQL e RDS Aurora nel suo post sul blog. I tempi di failover per Aurora sembrano davvero ottimi, ma ci sono dei ma. Prima di tutto, sei costretto a usare RDS. Non puoi distribuire Aurora sulle istanze che gestisci. Se le funzionalità e le opzioni esistenti disponibili in Aurora non sono sufficienti per te, non hai altra opzione che distribuire qualcosa da solo. Qui entra Galera. Galera, a differenza di Aurora, non è una scatola nera proprietaria. Al contrario, è un software open source, che può essere utilizzato liberamente su tutti gli ambienti supportati. Puoi installare Galera Cluster su AWS Elastic Computing Cloud (EC2) e, attraverso questo, creare un ambiente ad alta disponibilità in cui il failover è quasi istantaneo:non appena riesci a rilevare il guasto del nodo, puoi riconnetterti all'altro nodo Galera. Come si distribuisce Galera 4 in EC2? In questo post del blog daremo un'occhiata e ti forniremo una guida passo passo che mostra qual è il modo più semplice per farlo.
Distribuzione di un cluster Galera 4 su EC2
Il primo passo è creare un ambiente che useremo per il nostro cluster Galera. Andremo con macchine virtuali Ubuntu 18.04 LTS.
Utilizzeremo la dimensione dell'istanza t2.medium ai fini di questo blog inviare. Dovresti ridimensionare le tue istanze in base al carico previsto.
Distribuiremo tre nodi nel cluster. Perché tre? Abbiamo un blog che spiega come Galera mantiene un'elevata disponibilità.
Configureremo lo storage per queste istanze.
Sceglieremo anche il gruppo di sicurezza appropriato per i nodi. Anche in questo caso, nel nostro caso il gruppo di sicurezza è abbastanza aperto. Dovresti assicurarti che l'accesso sia limitato il più possibile:solo i nodi che devono accedere ai database dovrebbero potersi connettere.
Infine, scegliamo un par chiave esistente o ne creiamo uno nuovo. Dopo questo passaggio verranno avviate le nostre tre istanze.
Una volta che sono attivi, possiamo connetterci tramite SSH e iniziare a configurare il database.
Abbiamo deciso di utilizzare la convenzione di denominazione 'node1, node2, node3' quindi abbiamo dovuto modificare /etc/hosts su tutti i nodi ed elencarli insieme ai rispettivi IP locali. Abbiamo anche apportato la modifica in /etc/hostname per utilizzare il nuovo nome per i nodi. Al termine, possiamo iniziare a configurare il nostro cluster Galera. Al momento in cui scrivo, l'unico fornitore che fornisce la versione GA di Galera 4 è MariaDB con la sua 10.4, quindi utilizzeremo MariaDB 10.4 per il nostro cluster. Procederemo con l'installazione utilizzando i suggerimenti e le guide del sito web di MariaDB.
Distribuzione di un cluster MariaDB 10.4 Galera
Inizieremo con la preparazione dei repository:
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
bash ./mariadb_repo_setup
Abbiamo scaricato lo script che ha lo scopo di configurare i repository e lo abbiamo eseguito per assicurarci che tutto sia impostato correttamente. Questo ha configurato i repository per utilizzare l'ultima versione di MariaDB, che, al momento della scrittura, è 10.4.
[email protected]:~# apt update
Hit:1 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:4 http://downloads.mariadb.com/MariaDB/mariadb-10.4/repo/ubuntu bionic InRelease
Ign:5 http://downloads.mariadb.com/MaxScale/2.4/ubuntu bionic InRelease
Hit:6 http://downloads.mariadb.com/Tools/ubuntu bionic InRelease
Hit:7 http://downloads.mariadb.com/MaxScale/2.4/ubuntu bionic Release
Hit:8 http://security.ubuntu.com/ubuntu bionic-security InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
4 packages can be upgraded. Run 'apt list --upgradable' to see them.
Come puoi vedere, i repository per MariaDB 10.4 e MaxScale 2.4 sono stati configurati. Ora possiamo procedere e installare MariaDB. Lo faremo passo dopo passo, nodo per nodo. MariaDB fornisce una guida su come installare e configurare il cluster.
Dobbiamo installare i pacchetti:
apt-get install mariadb-server mariadb-client galera-4 mariadb-backup
Questo comando installa tutti i pacchetti necessari per l'esecuzione di MariaDB 10.4 Galera. MariaDB crea una serie di file di configurazione. Ne aggiungeremo uno nuovo, che conterrà tutte le impostazioni richieste. Per impostazione predefinita verrà incluso alla fine del file di configurazione, quindi tutte le impostazioni precedenti per le variabili che abbiamo impostato verranno sovrascritte. Idealmente, in seguito, dovresti modificare i file di configurazione esistenti per rimuovere le impostazioni che abbiamo inserito in galera.cnf per evitare confusione su dove è configurata una determinata impostazione.
[email protected]:~# cat /etc/mysql/conf.d/galera.cnf
[mysqld]
bind-address=10.0.0.103
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.0.0.103,10.0.0.130,10.0.0.62"
wsrep_cluster_name="Galera4 cluster"
wsrep_sst_method=mariabackup
wsrep_sst_auth='sstuser:pa55'
# Cluster node configuration
wsrep_node_address="10.0.0.103"
wsrep_node_name="node1"
Quando la configurazione è pronta, possiamo iniziare.
[email protected]:~# galera_new_cluster
Questo dovrebbe avviare il nuovo cluster sul primo nodo. Successivamente dovremmo procedere con passaggi simili sui nodi rimanenti:installare i pacchetti richiesti e configurarli tenendo presente che l'IP locale cambia, quindi dobbiamo modificare il file galera.cnf di conseguenza.
Quando i file di configurazione sono pronti, dobbiamo creare un utente che verrà utilizzato per lo Snapshot State Transfer (SST):
MariaDB [(none)]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'pa55';
Query OK, 0 rows affected (0.022 sec)
MariaDB [(none)]> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
Query OK, 0 rows affected (0.022 sec)
Dovremmo farlo sul primo nodo. I nodi rimanenti si uniranno al cluster e riceveranno un'istantanea dello stato completo in modo che l'utente venga trasferito a loro. Ora l'unica cosa che dobbiamo fare è avviare i nodi rimanenti:
[email protected]:~# service mysql start
[email protected]:~# service mysql start
e verifica che il cluster sia stato effettivamente formato:
MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.001 sec)
Va tutto bene, il cluster è attivo ed è composto da tre nodi Galera. Siamo riusciti a distribuire MariaDB 10.4 Galera Cluster su Amazon EC2.