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
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 :
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 :
Pour tester si le load balacing est fonctionnel, on se rend sur le fichier « table.php »
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