Skip navigation

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 | January 26, 2019 | No Comments | Système | Tags : bdd cluster HA