MODOP – Installation CLUSTER MySQL Percona et HA Proxy

PARTIE 1 – INSTALLATION Cluster Percona/MySQL

3 Machines Mysql sous Centos7

  • Node01-sql : 10.10.0.11
  • Node02-sql : 10.10.0.12
  • Node03-sql : 10.10.0.13

Le Pool « RepliSQL » va être composé de trois machines virtuelles

  • Node01-sql -> 10.10.0.11
    • 2CPU, 4G RAM, 40Go Disk
  • Node02-sql -> 10.10.0.12
    • 2CPU, 4G RAM, 40Go Disk
  • Node03-sql -> 10.10.0.13
    • 2CPU, 4G RAM, 40Go Disk

1°) Désactiver SeLinux (3 nœuds)

[root@node01-sql chris]# vi /etc/selinux/config
SELINUX=disabled

2°) Désactiver IPV6 (3 nœuds)

[root@localhost ~]# echo "net.ipv6.conf.eth0.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p

3°) Ajouter sur tous les nœuds dans le DNS

/var/named/named.house.zone

4°) Update les sources et installation des paquets essentiels (3 nœuds)

[root@node01-sql chris]# yum update && yum upgrade
[root@node01-sql chris]# yum install qemu-guest-agent
[root@node01-sql chris]# yum install htop nmap net-tools

5°) Configurer le Firewall et ouverture des ports (3 nœuds)

[root@node01-sql chris]# systemctl enable firewalld
[root@node01-sql chris]# systemctl start firewalld

Ajout des Rules Firewall

[root@node03-sql chris]# firewall-cmd --permanent --add-port={3306,4444,4567,4568}/tcp
[root@node03-sql chris]# firewall-cmd --zone=public --add-port=4567/udp --permanent
[root@node01-sql chris]# firewall-cmd --reload

[root@node01-sql chris]# firewall-cmd --list-all

5°) Installation des sources repository (3 nœuds)

[root@node01-sql chris]# yum -y install epel-release
[root@node01-sql chris]# yum -y install socat

6°) Désinstallation des libs Sql non nécessaire (3 nœuds)

[root@node01-sql chris]# yum -y remove mariadb-libs

7°) Installation Percona XtraDB Cluster (3 nœuds)

[root@node01-sql chris]# yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
[root@node01sql chris]# yum update
[root@node01-sql chris]# yum install Percona-XtraDB-Cluster-server-56 Percona-XtraDB-Cluster-client-56 Percona-XtraDB-Cluster-shared-56 percona-toolkit percona-xtrabackup Percona-XtraDB-Cluster-galera-3 rsync nc

[root@node01-sql chris]# systemctl enable mysql
[root@node01-sql chris]# systemctl start mysql

8°) Configurer Percona/Mysql (3 nœuds)

[root@node01-sql chris]# mysql_secure_installation
Enter current password for root (enter for none): « ENTER »
Set root password? [Y/n] Y
New password: « Votre password »
Re-enter new password: « retaper password »
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
eload privilege tables now? [Y/n] Y

9°) Création d’un utilisateur commun aux 3 nœuds

[root@node01-sql chris]#mysql -u root -p
mysql> CREATE USER 'mysql-cluster'@'%' IDENTIFIED BY 'mysql@2020';
mysql> GRANT ALL ON *.* TO 'mysql-cluster'@'%';
mysql> FLUSH PRIVILEGES;

[root@node01-sql chris]# systemctl stop mysql

Configuration /etc/my.cnf sur le nœud node01-sql

[root@node01-sql etc]# vi /etc/my.cnf
wsrep_cluster_address = gcomm://
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so
wsrep_slave_threads = 8
wsrep_cluster_name = SQL-Cluster
wsrep_node_name = node01-sql
wsrep_node_address = node01-sql
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = mysql-cluster:mysql@2020

Configuration /etc/my.cnf sur le nœud node02-sql

[root@node02-sql etc]# vi /etc/my.cnf
wsrep_cluster_address = gcomm://node01-sql,node03-sql
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so
wsrep_slave_threads = 8
wsrep_cluster_name = SQL-Cluster
wsrep_node_name = node02-sql
wsrep_node_address = node02-sql
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = mysql-cluster:mysql@2020

Configuration /etc/my.cnf sur le nœud node03-sql

[root@node03-sql etc]# vi /etc/my.cnf
wsrep_cluster_address = gcomm://node01-sql,node02-sql
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so
wsrep_slave_threads = 8
wsrep_cluster_name = SQL-Cluster
wsrep_node_name = node03-sql
wsrep_node_address = node03-sql
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = mysql-cluster:mysql@2020

Démarrer les Serveurs Percona/Mysql

Démarrer Perconna/Mysql nœud node01-sql

[root@node01-sql etc]# systemctl start mysql@bootstrap

