Pour le Fun nous allons installer HaProxy + KeeAlive sur le fork RockyLinux
3 machines HaProxy (RockyLinux 8)
- node01-haw 172.16.186.20
- node02-haw 172.16.186.21
- node03-haw 172.16.186.22
- node-haw 192.168.1.230/24(vIP)
Le Pool « Cluster_SQLW » va être composé de trois machines virtuelles
- Node01-haw
- 2CPU, 2G RAM, 20Go Disk
- Disque 30Go Cluster GlusterGS (node01-gfsw)
- LAN Privé : 172.16.186.20
- LAN Public : 192.168.1.231
- Node02-haw -> 172.16.186.28
- 2CPU, 2G RAM, 20Go Disk
- Disque 30Go Cluster GlusterGS (node02-gfsw)
- LAN Privé : 172.16.186.21
- LAN Public : 192.168.1.232
- Node03-haw -> 172.16.186.29
- 2CPU, 2G RAM, 20Go Disk
- Disque 30Go Cluster GlusterGS (node03-gfsw)
- LAN Privé : 172.16.186.22
- LAN Public : 192.168.1.233
Comme pour le Cluster Web n nous ferons héberger le(s) fichier(s) de conf de HaProxy.
1°) Désactivation du SElinux (3 nœuds haw)
[root@node01-haw ~]# vi /etc/selinux/config
SELINUX=disabled
Redémarrer la machine.
[root@node01-haw ~]# reboot
2°) Installation de paquets utiles(3 nœuds haw)
[root@node01- haw ~]# yum update && yum upgrade
[root@node01- haw ~]#] yum install qemu-guest-agent
[root@node01- haw ~]# yum install nmap net-tools
3°)Installantion NTP (3 nœuds haw)
[root@node01- haw ~]# dnf install chrony
[root@node01- haw ~]# systemctl start chronyd
[root@node01- haw ~]# systemctl enable chronyd
[root@node01- haw ~]# systemctl status chronyd
[root@node01- haw ~]# firewall-cmd --permanent --add-service=ntp --zone=public
[root@node01- haw ~]# firewall-cmd --reload
4°) Installation du client Gluterfs (3 nœuds web)
[root@node01-haw ~]# yum -y install glusterfs-fuse
[root@node01-haw ~]# mkdir -p /sharegfs
Montage de la ressource /gfs dans /etc/fstab via le réseau privé (3 nœuds web)
node01-haw
[root@node01-haw ~]# vi /etc/fstab
node01-gfsw:/gfsw /sharegfs glusterfs defaults,_netdev 0 0
[root@node01-haw ~]# mount -a
[root@node01-haw ~]# df -Th /sharegfs/
node02-haw
[root@node02-haw ~]# vi /etc/fstab
node02-gfsw:/gfsw /sharegfs glusterfs defaults,_netdev 0 0
[root@node02-haw ~]# mount -a
[root@node02-haw ~]# df -Th /sharegfs/
node03-haw
[root@node03-haw ~]# vi /etc/fstab
node03-gfsw:/gfsw /sharegfs glusterfs defaults,_netdev 0 0
[root@node03-haw ~]# mount -a
[root@node03-haw ~]# df -Th /sharegfs/
5°) Installation de KeepAlive (3 nœuds haw)
[root@node03-haw ~]# yum -y install keepalived
[root@node03-haw ~]# yum -y install ipvsadm
[root@node03-haw ~]# modprobe ip_vs
[root@node03-haw ~]# echo ip_vs >> /etc/modules
[root@node03-haw ~]# firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
[root@node03-haw ~]# firewall-cmd --reload
Configuration node Master (node01-haw)
[root@node01-haw]# mv /etc/keepalived/keepalived.conf{,-old}
[root@node01-haw]# vi /etc/keepalived/keepalived.conf
global_defs {
enable_script_security
}
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 1
}
vrrp_instance VI_1 {
virtual_router_id 100
state MASTER
priority 102
#Interval Check
advert_int 1
#interface de synchro entre les haproxy
lvs_sync_daemon_interface ens19
interface ens19
#Authentification
authentication {
auth_type PASS
auth_pass 2021
}
#Address VIP
virtual_ipaddress {
192.168.1.230
}
track_script {
check_haproxy
}
}
[root@node01-haw ~]# systemctl enable keepalived && systemctl start keepalived
Configuration node Master (node02-haw)
[root@node02-haw]# mv /etc/keepalived/keepalived.conf{,-old}
[root@node02-haw]# vi /etc/keepalived/keepalived.conf
global_defs {
enable_script_security
}
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 1
}
vrrp_instance VI_1 {
virtual_router_id 100
state MASTER
priority 101
#Interval Check
advert_int 1
#interface de synchro entre les haproxy
lvs_sync_daemon_interface ens19
interface ens19
#Authentification
authentication {
auth_type PASS
auth_pass 2021
}
#Address VIP
virtual_ipaddress {
192.168.1.230
}
track_script {
check_haproxy
}
}
[root@node02-haw ~]# systemctl enable keepalived && systemctl start keepalived
Configuration node Master (node03-haw)
[root@node03-haw]# mv /etc/keepalived/keepalived.conf{,-old}
[root@node03-haw]# vi /etc/keepalived/keepalived.conf
global_defs {
enable_script_security
}
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 1
}
vrrp_instance VI_1 {
virtual_router_id 100
state MASTER
priority 100
#Interval Check
advert_int 1
#interface de synchro entre les haproxy
lvs_sync_daemon_interface ens19
interface ens19
#Authentification
authentication {
auth_type PASS
auth_pass 2021
}
#Address VIP
virtual_ipaddress {
192.168.1.230
}
track_script {
check_haproxy
}
}
[root@node03-haw ~]# systemctl enable keepalived && systemctl start keepalived
6°) Mode de fonctionnement de KeepALived
=> Les 3 machines sont UP
- l’IP virtuelle est portée par la machine dont la priorité est le plus haut : node01-haw
Côté Node01 (Priorité 102)
Côté Node02 et Node03 (Priorité 101 et 100)
=> La machine node01 est Down
- L’IP virtuelle sera portée par la machine qui sera le plus haut sur les machines encore UP
Côté Node02 (Priorité 101)
Côté Node03 (Priorité 100)
=> La machine node01 et node02 sont down
- L’IP virtuelle sera redistribué sur node03
On peut ainsi constater que si une machine du Ha Proxy venait à être hors ligne, l’IP virtuelle serait redistribué à la machine de priorité n-1.
7°) Installation de Ha Proxy (3 nœuds haw)
[root@node01-haw ~]# yum -y install haproxy
Sur le node01-haw
[root@node01-haw ~]# cd /etc/haproxy
[root@node01-haw haproxy]# mv haproxy.cfg{,-old}
[root@node01-haw haproxy]# mkdir -p /sharegfs/etc/haproxy
[root@node01-haw haproxy]# touch /sharegfs/etc/haproxy/haproxy.cfg
[root@node01-haw haproxy]# ln -s /sharegfs/etc/haproxy/haproxy.cfg haproxy.cfg
[root@node01-haw haproxy]# chmod 644 /sharegfs/etc/haproxy/haproxy.cfg
Sur le node02-haw
[root@node02-haw ~]# cd /etc/haproxy
[root@node02-haw haproxy]# mv haproxy.cfg{,-old}
[root@node02-haw haproxy]# ln -s /sharegfs/etc/haproxy/haproxy.cfg haproxy.cfg
Sur le node03-haw
[root@node03-haw ~]# cd /etc/haproxy
[root@node03-haw haproxy]# mv haproxy.cfg{,-old}
[root@node02-haw haproxy]# ln -s /sharegfs/etc/haproxy/haproxy.cfg haproxy.cfg
8° ) Configurer la Partie Global , Defaults et Site Management
Sur le node01-haw
[root@node01-haw haproxy]# yum install vim
[root@node01-haw ~]# vim /sharegfs/etc/haproxy/haproxy.cfg
######################################
# Partie Global , Default et Site Managemnt
#############################################
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
#description HA Proxy sur l'infrastructure HA Mail Cluster
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option dontlognull
option http-server-close
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen stats
bind *:9000
stats enable
stats uri /status
stats refresh 2s
stats auth chris:ChouxCroute2021
stats show-desc
stats show-legends
stats admin if TRUE
[root@node01-haw haproxy]# systemctl enable haproxy && systemctl start haproxy
[root@node02-haw haproxy]# systemctl enable haproxy && systemctl start haproxy
[root@node03-haw haproxy]# systemctl enable haproxy && systemctl start haproxy
[root@node01-haw haproxy]# firewall-cmd --add-port=9000/tcp --zone=public --permanent && firewall-cmd --reload
[root@node02-haw haproxy]# firewall-cmd --add-port=9000/tcp --zone=public --permanent && firewall-cmd --reload
[root@node03-haw haproxy]# firewall-cmd --add-port=9000/tcp --zone=public --permanent && firewall-cmd --reload
L’accès au site de management se fait à l’adresse suivant
9°) Configurer le Check des machines Ha Proxy(Couche OSI L4)
[root@node01-haw haproxy]# vim /sharegfs/etc/haproxy/haproxy.cfg
######################################
# Partie FrontEND
############################################
frontend Cluster_ha
mode http
acl ServerHAW hdr_dom(host) -i nodehaw.house.cpb
use_backend ClusterHA if ServerHAW
description FrontEnd pour le Cluster WEB HA Proxy
############################################
# Partie BackEND
#############################################
backend ClusterHA
balance roundrobin
server node01-haw node01-haw:9000 check inter 3s fall 3 rise 2
server node02-haw node02-haw:9000 check inter 3s fall 3 rise 2
server node03-haw node03-haw:9000 check inter 3s fall 3 rise 2
[root@node01-haw haproxy]# systemctl reload haproxy
[root@node02-haw haproxy]# systemctl reload haproxy
[root@node03-haw haproxy]# systemctl reload haproxy
10°) Installation Check HaProxy pour le Cluster MYsql (Couche OSI L7)
Côté Cluster SQLW
Rules Firewall 3 nœuds Percona/Mysql)
[root@node01-sqlw ~]# firewall-cmd --zone=public --add-port=9200/tcp --permanent && firewall-cmd --reload
Installation clustercheck (3 nœuds Percona/Mysql)
[root@node01-sqlw ~]# cd /home/chris
[root@node01-sqlw ~]# yum install wget
[root@node01-sqlw ~]# wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
[root@node01-sqlw ~]# mv clustercheck /usr/bin/Clustercheck
[root@node01-sqlw ~]# chmod +x /usr/bin/Clustercheck
Installer mysqlchk via xinetd (3 nœuds Percona/Mysql)
Le service Check sera exécuté via le daemon xinetd déclenché par la demande des HaProxy via le port 9200.
[root@node01-sqlw ~]# yum install xinetd
Créer un utilisateur commun aux 3 nœuds Percona/Mysql
A faire sur le node01 , il sera répliqué sur les autres node0x-sqlw
mysql> CREATE USER 'ClusterCheck'@'node01-haw' IDENTIFIED BY '%';
mysql> GRANT ALL ON *.* TO 'ClusterCheck'@'%';
mysql> FLUSH PRIVILEGES;
Réplication sur node02 et node03 des utilisateurs Clustercheck
[root@node02-sqlw chris]# mysql -u root -p -e "SELECT User, Host, Password FROM mysql.user;"
[root@node03-sqlw chris]# mysql -u root -p -e "SELECT User, Host, Password FROM mysql.user;"
Modifier le script Clustercheck (3 nœuds Percona/Mysql)
[root@node01-sqlw chris]# vi /usr/bin/Clustercheck
MYSQL_USERNAME="${MYSQL_USERNAME:=-clustercheckuser}"
MYSQL_PASSWORD="${MYSQL_PASSWORD-clustercheckpassword!}"
Modifier par
MYSQL_USERNAME= »${1-ClusterCheck} »
MYSQL_PASSWORD= »${2-check@2021} »
Check du script
[root@node01-sqlw chris]# /usr/bin/Clustercheck
Ajouter le service mysqlchl port 9200 au service (3 nœuds Percona/Mysql)
[root@node01-sqlw chris]# vi /etc/services
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
mysqlchk 9200/tcp # mysqlchk
Fichier /etc/xinetd.d/mysqlchk (3 nœuds Percona/Mysql)
# description: mysqlchk
service mysqlchk
{
disable = no
flags = REUSE
socket_type = stream
port = 9200
wait = no
user = nobody
server = /usr/bin/Clustercheck
log_on_failure += USERID
only_from = 0.0.0.0/0
per_source = UNLIMITED
}
[root@node01-sqlw chris]# chmod +x /etc/xinetd.d/mysqlchk
[root@node01-sqlw chris]# systemctl enable xinetd
[root@node01-sqlw chris]# systemctl restart xinetd
Côté Cluster HAW
Rules des Firewalld (3 nœuds haProxy)
[root@node01-haw haproxy]# firewall-cmd --zone=public --permanent --add-port=9200/tcp
[root@node01-haw haproxy]# firewall-cmd --zone=public --permanent --add-port=3306/tcp
[root@node01-haw haproxy]# firewall-cmd --reload
FrontEnd et backEnd Haproxy
[root@node01-haw haproxy]# vi /etc/haproxy/haproxy.cfg
frontend Cluster_Mysql
bind *:3306
mode tcp
use_backend Clustermysql
description FrontEnd pour le Cluster Mysql
listen Clustermysql
balance roundrobin
option httpchk
mode tcp
server node01-sqlw node01-sqlw:3306 check port 9200 inter 12000 rise 3 fall 3
server node02-sqlw node02-sqlw:3306 check port 9200 inter 12000 rise 3 fall 3
server node03-sqlw node03-sqlw:3306 check port 9200 inter 12000 rise 3 fall 3
Redémarrage haProxy (3 nœuds haProxy)
[root@node01-haw haproxy]# systemctl restart haproxy
[root@node02-haw haproxy]# systemctl restart haproxy
[root@node03-haw haproxy]# systemctl restart haproxy
Installation du client MySQL (3 nœuds haProxy)
[root@node01-haw chris]# yum install mysql
Test connexion Cluster SQL via client Lambda (client host :centos7)
[root@Centos7 ~]# yum install mysql
[root@Centos7 ~]# mysql -u ClusterCheck -p -h node-haw.house.cpb -P 3306 -e "select Host, User, Password from mysql.user"
Donc le client centos7 se connecte à une machine node0x-sqlw du cluster à travers le roundrobin de Haproxy (node-haw)
Pour différencier les accès machines nous allons ajouter au DNS les hosts suivants
- Sqlw.house.cpb – Accès Cluster SQL
- WordPress.house.cpb – Site wordpress
- Site1.house.cpb – Site test
Côté DNS
Côté client « centos7 »
11°) Ajouter le LoadBalancing Web (FrontEnd et BAckEnd ) – (Couche OSI L7)
[root@node01-haw ~]# vi /etc/haproxy/haproxy.cfg
frontend Cluster_web
bind *:80
mode http
#bloc load Cluster site1 Web
acl server_site1 hdr_dom(host) -i site1.house.cpb
use_backend ClusterWEB if server_site1
description FrontEnd pour le Cluster WEB
backend ClusterWEB
balance roundrobin
option httpchk GET /index.php
server node01-webw node01-webw:80 check inter 3s fall 3 rise 2
server node02-webw node02-webw:80 check inter 3s fall 3 rise 2
server node03-webw node03-webw:80 check inter 3s fall 3 rise 2
Redémarrage haProxy (3 nœuds haProxy)
[root@node01-haw haproxy]# systemctl restart haproxy
[root@node02-haw haproxy]# systemctl restart haproxy
[root@node03-haw haproxy]# systemctl restart haproxy
Rules Firewall (3 haProxy)
[root@node01-haw haproxy]# firewall-cmd --zone=public --permanent --add-service=http
[root@node01-haw haproxy]# firewall-cmd --reload
Vérifions le RoundRobin via HaProxy
On constate un roundrobin des accès sur les trois machines web à travers la machine Master node01-haw.
Views: 31