Dans ce tutoriel, je vais vous guider à travers l'installation d'un cluster MariaDB Galera sur CentOS 7 qui a un équilibreur de charge HAProxy devant. La configuration totale se compose de 4 serveurs. J'utiliserai 3 serveurs CentOS 7 pour les nœuds de base de données, 2 nœuds seront actifs et 1 servira de nœud de sauvegarde. Le quatrième serveur sera utilisé pour l'équilibreur de charge HAProxy. Pour l'algorithme d'équilibre, nous utilisons le moins conn (mais vous pouvez utiliser d'autres algorithmes).
MariaDB est l'un des serveurs de bases de données relationnelles les plus populaires créés par le développeur original du serveur de base de données MySQL. MariaDB est un fork de MySQL qui prend en charge le moteur de stockage XtraDB, le moteur de stockage InnoDB et un nouveau moteur de stockage appelé aria.
MariaDB Galera Cluster est un cluster multimaître synchrone pour MariaDB disponible uniquement sur les systèmes d'exploitation basés sur GNU/Linux. Galera Cluster prend uniquement en charge les moteurs de stockage XtraDB et InnoDB. Il utilise la bibliothèque Galera pour la réplication avec contrôle automatique des membres, jonction automatique des nœuds et pour la lecture et l'écriture sur les nœuds du cluster.
Prérequis
- 4 serveurs CentOS 7 - 64 bits :
mariadb1
192.168.1.132
mariadb2
192.168.1.133
mariadb3
192.168.1.134
HAProxy
192.168.1.135
- Privilèges root sur les quatre serveurs.
Étape 1 - Installer et configurer MariaDB Galera Cluster
Dans cette étape, nous allons installer et configurer le cluster MariaDB Galera sur 3 serveurs CentOS. Nous allons installer le serveur MariaDB-Galera, puis activer le pare-feu et ouvrir certains ports pour la base de données et d'autres services. Ensuite, nous installerons le script clustercheck sur chaque serveur MariaDB, afin de pouvoir vérifier l'état du serveur à partir du HAProxy.
A. Configurez les noms d'hôte et préparez le système de base
Connectez-vous à tous les serveurs de base de données avec votre compte ssh :
ssh [email protected]
ssh [email protected].133
ssh [email protected]
Basculez vers l'utilisateur root avec la commande sudo :
sudo su
Modifiez le fichier hosts sur chaque serveur MariaDB et ajoutez toutes les adresses IP de serveur et les noms d'hôte des autres nœuds :
vi /etc/hosts
Voir ma configuration /etc/hosts ci-dessous :
192.168.1.132 mariadb1
192.168.1.133 mariadb2
192.168.1.134 mariadb3
Enregistrez le fichier et quittez.
Ensuite, désactivez SELinux sur chaque serveur car cela cause des problèmes avec MariaDB Galera. Désactivez SELinux avec cette commande sed :
sed -i -e 's/SELINUX=permissive/SELINUX=disabled/g' /etc/sysconfig/selinux
sed (éditeur de flux) :remplacez "SELINUX=permissive" par "SELINUX=disabled" dans le fichier /etc/sysconfig/selinux.
B. Installer le serveur MariaDB Galera
Dans cette étape, nous allons installer MariaDB Galera 10.0 qui est disponible dans le référentiel MariaDB.
Créez un nouveau fichier .repo dans le répertoire yum.repos.d avec la commande vi :
vi /etc/yum.repos.d/mariadb.repo
Collez les détails du référentiel MariaDB Galera ci-dessous et enregistrez-les :
# MariaDB 10.0 CentOS repository list - created 2015-07-09 14:56 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Installez maintenant le serveur et le client MariaDB Galera, ainsi que d'autres packages requis pour ce didacticiel :
yum -y install MariaDB-Galera-server MariaDB-client galera rsync xinetd percona-toolkit precona-xtrabackup xinetd wget
Attendez la fin du processus d'installation.
C. Configurer le pare-feu
Nous allons activer le pare-feu par défaut de CentOS 7 appelé Firewalld. Nous allons l'activer et ouvrir les ports TCP utilisés par les services que nous allons installer.
3306 =Utilisé pour les connexions client MySQL/MariaDB.
4567 =Trafic de réplication Galera Cluster.
873 =Ports Rsync.
4444 =Pour tous les autres transferts d'instantanés d'état (SST).
9200 =xinetd - clustercheck.
Activez le pare-feu avec cette commande systemctl :
systemctl start firewalld
Ouvrez maintenant les ports avec le firewall-cmd :
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
et rechargez firewalld :
firewall-cmd --reload
D. Configurer le cluster MariaDB Galera
Allez dans le répertoire /etc/my.cnf.d/ et éditez le fichier server.conf avec vi:
cd /etc/my.cnf.d/
vi server.conf
Décommentez et ajoutez quelques lignes de configuration, vous pouvez voir les détails ci-dessous :
wsrep_provider=/usr/lib64/galera/libgalera_smm.so # Path to wsrep provider library
wsrep_cluster_address="gcomm://192.168.1.132,192.168.1.133,192.168.1.134" # Group Node, add all MardiaDB Server IP
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Add some configuration below
# Cluster Name
wsrep_cluster_name="mariadb_cluster"
# Add Server IP - on mariadb2 = 192.168.1.133 - on mariadb3 = 192.168.1.134
wsrep_node_address="192.168.1.132"
# Replication Provider with rsync
wsrep_sst_method=rsync
Enregistrez le fichier et quittez.
Sur le serveur mariadb1, lançons le cluster avec la commande ci-dessous :
/etc/rc.d/init.d/mysql bootstrap
résultat :
Bootstrapping the cluster.. Starting MySQL.. SUCCESS!
Sur les serveurs mariadb2 et mariadb3, démarrez MariaDB normalement :
/etc/init.d/mysql start
démarrage de mariadb1.
mariadb2 et mariadb3 démarrent.
MariaDB a été démarré sur tous les nœuds, configurez maintenant le mot de passe root pour MariaDB sur tous les serveurs avec la commande ci-dessous :
/usr/bin/mysql_secure_installation
E. Configurer Clustercheck
Clustercheck est un script bash utile pour créer un proxy (ex :HAProxy) capable de surveiller le serveur MariaDB.
Allez dans le répertoire /tmp et téléchargez le script avec wget :
cd /tmp
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
Rendez maintenant le script exécutable en modifiant l'autorisation et déplacez-le dans le répertoire /usr/bin/ :
chmod +x clustercheck
mv clustercheck /usr/bin/
Ensuite, créez un script xinetd pour le clustercheck avec la commande vi dans le répertoire "/etc/xinet.d/" :
vi /etc/xinetd.d/mysqlchk
Collez la configuration ci-dessous :
# default: on
# description: mysqlchk
service mysqlchk
{
disable = no
flags = REUSE
socket_type = stream
port = 9200 # This port used by xinetd for clustercheck
wait = no
user = nobody
server = /usr/bin/clustercheck
log_on_failure += USERID
only_from = 0.0.0.0/0
per_source = UNLIMITED
}
Enregistrez et quittez.
Ajoutez clustercheck à la liste des services :
vi /etc/services
Allez à la ligne 10101, commentez les services qui utilisent le port 9200 et ajoutez une nouvelle ligne pour mysqlchk/clustercheck.
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Enregistrez le fichier et quittez.
Démarrez ensuite le service xinetd :
systemctl start xinetd
Pour effectuer le clustercheck, vous devez créer un nouvel utilisateur dans MySQL. Connectez-vous au shell MariaDB et créez un nouvel utilisateur avec le nom "clustercheckuser" et le mot de passe "clustercheckpassword !".
mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!' ;
exit;
À ce stade, tous les services MariaDB sont synchronisés.
Test de clustercheck :
/usr/bin/clustercheck
Assurez-vous que le code de résultat est 200.
Étape 2 - Installer et configurer HAProxy
Connectez-vous au serveur HAProxy :
ssh [email protected]
Devenez l'utilisateur root et ajoutez l'adresse IP et le nom d'hôte du serveur MariaDB au fichier "/etc/hosts" :
sudo su
vi /etc/hosts
HAProxy est disponible dans le référentiel de base CentOS, exécutez cette commande yum pour l'installer :
yum -y install haproxy
Configurez ensuite le journal pour HAProxy en modifiant le fichier de configuration rsyslog :
vi /etc/rsyslog.conf
Décommentez le port udp :
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 51
Enregistrez le fichier et quittez l'éditeur.
Ajoutez la configuration HAProxy dans le répertoire rsyslog.d :
vi /etc/rsyslog.d/haproxy.conf
Collez la configuration ci-dessous :
local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
Enregistrez le fichier et redémarrez rsyslog :
systemctl restart rsyslog
Ensuite, créez un nouveau fichier de configuration HAProxy.
Accédez au répertoire /etc/haproxy et sauvegardez le fichier de configuration dafult haproxy.
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Créer un nouveau fichier de configuration haproxy :
vi /etc/haproxy/haproxy.cfg
Et collez la configuration HAProxy ci-dessous :
global
log 127.0.0.1 local2
maxconn 1024
user haproxy
group haproxy
daemon
stats socket /var/run/haproxy.sock mode 600 level admin # Make sock file for haproxy
defaults
log global
mode http
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 1024
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen mariadb_cluster 0.0.0.0:3030
## MariaDB balance leastconn - the cluster listening on port 3030.
mode tcp
balance leastconn
option httpchk
server mariadb1 192.168.1.132:3306 check port 9200
server mariadb2 192.168.1.133:3306 check port 9200
server mariadb3 192.168.1.134:3306 check port 9200 backup # Make mariadb3 as backup - automatic replication data
listen stats 0.0.0.0:9000
## HAProxy stats web gui running on port 9000 - username and password: howtoforge.
mode http
stats enable
stats uri /stats
stats realm HAProxy\ Statistics
stats auth howtoforge:howtoforge
stats admin if TRUE
Port 3030 est le port MariaDB à charge équilibrée, nous pouvons accéder aux bases de données sur tous les serveurs MariaDB avec l'IP de l'équilibreur de charge et ce port.
Port 9000 est le port de l'interface graphique Web, il permet la surveillance de HAProxy depuis le navigateur.
Démarrez maintenant firewalld, ouvrez les ports 9000 et 3030, puis rechargez-le :
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
firewall-cmd --reload
Démarrez HAProxy avec la commande systemctl :
systemctl start haproxy
Étape 3 - Tester HAProxy et MariaDB
A. Test de réplication
Connectez-vous au serveur MariaDB, accédez au shell MySQL et créez une nouvelle base de données à partir de mariadb1, puis de mariadb2 et enfin de mariadb3.
mysql -u root -p
create database this_mariadb1; # Run this on mariadb1 server
create database this_mariadb2; # Run this on mariadb2 server
create database this_mariadb3; # Run this on mariadb3 server
Vérifiez les bases de données :
B. Accédez au serveur MariaDB via HAProxy
Nous accédons maintenant au cluster de serveurs MariaDB et aux bases de données via l'IP HAProxy sur le port 3030.
Avant de faire ce test, activez l'accès à distance au serveur MariaDB en créant un nouvel utilisateur root avec l'hôte "%".
Connectez-vous au shell MariaDB et créez un nouvel utilisateur "root" avec le mot de passe "aqwe123":
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO [email protected]'%' IDENTIFIED BY "aqwe123";
Ensuite, accédez à la table de base de données 'mysql.user' via le serveur HAProxy :
mysql -u root -p -h 192.168.1.135 -P 3030 -e "select Host, User, Password from mysql.user"
Vous pouvez voir les utilisateurs du serveur de base de données en accédant à l'IP de l'équilibreur de charge sur le port 3030. Vous pouvez accéder aux bases de données sur les nœuds MySQL en accédant à l'IP HAProxy sur le port 3030.
Autre test du serveur :l'algorithme de moindre connexion :
C. Connectez-vous à l'interface graphique Web HAProxy
Vous pouvez accéder au serveur de surveillance HAProxy sur le port 9000, avec le nom d'utilisateur et le mot de passe "howtoforge" pour afficher l'interface utilisateur Web HAProxy :
http://192.168.1.135:9000/stats
HAProxy a été installé avec succès et vous pouvez voir que les serveurs MariaDB sont surveillés.
Conclusion
MariaDB Galera Cluster est un cluster multi-maître synchrone qui fournit un équilibrage de charge pour les bases de données MySQL. C'est une bonne solution pour construire un puissant système de base de données pour votre site. MariaDB Galera Cluster prend en charge les moteurs de stockage xtradb et innodb, il fournit une réplication automatique et permet la jonction automatique de nouveaux nœuds. Nous pouvons utiliser HAProxy devant le cluster de bases de données comme équilibreur de charge. L'équilibreur de charge aide à distribuer les requêtes entrantes à toutes les bases de données. Nous utilisons le clustercheck de script bash pour effectuer la surveillance de la base de données à partir de HAProxy. MariaDB Galera Cluster et HAProxy est l'une des meilleures solutions pour construire un système de base de données à haute disponibilité.