Recherche de site Web

Comment configurer et maintenir la haute disponibilité/le clustering sous Linux


La haute disponibilité (HA) fait simplement référence à la qualité d'un système capable de fonctionner en continu sans panne pendant une longue période de temps. Les solutions HA peuvent être mises en œuvre à l'aide de matériel et/ou de logiciels, et l'une des solutions courantes pour la mise en œuvre de la haute disponibilité est le clustering.

En informatique, un cluster est composé de deux ordinateurs ou plus (communément appelés nœuds ou membres) qui travaillent ensemble pour effectuer une tâche. Dans une telle configuration, un seul nœud fournit le service, le ou les nœuds secondaires prenant le relais en cas de panne.

Les clusters se répartissent en quatre grands types :

  • Stockage : fournissez une image cohérente du système de fichiers sur tous les serveurs d'un cluster, permettant aux serveurs de lire et d'écrire simultanément sur un seul système de fichiers partagé.
  • Haute disponibilité : éliminez les points de défaillance uniques et basculez les services d'un nœud de cluster à un autre au cas où un nœud deviendrait inopérant.
  • Équilibrage de charge : répartissez les requêtes de service réseau vers plusieurs nœuds de cluster pour équilibrer la charge des requêtes entre les nœuds de cluster.
  • Hautes performances : effectuez des traitements parallèles ou simultanés, contribuant ainsi à améliorer les performances des applications.

Une autre solution largement utilisée pour fournir de la HA est la réplication (en particulier les réplications de données). La réplication est le processus par lequel une ou plusieurs bases de données (secondaires) peuvent être synchronisées avec une seule base de données principale (ou principale).

Pour configurer un cluster, nous avons besoin d'au moins deux serveurs. Pour les besoins de ce guide, nous utiliserons deux serveurs Linux :

  • Nœud1 : 192.168.10.10
  • Nœud2 : 192.168.10.11

Dans cet article, nous démontrerons les bases du déploiement, de la configuration et du maintien de la haute disponibilité/du clustering dans Ubuntu 16.04/18.04 et CentOS 7. Nous montrerons comment ajouter le service HTTP Nginx au cluster.

Configuration des paramètres DNS locaux sur chaque serveur

Pour que les deux serveurs communiquent entre eux, nous devons configurer les paramètres DNS locaux appropriés dans le fichier /etc/hosts sur les deux serveurs.

Ouvrez et modifiez le fichier à l'aide de votre éditeur de ligne de commande préféré.

sudo vim /etc/hosts  

Ajoutez les entrées suivantes avec les adresses IP réelles de vos serveurs.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Enregistrez les modifications et fermez le fichier.

Installation du serveur Web Nginx

Installez maintenant le serveur Web Nginx à l'aide des commandes suivantes.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Une fois l'installation terminée, démarrez le service Nginx pour le moment et activez-le pour démarrer automatiquement au démarrage, puis vérifiez s'il est opérationnel à l'aide de la commande systemctl.
Sur Ubuntu, le service doit être démarré automatiquement immédiatement une fois la préconfiguration du package terminée, vous pouvez simplement l'activer.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Après avoir démarré le service Nginx, nous devons créer des pages Web personnalisées pour identifier et tester les opérations sur les deux serveurs. Nous modifierons le contenu de la page d'index Nginx par défaut comme indiqué.

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Installation et configuration de Corosync et Pacemaker

Ensuite, nous devons installer Pacemaker, Corosync et Pcs sur chaque nœud comme suit.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

Une fois l'installation terminée, assurez-vous que le démon pcs est exécuté sur les deux serveurs.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

Création du cluster

Lors de l'installation, un utilisateur système appelé « hacluster » est créé. Nous devons donc configurer l'authentification nécessaire pour les pcs. Commençons par créer un nouveau mot de passe pour l'utilisateur « hacluster », nous devons utiliser le même mot de passe sur tous les serveurs :

sudo passwd hacluster

Ensuite, sur l'un des serveurs (Node1), exécutez la commande suivante pour configurer l'authentification nécessaire pour les pcs.

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Créez maintenant un cluster et remplissez-le avec quelques nœuds (le nom du cluster ne peut pas dépasser 15 caractères, dans cet exemple, nous avons utilisé examplecluster) sur le serveur Node1.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Activez maintenant le cluster au démarrage et démarrez le service.

sudo pcs cluster enable --all
sudo pcs cluster start --all

Vérifiez maintenant si le service de cluster est opérationnel à l'aide de la commande suivante.

sudo pcs status
OR
sudo crm_mon -1

À partir du résultat de la commande ci-dessus, vous pouvez voir qu'il y a un avertissement indiquant qu'il n'y a aucun périphérique STONITH, mais que le STONITH est toujours activé dans le cluster. De plus, aucune ressource/service de cluster n'a été configuré.