Démarrer Perconna/Mysql nœud node02-sql et node3-sql

[root@node01-sql etc]# systemctl start mysql

10°) Vérification sur les 3 nœuds Percona/Mysql

[root@node01-sql chris]# mysql -u root –p
mysql> SHOW STATUS LIKE 'wsrep_local_state_comment';

mysql> show global status like 'wsrep_cluster_size';

mysql> show global status like 'wsrep%';

PARTIE 2 – INSTALLATION HA + Cluster Percona/MySQL

2 Machines HA Proxy + Keepalived sous Centos7

  • Node01-lb : 10.10.0.14
  • Node02-lb : 10.10.0.15
  • sql-lb :10.10.0.16, IP Virtuelle KeepAlived
  • sql-lb :10.10.0.17, IP Virtuelle KeepAlived

Deux IP pour KeepAlived pour réaliser un LoadBalancing côté DNS.

1°) Ajouter les deux enregistrements pour le serveur sql-lb dans le DNS (Primaire et Secondaire)

/var/named/named.house.zone

Vérification OK

Le Pool « Loadbalancing » va être composé de deux machines virtuelles (IP Virtuelle : 10.10.0.16 et 10.10.0.17)

  • Node01-lb -> 10.10.0.14
    • 2CPU, 2G RAM, 10Go Disk
  • Node02-lb-> 10.10.0.15
    • 2CPU, 2G RAM, 10Go Disk

2°) Désactiver SeLinux (2 nœuds HA)

[root@node01-sql chris]# vi /etc/selinux/config
SELINUX=disabled

3°) Update les sources et installation des paquets essentiels (2 nœuds HA)

[root@node01-sql chris]# yum update && yum upgrade
[root@node01-sql chris]# yum install qemu-guest-agent
[root@node01-sql chris]# yum install htop nmap net-tools
[root@node01-sql chris]# yum install gcc kernel-headers kernel-devel

4°) Désactiver l’IPV6 sur les 2 nœuds

[root@localhost ~]# echo "net.ipv6.conf.eth0.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p

5°) Installer et configurer KeepAlive (2 noeuds)

Ajout règle sur ipv4

[root@node01-lb keepalived]# echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
[root@node01-lb keepalived]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1

Ajout rules Firewall(2 noeuds)

[root@node01-lb keepalived]# firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
[root@node01-lb keepalived]# firewall-cmd --reload

Install Keepalive (2 noeuds)

[root@node01-lb ~]# yum install keepalived
[root@node01-lb ~]# cd /etc/keepalived/
[root@node01-lb keepalived]# systemctl enable keepalived
[root@node01-lb keepalived]# systemctl stop keepalived
[root@node01-lb keepalived]# cp keepalived.conf keepalived.conf_old

Sur le nœud Master node01-lb

[root@node01-lb keepalived]# vi keepalived.conf
! Configuration File for keepalived
global_defs {
    notification_email {
    chris@en-images.info
     }
    notification_email_from chris@en-images.info
    smtp_server localhost
    smtp_connect_timeout 30
    }

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

virtual_ipaddress {
     10.10.0.16
     10.10.0.17
    }
}
[root@node01-lb keepalived]# systemctl start keepalived
[root@node01-lb keepalived]# ip a

Sur le nœud Master node02-lb

[root@node02-lb keepalived]# vi keepalived.conf
! Configuration File for keepalived
global_defs {
    notification_email {
    chris@en-images.info
    }
    notification_email_from chris@en-images.info
    smtp_server localhost
    smtp_connect_timeout 30
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

virtual_ipaddress {
    10.10.0.16
    10.10.0.17
    }
}
[root@node02-lb keepalived]# systemctl stop keepalived
[root@node02-lb keepalived]# systemctl start keepalived

6°)Test du KeepAlive Loadbalancing

On va stopper node01-lb pour vérifier que l’IP virtuelle présente sur node01-lb bascule sur node02-lb

[root@node01-lb ~]# systemctl stop keepalived

Coté node02-sql

L’ip Virtuelle 10.10.0.10 est basculer sur node02-lb.

Dans les logs node02-lb > Changement de l’état MASTER et attribution de l’IP

7°) Installer HA Proxy

Sur les 3 Nœuds Percona/Mysql ajouter les rules firewall

[root@node01-sql chris]# firewall-cmd --zone=public --add-port=9200/tcp --permanent
[root@node01-sql chris]# firewall-cmd --reload

Installation clustercheck (3 nœuds Percona/Mysql)

[root@node01-sql chris]# yum install wget
[root@node01-sql chris]# wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
[root@node01-sql chris]# mv clustercheck /usr/bin/Clustercheck
[root@node01-sql chris]# chmod +x /usr/bin/Clustercheck

Installer mysqlchk via xinetd (3 nœuds Percona/Mysql)

