Dans l'article d'aujourd'hui, nous allons installer le cluster MariaDB Galera avec HAproxy pour MariaDB et wordpress à charge équilibrée. Galera est une technologie de clustering actif-actif, ce qui signifie qu'elle peut prendre en charge les écritures sur tous les nœuds qui sont ensuite répliquées sur le cluster. Il existe également un clustering actif-passif, où seul le nœud est accessible en écriture. Nous allons également installer HAproxy pour l'équilibrage de charge sur notre cluster. L'installation va se faire sur 5 serveurs CentOS 7, trois pour MariaDB 10.1 Galera, un pour Haproxy et un pour wordpress. HAproxy fonctionne de telle sorte qu'il achemine les requêtes vers chaque nœud en mode round robin, tout en se présentant comme un frontal. Ici, nous utilisons une méthode traditionnelle de clustering en ayant des serveurs de base de données assis dans un réseau privé et seul le serveur Web fait face à une adresse IP publique.
Configuration du cluster Galera
Sur tous les serveurs, nous devons installer mysql. Nous allons d'abord ajouter un référentiel
echo '[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1' >> /etc/yum.repos.d/MariaDB.repo
Ensuite, nous installons mariadb, rsync et xinetd
sudo yum install mariadb-server rsync xinetd
Nous devons éditer /etc/hosts, n'importe quel éditeur fera l'affaire mais j'utiliserai nano
nano /etc/hosts
Là-bas ip et noms de vos hôtes, par exemple
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
Assurez-vous d'utiliser l'adresse IP privée de vos hôtes, si vous utilisez des hôtes publics, vous devrez chiffrer le trafic entre eux pour sécuriser votre cluster.
Après avoir installé MariaDB, modifiez
nano /etc/my.cnf.d/server.cnf
Sur tous les serveurs, vous devez trouver la section [galera] dans le fichier et la faire ressembler à ceci, sauf pour les adresses IP qui sont en gras et doivent être modifiées
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
#add your node ips here
wsrep_cluster_address="gcomm://192.168.207.241,192.168.209.91,192.168.129.168"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#Cluster name
wsrep_cluster_name="linoxide_cluster"
# Allow server to accept connections on all interfaces.
bind-address=0.0.0.0
# this server ip, change for each server
wsrep_node_address="192.168.207.241"
# this server name, change for each server
wsrep_node_name="mariadb01"
wsrep_sst_method=rsync
Regarder le cluster Galera
Une fois cela configuré, vous devez démarrer le cluster
D'abord sur le nœud mariadb01 qui est le maître avec cette commande
galera_new_cluster
Puis sur les deux autres nœuds avec la commande systemctl normale :
systemctl start mariadb
Ensuite, nous pouvons vérifier que le cluster est en cours d'exécution :
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
La prochaine chose serait d'exécuter le script mysql_secure_installation
mysql_secure_installation
Configuration du pare-feu
Maintenant, lorsque les trois nœuds sont connectés, nous pouvons afficher le pare-feu et le configurer.
systemctl start firewalld
Ouvrez le client mariadb et les ports de réplication galera :
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
Ouvrir le port rsync que nous utilisons pour la réplication
firewall-cmd --permanent --add-port=873/tcp
Autres ports importants
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
Rechargez enfin le pare-feu
firewall-cmd --reload
Utiliser xinetd et clustercheck
Clustercheck est un script utile pour surveiller le cluster. Installons-le en suivant les commandes
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
chmod +x clustercheck
mv clustercheck /usr/bin/
Ensuite, nous devons ajouter mysqlchk à la liste des services. Pour cela nous éditons le fichier services :
nano /etc/services
Puisqu'il s'agit d'un fichier long, dans nano tapez Ctrl-W et recherchez 9200. Tous les services utilisant ce port doivent être commentés et un nouveau service doit être ajouté, de sorte que cette partie doit ressembler à ceci :
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Lorsque cela est enregistré et terminé, nous pouvons démarrer xinetd
systemctl start xinetd
Tout cela doit être fait sur tous les nœuds, et maintenant seulement sur le maître, nous devons ajouter un utilisateur pour clustercheck.
mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
exit;
Ensuite, nous pouvons essayer le script clustercheck
clustercheck
Configurer HAproxy
Connectez-vous à votre serveur haproxy désigné. Nous installons maintenant l'équilibreur de charge
Modifiez votre fichier /etc/hosts pour qu'il ressemble à ceci (avec votre adresse IP, bien sûr)
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
192.168.210.252 haproxy01
Ensuite, nous pouvons installer haproxy
yum install haproxy
Ensuite, nous devons éditer rsyslog.conf
nano /etc/rsyslog.conf
Décommentez ces deux lignes
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
Enregistrer et quitter
echo 'local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
' >> /etc/rsyslog.d/haproxy.conf
permet de sauvegarder la configuration haproxy par défaut
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
Ensuite, nous créons un nouveau fichier avec nano
nano /etc/haproxy/haproxy.cfg
Utilisez ce pastebin comme configuration, mais changez les adresses IP.
Il est temps de configurer le pare-feu sur le nœud haproxy
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
Rechargez ensuite le pare-feu
firewall-cmd --reload
Configuration de l'accès à MariaDB depuis HAproxy
Sur le type de cluster mariadb :
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY "verystrongpassword";
Ensuite, nous allons sur le serveur haproxy01 et essayons d'accéder à la base de données.
Vous devez avoir le client MariaDB installé, alors faisons d'abord cela :
echo '[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1' >> /etc/yum.repos.d/MariaDB.repo
C'était pour ajouter un référentiel, cette commande l'installe
yum install MariaDB-client
Et ensuite testons si
mysql -u root -p -h 192.168.210.252 -P 3030 -e "select Host, User, Password from mysql.user"
Assurez-vous d'entrer verystrongpassword comme mot de passe et non votre mot de passe root habituel.
Installer Wordpress
Enfin, nous allons configurer wordpress à utiliser sur notre cluster. Il y a du travail à faire sur le nœud mariadb01, sur haproxy01 et sur le nœud wp01.
Sur mariadb01
mysql -u root -p
CREATE DATABASE wordpress;
CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';
GRANT ALL ON wordpress.* TO wordpressuser@'192.168.210.252' IDENTIFIED BY 'password';
Sur le nœud wp01 défini dans /etc/hosts/
192.168.220.17 wp01
192.168.210.252 haproxy01
Aussi sur haproxy01 ajouter
192.168.220.17 wp01
Ensuite, nous devons installer les packages requis sur le nœud wp01
yum install httpd php php-gd php-mysqlnd rsync
À partir de là, nous devons utiliser un compte non root avec des privilèges sudo. Je n'en ai pas, donc je vais le créer :
useradd miki
usermod miki -aG wheel
passwd miki
Connectez-vous ensuite en tant que mon utilisateur
su miki
Remplacez le répertoire par home
cd
Ensuite, téléchargez la dernière version de wordpress et décompressez-la
wget http://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
Nous allons utiliser rsync pour copier le wordpress dans le répertoire apache
sudo rsync -avP ~/wordpress/ /var/www/html/
mkdir /var/www/html/wp-content/uploads
Nous devons également changer la propriété en utilisateur apache
sudo chown -R apache:apache /var/www/html/*
Configurer wordpress
WordPress est configuré dans le fichier wp-config.php, nous devons y définir des paramètres tels que l'adresse hôte du serveur de base de données, les identifiants de connexion, le nom de la base de données. Sauvegardez le fichier de configuration :
cd /var/www/html
cp wp-config-sample.php wp-config.php
Et puis on fait le montage :
nano wp-config.php
Ne modifiez que ces lignes
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'wordpressuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', '192.168.210.252:3030');
Enfin, nous redémarrons le serveur Web apache :
sudo systemctl restart httpd
Terminez l'installation de WordPress depuis le navigateur
Nous pouvons accéder à l'adresse publique du nœud wordpress comme ci-dessous pour continuer le processus d'installation de word-press
Nous avons maintenant le cluster configuré avec wordpress en cours d'exécution
Conclusion
Ici, nous avons configuré wordpress au-dessus du cluster Galera équilibré par HAproxy. Il s'agit d'une solution résiliente pour les sites à forte charge et bien que la configuration prenne un certain temps, elle offre à votre site une assurance presque complète contre les temps d'arrêt. Tout le trafic entre les nœuds est effectué par des adresses IP privées, et une seule adresse publique pour le frontal Worpress est utilisée pour accéder au site. Ce serait tout pour cet article, merci d'avoir lu et bonne journée.