Configuration des options de cluster

La première option consiste à désactiver STONITH (ou Shoot The Other Node In The Head), l'implémentation de clôture sur Pacemaker.

Ce composant aide à protéger vos données contre la corruption par un accès simultané. Pour les besoins de ce guide, nous le désactiverons car nous n'avons configuré aucun appareil.

Pour désactiver STONITH, exécutez la commande suivante :

sudo pcs property set stonith-enabled=false

Ensuite, ignorez également la stratégie Quorum en exécutant la commande suivante :

sudo pcs property set no-quorum-policy=ignore

Après avoir défini les options ci-dessus, exécutez la commande suivante pour voir la liste des propriétés et assurez-vous que les options ci-dessus, stonith et la politique de quorum sont désactivées.

sudo pcs property list

Ajout d'un service de ressource/cluster

Dans cette section, nous verrons comment ajouter une ressource de cluster. Nous allons configurer une IP flottante qui est l'adresse IP qui peut être instantanément déplacée d'un serveur à un autre au sein du même réseau ou centre de données. En bref, une IP flottante est un terme technique commun, utilisé pour les IP qui ne sont pas strictement liées à une seule interface.

Dans ce cas, il sera utilisé pour prendre en charge le basculement dans un cluster à haute disponibilité. Gardez à l’esprit que les adresses IP flottantes ne sont pas uniquement destinées aux situations de basculement, elles ont quelques autres cas d’utilisation. Nous devons configurer le cluster de telle manière que seul le membre actif du cluster « possède » ou réponde à l'adresse IP flottante à un moment donné.

Nous ajouterons deux ressources de cluster : la ressource d'adresse IP flottante appelée « floating_ip » et une ressource pour le serveur Web Nginx appelée « http_server ».

Commencez par ajouter le float_ip comme suit. Dans cet exemple, notre adresse IP flottante est 192.168.10.20.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

où :

  • floating_ip : est le nom du service.
  • « ocf:heartbeat:IPaddr2 » : indique à Pacemaker quel script utiliser, IPaddr2 dans ce cas, dans quel espace de noms il se trouve (pacemaker) et à quelle norme il se conforme à ocf.
  • « op monitor interval=60s » : demande à Pacemaker de vérifier l'état de ce service toutes les minutes en appelant l'action de surveillance de l'agent.

Ajoutez ensuite la deuxième ressource, nommée http_server. Ici, l'agent de ressource du service est ocf:heartbeat:nginx.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Une fois que vous avez ajouté les services du cluster, exécutez la commande suivante pour vérifier l'état des ressources.

sudo pcs status resources

En regardant le résultat de la commande, les deux ressources ajoutées : « floating_ip » et « http_server » ont été répertoriées. Le service float_ip est désactivé car le nœud principal est en fonctionnement.

Si le pare-feu est activé sur votre système, vous devez autoriser tout le trafic vers Nginx et tous les services haute disponibilité via le pare-feu pour une communication correcte entre les nœuds :

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

Test de haute disponibilité/clustering

La dernière et importante étape consiste à tester le fonctionnement de notre configuration haute disponibilité. Ouvrez un navigateur Web et accédez à l'adresse 192.168.10.20. Vous devriez voir la page Nginx par défaut de node2.example.com, comme indiqué dans la capture d'écran.

Pour simuler une panne, exécutez la commande suivante pour arrêter le cluster sur node2.example.com.

sudo pcs cluster stop http_server

Rechargez ensuite la page à 192.168.10.20, vous devriez maintenant accéder à la page Web Nginx par défaut à partir de node1.example.com.

Alternativement, vous pouvez simuler une erreur en demandant au service de s'arrêter directement, sans arrêter le cluster sur aucun nœud, en utilisant la commande suivante sur l'un des nœuds :

 
sudo crm_resource --resource http_server --force-stop 

Ensuite, vous devez exécuter crm_mon en mode interactif (par défaut), dans l'intervalle de surveillance de 2 minutes, vous devriez pouvoir voir l'avertissement du cluster indiquant que le http_server a échoué et se déplacer. vers un autre nœud.

Pour que vos services de cluster fonctionnent efficacement, vous devrez peut-être définir certaines contraintes. Vous pouvez consulter la page de manuel pcs (man pcs) pour une liste de toutes les commandes d'utilisation.

Pour plus d'informations sur Corosync et Pacemaker, consultez : https://clusterlabs.org/

Résumé

Dans ce guide, nous avons montré les bases du déploiement, de la configuration et du maintien de la haute disponibilité/clustering/réplication dans Ubuntu 16.04/18.04 et CentOS 7. Nous avons montré comment ajouter le service HTTP Nginx à un cluster. Si vous avez des idées à partager ou des questions, utilisez le formulaire de commentaires ci-dessous.