MODOP – PARTIE 5 – Installation WordPress en HA – Cluster HaProxy

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *