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