Load Balancing SQL avec HaProxy

Nous allons voir dans cet article comment mettre en place un service de load balancing avec HaProxy.                                                                                                                            Cet outil permet de répartir les utilisateurs d’un service entre différentes machines afin de garantir une meilleure qualité de service.Nous allons dans notre cas l’utiliser comme load balancer SQL.

Prérequis :

  • Un serveur Web qui a pour @IP : 10.10.116.110
  • Un serveur HaProxy qui pour @IP : 10.10.116.121
  • Deux serveurs MySQL avec pour @IP : 10.10.116.121 et 10.10.116.122

Configuration du Serveur WEB

On commence par installer les services nécessaires pour notre serveur Web :

apt-get update
apt-get install apache2 php5 php5-mysql

Il va maintenant falloir créer deux fichiers qui permettront respectivement de s’assurer que la connexion à nos bases de données et fonctionnelle et que le load balancing l’est également.

cd /var/www/html
rm index.html
nano connect.php

Voici le contenu du fichier connect.php

connect

Ici, la variable host_name correspond l’IP de notre serveur HaProxy, et la variable database le nom de notre bade de donnée. Nous indiquons ensuite les identifiants de connexion de notre base de donnée. Dans notre cas nous utilisons le compte root et le mode passe « Iroise29 ».

nano table.php

Et entrez-y les lignes suivantes :

table.PNG

Configuration des Serveurs MySQL :

Passons maintenant à la configuration de nos serveurs MySQL.

Sur les deux serveurs :

apt-get update --yes
apt-get install mysql-server 


nano /etc/mysql/my.cnf

Et commentez la ligne suivante :
#bind-address = 127.0.0.1

Nous utiliserons comme mot de passe MySQL « Iroise29 » comme indiqué précédemment.

On va ensuite créer une base de données puis table. (à faire toujours sur les deux serveurs) :

 mysql -u root -p
mysql> CREATE DATABASE exempledb;
mysql> USE exempledb;
mysql> CREATE TABLE exempletable(
 -> nom VARCHAR(200) DEFAULT 'tuto',
 -> PRIMARY KEY(nom)
 -> );

On indique maintenant une valeur différente dans les deux tables afin de pouvoir observer le load balacing sur le serveur Web.

Sur le serveur 1 :

mysql> INSERT INTO exempletable VALUES ('Serveur 1');

Sur le serveur 2 :

mysql> INSERT INTO exempletable VALUES ('Serveur 2');

 

Il faut créer les utilisateurs que HaProxy utilisera pour la connexion aux bases de données.

Sur les deux serveurs :

mysql> INSERT INTO mysql.user (Host,User) values 
('10.10.116.121','haproxy_check');
mysql> GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'10.10.116.121' 
IDENTIFIED BY 'Iroise29' WITH GRANT OPTION;
mysql> CREATE USER 'root'@'10.10.116.121' IDENTIFIED BY 'Iroise29';
mysql> GRANT ALL PRIVILEGES ON *.* to 'root'@'10.10.116.121';
mysql> FLUSH PRIVILEGES;
mysql> exit

Puis on redémarre le service mysql

service mysql restart

Configuration du Serveur HAProxy :

apt-get update 
apt-get install haproxy mysql-client

On se rend ensuite dans le fichier de configuration HAProxy pour le modifier comme ceci :

nano /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:E
CDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES
GCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!D$
ssl-default-bind-options no-sslv3

defaults
log global
# mode http
# option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
listen mysql-cluster
bind *:3306
mode tcp
option mysql-check user haproxy_check
balance roundrobin
server mysql1 10.10.116.121:3306 check
server mysql2 10.10.116.122:3306 check

Puis on redémarre le service :

service haproxy restart

Test de notre service :

Rendons nous sur notre serveur web afin de tester la connexion grâce au fichier « connect.php ».

La connexion est bien établie :

connect

Pour tester si le load balacing est fonctionnel, on se rend sur le fichier « table.php »

server

En rafraîchissant la page, la page affiche « Serveur 1 » puis « Serveur 2 » ce qui veut dire que le fichier « table.php » récupère les données successivement dans chacune des bases de données.

 

Laisser un commentaire

Créez un site ou un blog sur WordPress.com

Retour en haut ↑