Cluster MariaDB Galera

Rédigé par Jérôme / 17 juin 2014 / Aucun commentaire

Dans le cadre assez courant d'un environnement virtualisé avec deux hosts physique, voici un petit how-to afin de déployer un cluster MariaDB master-master composé de deux noeuds + une VM médiatrice (en cas de split-brain ) sous Debian 7 Wheezy.
Nous allons utiliser Galera pour ce qui est de la gestion du cluster et Percona XtraBackup pour la réplication des données entre les noeuds.


Nous aurons donc besoins de 3 VMs sous Debian Wheezy fraichement installées :

  • 2 noeuds "base de données" : 192.168.1.11 et 192.168.1.12
  • 1 noeud "médiateur" : 192.168.1.10

Installation des noeuds "base de données"

Concernant les VMs qui vont héberger les bases de données, nous veillerons à créer une règle de séparation sur l'hyperviseur afin qu'elles ne se trouvent pas sur le même host physique.

Installation de MariaDB Galera

Ajout des dépôts MariaDB. Un outils de configuration des dépôts est disponible ici .
# apt-get install -y python-software-properties
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
# echo 'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main' \
> /etc/apt/sources.list.d/mariadb.list
# echo 'deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main' \
>> /etc/apt/sources.list.d/mariadb.list

Ajout des dépots Percona pour l'installation de XtraBackup qui est la seule méthode de réplication des données propre à la production, car elle ne verrouille pas les tables durant les transactions.
# apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
# echo 'deb http://repo.percona.com/apt wheezy main' \
> /etc/apt/sources.list.d/percona.list
# echo 'deb-src http://repo.percona.com/apt wheezy main' \
>> /etc/apt/sources.list.d/percona.list

Installation des paquets nécessaires. Il est demandé de créer un mot de passe pour l'utilisateur root de MariaDB ; bien entendu, nous mettrons le même sur les deux noeuds du cluster.
# apt-get update
# apt-get install -y socat netcat-openbsd
# apt-get install -y mariadb-galera-server mariadb-client galera
# apt-get install -y percona-toolkit percona-xtrabackup

Galera requière aussi libssl 0.9.8 qui n'est pas disponible via les dépôts Debian sur Wheezy. Nous l'installerons donc celle de Squeeze à la main.
# cd /tmp
# wget http://ftp.fr.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb
# dpkg -i libssl0.9.8_0.9.8o-4squeeze14_amd64.deb

Arrêt de MariaDB et suppression des logs.
# service mysql stop
# rm -f /var/lib/mysql/ib_logfile*

Création du fichier de configuration .cnf
# vi /etc/mysql/conf.d/galera.cnf
[mysqld]
# Obligatoire pour le bon fonctionnent du cluster
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
bind-address=0.0.0.0

# Configuration Galera
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=4G"
wsrep_cluster_address=gcomm://192.168.1.10,192.168.1.11,192.168.1.12
wsrep_cluster_name='db-cluster'
wsrep_sst_method=xtrabackup
wsrep_sst_auth=root:MotDePasse

# Tunning InnoDB a personnaliser selon ses besoins
#datadir=/data/mysql
#innodb_buffer_pool_size=4G
#innodb_file_per_table
#innodb_flush_log_at_trx_commit=2
innodb_log_file_size=100M

L'installation et la configuration doit être déployée de manière identique sur les 2 noeuds base de données, mais à ce stade nous ne démarrons pas encore le service Mysql (MariaDB).

Installation du noeud "médiateur"

Installation presque similaire au noeuds "base de données"

# apt-get install -y python-software-properties
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
# echo 'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main' \
> /etc/apt/sources.list.d/mariadb.list
# echo 'deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main' \
>> /etc/apt/sources.list.d/mariadb.list
# apt-get update
# apt-get install -y galera socat netcat-openbsd
# cd tmp
# wget http://ftp.fr.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb
# dpkg -i libssl0.9.8_0.9.8o-4squeeze14_amd64.deb

Configuration du service garb (Galera Arbitrator)
# vi /etc/default/garb
GALERA_NODES="192.168.1.11:4567 192.168.1.12:4567"
GALERA_GROUP="db-cluster"
LOG_FILE="/var/log/garbd.log"

Lors de mes tests, je mes suis aperçu que le lanceur pouvait poser des problèmes à la séquence de démarrage. Nous allons donc ruser en attendant un correctif :
# update-rc.d garb defaults
# vi /etc/crond.d/garb
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

@reboot    root    sleep 10 && /etc/init.d/garb start

Premier démarrage du cluster

Tout est prêt ; il est temps d'initialiser notre cluster

Initialisation du cluster sur le premier noeud "base de données"

db01# service mysql start --wsrep-new-cluster
db01# mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" \
FROM INFORMATION_SCHEMA.GLOBAL_STATUS \
WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 1            |
+--------------+

Ajout du second noeud "base de données"

Nous allons tout d'abord synchroniser la configuration du compte de service debian entre le premier et le second noeud, puis lancer Mysql :
db02# scp -p root@192.168.1.11:/etc/mysql/debian.cnf /etc/mysql/
db02# service mysql start
db02# mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" \
FROM INFORMATION_SCHEMA.GLOBAL_STATUS \
WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 2            |
+--------------+

Ajout du noeud "médiateur"

mediateur# service garb start

Vérification de la taille du cluster :
db01# 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            |
+--------------+

Notre cluster est maintenant prêt à recevoir ses données indifféremment sur le premier ou second noeud \o/.


Sources:
https://blog.mariadb.org/installing-mariadb-galera-cluster-on-debian-ubuntu/
http://wiki.deimos.fr/MariaDB_Galera_Cluster_:_la_r%C3%A9plication_multi_maitres
http://jmoses.co/2014/03/18/setting-up-a-mysql-cluster-with-mariadb-galera.html
http://galeracluster.com/documentation-webpages/arbitrator.html

Écrire un commentaire

Quelle est la cinquième lettre du mot lbfmen ? :

buffin.net

"Le cloud n'existe pas, vous utilisez juste l'ordinateur de quelqu'un d'autre."