Vous êtes sur la page 1sur 6

Pas pas monter un

cluster Galera Mariadb


Lorsque je me suis mis dans lide de monter un cluster Galera
Mariadb pour remplacer notre cluster Mysql, je pensais trouver
facilement de la documentation en ligne. On trouve en effet beaucoup
darticles de blogs expliquant comment crer son cluster Galera
malheureusement cette techno volue vite et les articles sont rarement
jour.

La documentation quon peut trouver sur le site de mariadb est


galement assez succinct et cest en compilant des articles depuis
plusieurs sources que jai pu monter ce cluster.

Galera est une technologie de clusterisation de base de donnes bien


plus efficace que ce quon peut faire actuellement avec mysql. Un
cluster classique mysql fonctionne en mode actif/passif et si le nud
actif tombe, il est ncessaire de faire une opration manuelle pour
passer un des nud passif en actif. De plus, si un nud reste teint
durant une priode prolonge, il ne peut plus rattraper son retard sur
le nud primaire et sort du cluster. Galera rgle ces problmes avec un
cluster de nuds actifs/actifs. Chaque nud est capable de recevoir
des critures et Galera soccupe de synchroniser tout a.

Pour raliser le cluster, jai utilis 4 serveurs Centos 7 : 3 nuds


mariadb (il faut un chiffre impair pour respecter le quorum) et un
serveur haproxy en frontal en mode rpartition de charge (leastconn)
qui fait office de passerelle daccs. Les machines sappellent
respectivement mariadb01, mariadb02, mariadb03 et mariadb-proxy.

Cet article sattache la mise en oeuvre du cluster en lui mme. Un


second article dtaillera le dploiement dhaproxy.

Configuration du nud mariadb01


On commence par rcuprer le repo mariadb pour CentOS
ici https://downloads.mariadb.org/mariadb/repositories/ ce qui
devrait vous donner quelque chose comme a:
# Put this file in /etc/yum.repos.d/
# MariaDB 10.1 CentOS repository list - created 2016-06-20 19:31 UTC
# <a href="http://downloads.mariadb.org/mariadb/repositories/">http://downloads.mariadb.org/mariadb/repositories/</a>
[mariadb]

1 # Put this file in /etc/yum.repos.d/


2 # MariaDB 10.1 CentOS repository list - created 2016-06-20 19:31 UTC
3 # <a
4 href="http://downloads.mariadb.org/mariadb/repositories/">http://downloads.mariadb.org/mariadb/repos
5 itories/</a>
6 [mariadb]
7 name = MariaDB
8 baseurl = <a href="http://yum.mariadb.org/10.1/centos7-amd64">http://yum.mariadb.org/10.1/centos7-
amd64</a>
gpgkey=<a href="https://yum.mariadb.org/RPM-GPG-KEY-MariaDB">https://yum.mariadb.org/RPM-
GPG-KEY-MariaDB</a>
gpgcheck=1

On peut ensuite installer les paquets ncessaires


yum -y install MariaDB-server MariaDB-client galera rsync xinetd
On dite ensuite le fichier de configuration de galera
vim /etc/my.cnf.d/server.conf
Et dans la zone du fichier ddie galera:
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider='/lib64/galera/libgalera_smm.so'

1 [galera]
2 # Mandatory settings
3 wsrep_on=ON
4 wsrep_provider='/lib64/galera/libgalera_smm.so'
5 wsrep_cluster_address='gcomm://'
6 wsrep_cluster_name='galera'
7 wsrep_node_name='mariadb01'
8 wsrep_sst_method=rsync
9 binlog_format=row
10 default_storage_engine=InnoDB
11 innodb_autoinc_lock_mode=2
12 bind-address=0.0.0.0

On ne donne aucune adresse pour le moment au cluster. On laisse la


valeur par dfaut gcomm://. On reviendra sur cette partie plus tard.

Avant de dmarrer le premier nud du cluster, on lance la


scurisation de linstance mariadb avec la
commande mysql_secure_installation.

Une fois cette tape effectue, on peut dmarrer le cluster. Cette


commande ne doit tre lance quune seule fois et seulement sur le
premier noeud configur.
galera_new_cluster

1 galera_new_cluster

On se connecte ensuite sur linstance mysql pour vrifier que le cluster


