wiki/HowtoMySQL/Galera.md
2018-12-06 10:37:12 -05:00

126 lines
3.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
categories: databases
title: Réplication MySQL avec Galera
...
## Aperçu
Galera est un module de réplication synchrone et multi-master avec une
tolérance de panne transparente. Il se base sur la _Write-Set Replication API_
(_wsrep API_) de MySQL.
La réplication est totalement transparente pour l'application, aucun potentiel
délai de réplication ou gestion des locks entre les serveurs n'est à prévoir.
Cependant les tables non-transactionnelles de type MyISAM ne sont pas
supportées par la réplication et ne seront donc pas répliquées !
Il est conseillé d'avoir au minimum 3 serveurs en cas de conflit de
réplication, mais 2 peuvent suffire.
Documentation officielle (MariaDB ≥ 10.1) : https://mariadb.com/kb/en/library/galera-cluster/
Documentation officielle (MariaDB < 10.1) : http://galeracluster.com/documentation-webpages/gettingstarted.html
## Installation
~~~
# apt install galera-3 mariadb-server rsync
~~~
Note : pour Debian jessie, il est nécessaire d'installer le paquet _mariadb-galera-server_. Depuis stretch, qui contient MariaDB 10.1, le plugin de réplication a été inclus dans le paquet de standard _mariadb-server_.
## Configuration réseau
La réplication Galera utilise des ports réseau dédiés. Il est donc nécessaire d'autoriser les ports suivant dans les pare-feu des machines :
- 4567/tcp, 4567/udp
- 4568/tcp
- 4444/tcp
## Mise en place
Ajouter la configuration suivante dans le fichier _/etc/mysql/mariadb.conf.d/galera.cnf_, sur toutes les machines du cluster :
~~~
[mysqld]
# The following MySQL options are mandatory for Galera to work
bind-address=0.0.0.0
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=<votre innodb_buffer_pool_size actuel + ~ 5% pour Galera>
binlog_format=ROW
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
wsrep_cluster_name="<nom arbitraire du cluster"
wsrep_cluster_address="gcomm://<liste des adresses IP des machines du cluster, séparées par des virgules>"
wsrep_sst_method=rsync
wsrep_node_address="<adresse IP de la machine>"
wsrep_node_name="<nom de la machine>"
wsrep_retry_autocommit=4
~~~
*Note :* seul _wsrep_node_address_ et _wsrep_node_name_ sont différents d'une machine à l'autre.
Bien s'assurer que le fichier est lisible par MariaDB :
~~~
# chmod 644 /etc/mysql/mariadb.conf.d/galera.cnf
~~~
Ensuite pour initialiser le nouveau cluster, il est nécessaire de démarrer l'une des machines avec l'option `--wsrep-new-cluster`.
Avant tout, s'assurer que MySQL est éteint sur chaque serveur :
~~~
# /etc/init.d/mysql stop
~~~
MariaDB 10.1 (Debian stretch) vient avec le script _galera_new_cluster_, il est préférable de l'utiliser pour la première initialisation. À faire sur un des serveurs uniquement :
~~~
# galera_new_cluster
~~~
Pour les versions précédentes, on peut utiliser le script _/usr/bin/mysqld_bootstrap_ :
~~~
# mysqld_bootstrap
~~~
Sur les autres serveurs, simplement démarrer MySQL de manière habituelle :
~~~
# /etc/init.d/mysql start
~~~
## Administration
Vérifier l'état du cluster :
~~~
mysql> SHOW STATUS LIKE 'wsrep_%';
+---------------------------+------------+
| Variable_name | Value |
+---------------------------+------------+
...
| wsrep_local_state_comment | Synced (6) |
| wsrep_cluster_size | 3 |
| wsrep_ready | ON |
+---------------------------+------------+
~~~
_wsrep_cluster_size_ indique ici le nombre de machine dans le cluster.