Debian 9 : cluster mariadb
Debian 9 : cluster mariadb
Mise en place d’un cluster galera à 3 nœuds avec Debian 9
Nom | IP | Rôle |
---|---|---|
galera-db-01 | 172.16.0.10 | Nœud primaire |
galera-db-02 | 172.16.0.20 | Nœud secondaire 01 |
galera-db-03 | 172.16.0.30 | Nœud secondaire 02 |
Installation et configuration du cluster galera
: à faire sur tous les nœuds
Installer mariadb-server
et rsync
.
root@debian~#: apt install mariadb-server rsync
: à faire sur chacun des nœud individuellement
Configuration du nœud primaire.
root@galera-db-01~#: vim /etc/mysql/mariadb.conf.d/galera.cnf
contenu du fichier
[mysqld] bind-address=0.0.0.0 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://172.16.0.10,172.16.0.20,172.16.0.30" wsrep_cluster_name="galera-cluster" wsrep_sst_method=rsync # Cluster node configuration wsrep_node_address="172.16.0.10" wsrep_node_name="galera-db-01"
Configuration du nœud secondaire 01.
root@galera-db-02~#: vim /etc/mysql/mariadb.conf.d/galera.cnf
contenu du fichier
[mysqld] bind-address=0.0.0.0 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://172.16.0.10,172.16.0.20,172.16.0.30" wsrep_cluster_name="galera-cluster" wsrep_sst_method=rsync # Cluster node configuration wsrep_node_address="172.16.0.20" wsrep_node_name="galera-db-02"
Configuration du nœud secondaire 02.
root@galera-db-03~#: vim /etc/mysql/mariadb.conf.d/galera.cnf
contenu du fichier
[mysqld] bind-address=0.0.0.0 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://172.16.0.10,172.16.0.20,172.16.0.30" wsrep_cluster_name="galera-cluster" wsrep_sst_method=rsync # Cluster node configuration wsrep_node_address="172.16.0.30" wsrep_node_name="galera-db-03"
Création du cluster et intégration des nœuds
: à faire sur tous les nœuds
Stopper le service mariadb.
root@galera-db-01/02/02~#: systemctl stop mariadb
: à faire sur le nœud primaire uniquement
root@galera-db-01~#: galera_new_cluster
Aucun retour n’est attendu.
Toujours sur le nœud primaire, vérifier que le cluster est créé.
root@galera-db-01~#: mariadb
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_%';
sortie
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_conf_id | 1 |
| wsrep_cluster_size | 1 |
| wsrep_cluster_state_uuid | b70e7142-216b-11e9-81a5-87ba0da6e0a1 |
| wsrep_cluster_status | Primary |
+--------------------------+--------------------------------------+
Le cluster est bien créé et il est composé de 1 nœud.
: à faire sur chacun des nœud secondaire individuellement
Démarrer le service mariadb sur le nœud secondaire 01.
root@galera-db-02~#: systemctl start mariadb
Vérifier que le nœud est bien intégré au cluster.
root@galera-db-01~#: mariadb
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_%';
sortie
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_conf_id | 2 |
| wsrep_cluster_size | 2 |
| wsrep_cluster_state_uuid | b70e7142-216b-11e9-81a5-87ba0da6e0a1 |
| wsrep_cluster_status | Primary |
+--------------------------+--------------------------------------+
Démarrer le service mariadb sur le nœud secondaire 01.
root@galera-db-03~#: systemctl start mariadb
Vérifier que le nœud est bien intégré au cluster.
root@galera-db-01~#: mariadb
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_%';
sortie
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | b70e7142-216b-11e9-81a5-87ba0da6e0a1 |
| wsrep_cluster_status | Primary |
+--------------------------+--------------------------------------+
Test de réplication.
root@galera-db-0x~#: mariadb
MariaDB [(none)]> CREATE DATABASE test_01;
root@galera-db-01/02/02~#: mariadb
MariaDB [(none)]> CREATE DATABASE test_01;
Query OK, 1 row affected (0.02 sec)
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test_01 |
+--------------------+
4 rows in set (0.00 sec)
Redémarrage d’un cluster galera
L’arrêt de 1 ou 2 nœuds ne posera pas problème lorsque ces derniers redémarreront. Cependant le redémarrage de l’intégralité du cluster requiert une procédure.
Idéalement, sur le nœud qui s’est arrêté en dernier, éditer le fichier /var/lib/mysql/grastate.dat. Changer la valeur de safe_to_bootstrap pour la passer à 1.
root@galera-db-0x~#: vim /var/lib/mysql/grastate.dat
contenu du fichier
# GALERA saved state
version: 2.1
uuid: b70e7142-216b-11e9-81a5-87ba0da6e0a1
seqno: -1
safe_to_bootstrap: 1
root@galera-db-0x~#: galera_new_cluster
Sur les autres nœuds, lancer galera_recovery
et redémarrer ces nœuds.
root@galera-db-0x/?~#: galera_recovery root@galera-db-0x/?~#: shutdown -r now
sortie
WSREP: Recovered position b70e7142-216b-11e9-81a5-87ba0da6e0a1:1 --wsrep_start_position=b70e7142-216b-11e9-81a5-87ba0da6e0a1:1
Vérifier que le cluster est bien reconstruit.
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_%';
sortie
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | b70e7142-216b-11e9-81a5-87ba0da6e0a1 |
| wsrep_cluster_status | Primary |
+--------------------------+--------------------------------------+
Configuration de HAproxy
Voici la configuration de HAproxy.
root@debian~#: vim /etc/haproxy/haproxy.cfg
aperçu du contenu du fichier
[…] # galera cluster listen galera bind 0.0.0.0:3306 mode tcp timeout client 10800s timeout server 10800s option tcpka option allbackups #balance roundrobin balance leastconn option mysql-check user haproxy_user server galera-db-01 172.16.0.10:3306 check weight 1 server galera-db-02 172.16.0.20:3306 check weight 1 server galera-db-03 172.16.0.30:3306 check weight 1
Configuration du cluster pour HAproxy
Créer l’utilisateur haproxy_user.
root@galera-db-01~#: mariadb
sortie
MariaDB [(none)]> CREATE USER 'haproxy_user'@'172.16.0.10'; MariaDB [(none)]> CREATE USER 'haproxy_user'@'172.16.0.20'; MariaDB [(none)]> CREATE USER 'haproxy_user'@'172.16.0.30'; MariaDB [(none)]> FLUSH PRIVILEGES;
Si l’accès est sporadique, faire un FLUSH PRIVILEGES
sur les autres nœuds.
root@galera-db-02/galera-db-03~#: mariadb
sortie
MariaDB [(none)]> FLUSH PRIVILEGES;
by Nicolas SHINEY | January 26, 2019 | No Comments | Système | Tags : bdd cluster HA