Aujourd’hui on va discuter serveurs MySQL. Notre but est de mettre en place 3 serveurs répliqués multi-master pour une haute disponibilité mais aussi pouvoir écrire sur tout les hosts en simultannée.

Kézako?!

Il existe plusieurs types de réplications : Master-Slave, Multi-Master et j’en passe… Le but est le même : avoir les mêmes données partout.

IMPORTANT La réplication présentée ici ne fonctionne pas avec le moteur MySQL MyISAM.

Nous allons ici utiliser MariaDB Galera Cluster, qui s’installe assez facilement avec le package mariadb-galera-server. Pour l’installer, demandez-le à votre gestionnaire de paquets. Il peut-être nécessaire d’ajouter les repository, l’outil officiel vous y aidera.

Il est aussi nécessaire d’installer rsync, mais ça c’est plus facile ;)


Ce que nous allons réaliser :

Il faut procéder à l’installation de mariadb-galera-server ainsi que rsync sur les 3 serveurs. Je vous recommande d’utiliser une des technos suivantes vrack/rpn/VPN, à vous de voir ;)

Une fois que c’est installé partout, on arrête le service mysql sur toutes les machines, puis sur la première machine DB01 on ajoute ce fichier de config :

# /etc/mysql/conf.d/galera.cnf
[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
#galera settings
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="cluster_geek"
#wsrep_cluster_address="gcomm://10.0.10.1,10.0.10.2,10.0.10.3"
wsrep_cluster_address="gcomm://"
wsrep_sst_method=rsync
wsrep_node_name='DB01'

Comme vous pouvez le voir il y a deux fois la directive wsrep_cluster_address, dont une commentée. En effet, pour démarrer votre serveur Mysql sans ses copains il faudra utiliser la directive gcomm://: sans cela votre serveur mysql essayera de contacter les autres … sans succès puisqu’ils sont éteints le temps de la configuration.

Faites un service mysql start, normalement votre serveur doit venir à la vie !

Une fois le 1er serveur UP on passe aux suivant donc pour DB02 et DB03:

# /etc/mysql/conf.d/galera.cnf
[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
#galera settings
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="cluster_geek"
wsrep_cluster_address="gcomm://10.0.10.1,10.0.10.2,10.0.10.3"
wsrep_sst_method=rsync
wsrep_node_name='DB02 ou DB03'

Ensuite il faut juste démarrer les autres serveurs, arrêter le premier et changer la configuration (décommenter wsrep_cluster_address=gcomm://10.0.10.1,10.0.10.2,10.0.10.3) et le relancer.

Pour vérifier que tout est en place normalement :

$ mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 3            |
+--------------+

Désormais votre cluster MySQL multi-master est en place ! :D