MariaDB Galera è un cluster multimaster per MariaDB. Da MariaDB 10.1, i pacchetti MariaDB Server e MariaDB Galera Server sono stati combinati e i pacchetti Galera e le relative dipendenze vengono installati automaticamente durante l'installazione di MariaDB. Attualmente, MariaDB Galera Cluster supporta solo il motore di archiviazione InnoDB/XtraDB. In MariaDB 10.0 e 5.5, dovrai scaricarlo separatamente. MariaDB Galera aggiunge la ridondanza per il database di un sito. In MariaDB Galera Cluster, più server di database sono interconnessi tra loro e si mantengono sincronizzati.
MariaDB Galera offre molte funzionalità, alcune delle quali sono elencate di seguito:
- Replica sincrona.
- Unione automatica del nodo.
- Topologia multimaster attiva-attiva.
- Replicazione parallela reale, a livello di riga.
- Scalabilità in lettura e scrittura, latenze client ridotte.
- Nodi falliti, eliminazione automatica dal cluster.
In questo tutorial, spiegheremo come configurare MariaDB Galera Cluster 10.1 con 3 nodi in esecuzione sul server Ubuntu 16.04. Verificheremo anche la replica del database tra tutti i nodi.
Requisiti
- Tre nodi che eseguono il server Ubuntu 16.04.
- Nodo1 con indirizzo IP statico 192.168.0.102, Nodo2 con indirizzo IP statico 192.168.0.103 e Nodo3 con indirizzo IP statico 192.168.0.104 configura sul tuo server.
- Utente non root con configurazione dei privilegi sudo su tutti i nodi.
Per iniziare
Innanzitutto, dovrai aggiornare tutti i nodi con l'ultima versione. Puoi aggiornarli tutti con il seguente comando:
sudo apt-get update -y
sudo apt-get upgrade -y
Quindi, riavvia tutti i nodi per applicare queste modifiche. Quindi, accedi con l'utente sudo e procedi al passaggio successivo.
Installa MariaDB Galera
I pacchetti MariaDB Server e MariaDB Galera Server sono combinati nella versione MariaDB 10.1. Per impostazione predefinita, MariaDB 10.1 non è disponibile nei repository Ubuntu predefiniti, quindi dovrai aggiungere il repository MariaDB su tutti i nodi.
Innanzitutto, aggiungi la chiave del repository MariaDB con il seguente comando:
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Quindi, aggiungi il repository e aggiorna la cache APT con il seguente comando:
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main'
sudo apt-get update -y
Una volta aggiornato il repository, installa MariaDB con il seguente comando:
sudo apt-get install mariadb-server rsync -y
Il comando precedente installerà MariaDB con Galera e diverse dipendenze. Le parti Galera rimangono inattive fino a quando non vengono configurate, come un plug-in o un motore di archiviazione. Una volta installato MariaDB su tutti i nodi, puoi procedere alla protezione di MariaDB.
Per impostazione predefinita, l'installazione di MariaDB non è protetta, quindi sarà necessario proteggere l'installazione di MariaDB. Puoi farlo eseguendo lo script mysql_secure_installation:
sudo mysql_secure_installation
In questo processo, ti verrà chiesto di impostare la password di root, rimuovere gli utenti anonimi, impedire l'accesso come root in remoto e rimuovere il database di test. Rispondi a tutte le domande come mostrato di seguito:
Enter current password for root (enter for none): Change the root password? [Y/n] n Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
Una volta che MariaDB è protetto su tutti i nodi, puoi procedere al passaggio successivo.
Impostazione del cluster MariaDB su Node1
Per prima cosa, vai su Node1 e crea un file di configurazione per Galera. Per impostazione predefinita, MariaDB legge la configurazione dalla directory /etc/mysql/conf.d/. Per farlo, esegui il seguente comando:
sudo nano /etc/mysql/conf.d/galera.cnf
Aggiungi le seguenti righe:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.0.102" wsrep_node_name="Node1"
Salva il file quando hai finito.
Nota: 192.168.0.102 è l'indirizzo IP del Nodo1
Aggiungi Node2 su Galera Cluster
Quindi, vai su Node2 e crea un file di configurazione per Galera:
sudo nano /etc/mysql/conf.d/galera.cnf
Aggiungi le seguenti righe:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.0.103" wsrep_node_name="Node2"
Salva il file quando hai finito.
Nota: 192.168.0.103 è l'indirizzo IP del Node2.
Aggiungi Node3 su Galera Cluster
Quindi, vai su Node3 e crea un file di configurazione per Galera:
sudo nano /etc/mysql/conf.d/galera.cnf
Aggiungi le seguenti righe:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.0.104" wsrep_node_name="Node3"
Salva il file quando hai finito.
Nota: 192.168.0.104 è l'indirizzo IP del Node3.
Configura Firewall
Galera Cluster utilizza quattro porte 3306 per la connessione client MySQL, 4444 per State Snapshot Transfer, 4567 per il traffico di replica Galera Cluster e 4568 per Incremental State Transfer. Quindi dovrai consentire tutte queste porte usando il firewall UFW. Puoi farlo eseguendo il seguente comando su tutti i nodi:
Innanzitutto, abilita il firewall UFW con il seguente comando:
sudo ufw enable
Quindi, consenti tutte le porte con il seguente comando:
sudo ufw allow 3306/tcp
sudo ufw allow 4444/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4568/tcp
sudo ufw allow 4567/udp
È quindi possibile verificare lo stato del firewall con il seguente comando:
sudo ufw status
Una volta configurato il firewall UFW su tutti i nodi, puoi procedere al passaggio successivo.
Avvia il cluster MariaDB Galera
Dopo aver configurato correttamente tutti i nodi, vai su Node1 e avvia Galera Cluster.
Prima che Galera possa iniziare, devi assicurarti che il servizio MariaDB sia interrotto su tutti i nodi.
Esegui il seguente comando su tutti i nodi:
sudo systemctl stop mysql
Ora avvia il Cluster Galera su Node1 con il seguente comando:
sudo galera_new_cluster
Ora controlla se il cluster è in esecuzione o meno con il seguente comando:
mysql -u root -p -e "show status like 'wsrep_cluster_size'"
Se tutto va bene dovresti vedere il seguente output:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
Sul Node2, avvia il servizio MariaDB:
sudo systemctl start mysql
Puoi controllare lo stato del servizio MariaDB se funziona o meno con il seguente comando:
sudo systemctl status mysql
Se tutto va bene, dovresti vedere il seguente output:
?? mariadb.service - MariaDB database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2017-09-17 10:11:20 EDT; 10min ago Process: 715 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 713 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS) Process: 545 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set Process: 535 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 514 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS) Main PID: 661 (mysqld) Status: "Taking your SQL requests now..." Tasks: 26 (limit: 4915) CGroup: /system.slice/mariadb.service ??????661 /usr/sbin/mysqld Sep 17 10:11:11 debian systemd[1]: Starting MariaDB database server... Sep 17 10:11:15 debian mysqld[661]: 2017-09-17 10:11:15 140287134630464 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process Sep 17 10:11:20 debian systemd[1]: Started MariaDB database server.
Ora, il tuo secondo nodo dovrebbe essere collegato automaticamente al cluster. Puoi verificarlo con il seguente comando:
mysql -u root -p -e "show status like 'wsrep_cluster_size'"
Se tutto funziona correttamente, la dimensione del cluster dovrebbe essere impostata su due:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
Sul Node3, avvia il servizio MariaDB:
sudo systemctl start mysql
mysql -u root -p -e "show status like 'wsrep_cluster_size'"
Se tutto funziona correttamente, la dimensione del cluster dovrebbe essere impostata su tre:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Il tuo cluster ora sta lavorando e comunicando tra loro.
Test replica database
Ora, tutti i nodi sono online, è il momento di testare la replica del database nel cluster Galera. Iniziamo creando un database su Node1 e controlliamo se è replicato su tutti i nodi.
Innanzitutto, accedi alla console di MariaDb con il seguente comando:
mysql -u root -p
Inserisci la tua password di root e crea un database con nome test_db:
MariaDB [(none)]> create database test_db;
MariaDB [(none)]> show databases;
+--------------------+ | Database | +--------------------+ | test_db | +--------------------+
Ora vai su Node2 e Node3, quindi controlla che la replica funzioni o meno:
mysql -u root -p
MariaDB [(none)]> show databases;
+--------------------+ | Database | +--------------------+ | test_db | +--------------------+
Congratulazioni! hai installato e configurato correttamente MariaDB Galera Cluster sul server Ubuntu 16.04.
Conclusione
Spero che ora tu abbia abbastanza conoscenze per installare e configurare MariaDB Galera Cluster su Ubuntu 16.04. Ora puoi facilmente scalare fino a diversi, o addirittura dozzine, di nodi distinti. In caso di dubbi o ulteriori domande, fare riferimento al link Galera Cluster Doc