[root@node01-sql chris]# yum install xinetd
[root@node01-sql chris]# find / -name mysqlchk
/etc/xinetd.d/mysqlchk

[root@node01-sql chris]# vi /etc/xinetd.d/mysqlchk

Indiquer le script /usr/bin/Clustercheck

8°) Créer un utilisateur commun aux 3 nœuds Percona/Mysql

Création de l’utilisateur sur node01-sql qui se répliquer automatiquement sur les autres node02-sql et node03-sql.

[root@node01-sql chris]# mysql -u root –p
mysql> CREATE USER 'ClusterCheck'@'%' IDENTIFIED BY 'check@2020';
mysql> GRANT ALL ON *.* TO 'ClusterCheck'@'%';
mysql> FLUSH PRIVILEGES;

Vérifier la réplication de l’utilisateur ClusterCheck sur node02-sql et node03-sql.

Sur Node02-sql

[root@node02-sql chris]# mysql -u root –p
mysql> SELECT User, Host, Password FROM mysql.user;

Sur Nod03-sql

[root@node03-sql chris]# mysql -u root –p
mysql> SELECT User, Host, Password FROM mysql.user;

9°) Modifier/Configurer le script Clustercheck (3 nœuds Percona/Mysql)

[root@node01-sql 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@2020} »

Vérifier en lançant la commande que le Cluster est synchronisé.

[root@node01-sql chris]# /usr/bin/Clustercheck

Ajouter le service mysqlchl port 9200 au service (3 nœuds Percona/Mysql)

[root@node01-sql chris]# vi /etc/services
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
mysqlchk 9200/tcp # mysqlchk
[root@node01-sql chris]# systemctl enable xinetd
[root@node01-sql chris]# systemctl restart xinetd

10°) Installer et configurer HA Proxy ( 2 nœuds HA)

[root@node01-lb ~]# yum install haproxy
[root@node01-lb ~]# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
[root@node01-lb ~]# vi /etc/haproxy/haproxy.cfg
global
    log 127.0.0.1 local2
    log 127.0.0.1 local1 notice
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    maxconn 4096
    user haproxy
    group haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    log global
    mode http
    option tcplog
    option dontlognull
    retries 3
    option redispatch
    maxconn 2000
    timeout connect 5000
    timeout client 50000
    timeout server 50000

listen mysql-cluster 0.0.0.0:3306
    mode tcp
    balance roundrobin
    option httpchk
    server node01-sql 10.10.0.11:3306 check port 9200 inter 12000 rise 3 fall 3
    server node02-sql 10.10.0.12:3306 check port 9200 inter 12000 rise 3 fall 3
    server nodd03-sql 10.10.0.13:3306 check port 9200 inter 12000 rise 3 fall 3

## HAProxy stats web gui running on port 9000 - username and password: admin
    listen stats 0.0.0.0:9000
    mode http
    stats enable
    stats uri /stats
    stats realm HAProxy\ Statistics
    stats auth admin:admin
    stats admin if TRUE

11°) Configurer les rules du Firewall ( 2 Nœuds HA)

[root@node01-lb haproxy]# systemctl enable firewalld
[root@node01-lb haproxy]# systemctl start firewalld
[root@node01-lb haproxy]# firewall-cmd --permanent --add-port=9000/tcp
[root@node01-lb haproxy]# firewall-cmd --permanent --add-port=3030/tcp
[root@node01-lb haproxy]# firewall-cmd --reload

[root@node01-lb haproxy]# systemctl restart firewalld
[root@node01-lb haproxy]# systemctl restart haproxy

http://10.10.0.16:9000/stats ou http://10.10.0.17:9000/stats (Défini par « stats auth admin:admin»)

    • Login : admin
    • Password : admin

12°) Installation du client perona/MySQL ( 2 Nœuds HA)

[root@node01-lb chris]# yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
[root@node01-lb chris]# yum update --skip-broken
[root@node01-lb chris]# yum install Percona-XtraDB-Cluster-client-56

13°) Test Connexion au cluster Mysql node0x-sql via l’adresse virtuelle 192.168.1.100 du cluster HA proxy

[root@node01-lb chris]# mysql -u ClusterCheck -p -h 10.10.0.16 -P 3306 -e "select Host, User, Password from mysql.user"

Test création Base « sondes » à partir de l’IP virtuelle 10.10.0.17 HA Proxy et vérifions que toutes les nœuds sont à jour.

Création de la base via loadbalancing

[root@node01-lb chris]# mysql -u ClusterCheck -p -h 10.10.0.17 -P 3306 -e "create database sondes"

Vérifions sur les 3 nœuds Mysql

Sur node01-sql

[root@node01-sql chris]# mysql -u root –p
mysql> SHOW DATABASES;

Sur Node02-sql

Sur Node03-sql

Views: 77

Laisser un commentaire

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