GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment configurer HAProxy en tant qu'équilibreur de charge pour MariaDB sur CentOS 7

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é.


Cent OS
  1. Comment installer MariaDB sur CentOS 7

  2. Comment installer MariaDB sur CentOS 8

  3. Comment configurer le cluster MariaDB Galera sur Ubuntu 20.04

  4. Comment configurer l'équilibreur de charge HAProxy

  5. Comment configurer le serveur VNC pour un nouvel utilisateur dans CentOS/RHEL 5

Comment installer MariaDB sur CentOS 7

Comment installer ProjectPier sur CentOS 7

Comment installer HAProxy sur CentOS 8

Comment configurer HAProxy comme équilibreur de charge pour Nginx sur CentOS 8

Comment configurer HAProxy comme équilibreur de charge pour Nginx dans CentOS 7

Comment configurer HAProxy sur CentOS 8