est bien oprationnel:
[root@mariadb01 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 18705

1 [root@mariadb01 ~]# mysql -u root -p


2 Enter password:
3 Welcome to the MariaDB monitor. Commands end with ; or \g.
4 Your MariaDB connection id is 18705
5 Server version: 10.1.14-MariaDB MariaDB Server
6
7 Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
8
9 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
10
11 MariaDB [(none)]> SHOW GLOBAL STATUS WHERE Variable_name IN ('wsrep_ready',
12 'wsrep_cluster_size', 'wsrep_cluster_status', 'wsrep_connected');
13 +----------------------+---------+
14 | Variable_name | Value |
15 +----------------------+---------+
16 | wsrep_cluster_size | 1 |
17 | wsrep_cluster_status | Primary |
18 | wsrep_connected | ON |
19 | wsrep_ready | ON |
20 +----------------------+---------+
4 rows in set (0.01 sec)

Et voil notre cluster Galera compose de 1 nud pour le moment

Configuration de mariadb02 et mariadb03


On reprend les mmes tapes que pour mariadb01 en adaptant le
fichier de configuration. On noublie pas de lancer
mysql_secure_installation.

Le fichier de conf de mariadb02 :


[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider='/lib64/galera/libgalera_smm.so'

1 [galera]
2 # Mandatory settings
3 wsrep_on=ON
4 wsrep_provider='/lib64/galera/libgalera_smm.so'
5 wsrep_cluster_address='gcomm://mariadb01,mariadb02'
6 wsrep_cluster_name='galera'
7 wsrep_node_name='mariadb02'
8 wsrep_sst_method=rsync
9 binlog_format=row
10 default_storage_engine=InnoDB
11 innodb_autoinc_lock_mode=2
12 bind-address=0.0.0.0

On peut lancer le service mariadb de faon classique et vrifier que le


cluster est oprationnel :
[root@mariadb02 ~]# systemctl start mariadb
[root@mariadb02 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.

1 [root@mariadb02 ~]# systemctl start mariadb


2 [root@mariadb02 ~]# mysql -u root -p
3 Enter password:
4 Welcome to the MariaDB monitor. Commands end with ; or \g.
5 Your MariaDB connection id is 18905
6 Server version: 10.1.14-MariaDB MariaDB Server
7
8 Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
9
10 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
11
12 MariaDB [(none)]> SHOW GLOBAL STATUS WHERE Variable_name IN ('wsrep_ready',
13 'wsrep_cluster_size', 'wsrep_cluster_status', 'wsrep_connected');
14 +----------------------+---------+
15 | Variable_name | Value |
16 +----------------------+---------+
17 | wsrep_cluster_size | 2 |
18 | wsrep_cluster_status | Primary |
19 | wsrep_connected | ON |
20 | wsrep_ready | ON |
21 +----------------------+---------+
4 rows in set (0.01 sec)

On a bien 2 nuds dans notre cluster, passons mariadb03

Le fichier de conf de mariadb03 :


[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider='/lib64/galera/libgalera_smm.so'

1 [galera]
2 # Mandatory settings
3 wsrep_on=ON
4 wsrep_provider='/lib64/galera/libgalera_smm.so'
5 wsrep_cluster_address='gcomm://mariadb01,mariadb02,mariadb03'
6 wsrep_cluster_name='galera'
7 wsrep_node_name='mariadb03'
8 wsrep_sst_method=rsync
9 binlog_format=row
10 default_storage_engine=InnoDB
11 innodb_autoinc_lock_mode=2
12 bind-address=0.0.0.0

Idem, on lance le service et on vrifie que tout est ok:


[root@mariadb02 ~]# systemctl start mariadb
[root@mariadb02 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.

1 [root@mariadb02 ~]# systemctl start mariadb


2 [root@mariadb02 ~]# mysql -u root -p
3 Enter password:
4 Welcome to the MariaDB monitor. Commands end with ; or \g.
5 Your MariaDB connection id is 18905
6 Server version: 10.1.14-MariaDB MariaDB Server
7
8 Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
9
10 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
11
12 MariaDB [(none)]> SHOW GLOBAL STATUS WHERE Variable_name IN ('wsrep_ready',
13 'wsrep_cluster_size', 'wsrep_cluster_status', 'wsrep_connected');
14 +----------------------+---------+
15 | Variable_name | Value |
16 +----------------------+---------+
17 | wsrep_cluster_size | 3 |
18 | wsrep_cluster_status | Primary |
19 | wsrep_connected | ON |
20 | wsrep_ready | ON |
21 +----------------------+---------+
4 rows in set (0.01 sec)

Trois nuds dans le cluster, cest bon!

Configuration finale
On corrige maintenant les adresses de cluster sur les serveurs
mariadb01 et mariadb02 en y mettant la mme valeur que dans le
fichier de conf de mariadb03
wsrep_cluster_address='gcomm://mariadb01,mariadb02,mariadb03'

1 wsrep_cluster_address='gcomm://mariadb01,mariadb02,mariadb03'

Puis on redmarrer les services


[root@mariadb02 ~]# systemctl restart mariadb

1 [root@mariadb02 ~]# systemctl restart mariadb


[root@mariadb01 ~]# systemctl restart mariadb

1 [root@mariadb01 ~]# systemctl restart mariadb

Cest termin.

A ce stade, vous devez pouvoir vous connecter sur nimporte quel


noeud, crer une base, elle sera duplique dans la foule sur les autres
nuds.

Vous aimerez peut-être aussi