GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer la haute disponibilité de Nginx avec Pacemaker, Corosync et Crmsh sur Ubuntu 16.04

Dans ce didacticiel, je vais vous montrer étape par étape comment créer un serveur Web Nginx en cluster à haute disponibilité avec Pacemaker, Corosync et Crmsh. Nous allons créer un serveur Web Nginx de cluster actif-passif ou de cluster de basculement à l'aide de Pacemaker sur Ubuntu 16.04.

stimulateur cardiaque est un logiciel de gestion de cluster open source qui atteint une haute disponibilité maximale de vos services. Il s'agit d'un gestionnaire de cluster HA avancé et évolutif développé par ClusterLabs depuis 2007.

LeCorosync Cluster Engine est un projet open source dérivé du projet OpenAIS en 2008 et publié sous la licence BSD. Il s'agit d'un système de communication de groupe avec des fonctionnalités supplémentaires pour la mise en œuvre de la haute disponibilité dans les applications.

Plusieurs applications sont disponibles pour l'interface Pacemaker et Crmsh est l'un d'eux. Il s'agit d'une interface de ligne de commande Pacemaker pour gérer la pile haute disponibilité Pacemaker. Crmsh est écrit en python. Nous pouvons créer, configurer et dépanner la pile Pacemaker HA avec l'outil de ligne de commande Crmsh.

Prérequis

  • Trois serveurs Ubuntu 16.04
    • web01       10.0.15.11
    • web02       10.0.15.12
    • web03       10.0.15.13
  • Une adresse IP flottante 10.0.15.15
  • Privilèges racine

Qu'allons-nous faire ?

  1. Mappage du fichier d'hôtes.
  2. Installer et configurer Nginx.
  3. Installez Pacemaker, Corosync et Crmsh.
  4. Configurer la clé Corosync.
  5. Démarrer tous les services.
  6. Créer et configurer un cluster.
  7. Test.

Étape 1 - Mapper le fichier Hosts

Remarque :
Exécutez les étapes 1 à 3 sur les trois serveurs 'web01', 'web02', 'web03'.

Dans ce tutoriel, j'utiliserai 3 serveurs Ubuntu 16.04 et chacun d'eux a un nom d'hôte unique :'web01', 'web02' et 'web03'. Chaque serveur peut se connecter aux autres serveurs avec le nom d'hôte du serveur.

Pour y parvenir, éditez le fichier '/etc/hosts' sur tous les serveurs avec vim.

vim /etc/hosts

Collez la configuration /etc/hosts ci-dessous.

10.0.15.11      web01
10.0.15.12      web02
10.0.15.13      web03
10.0.15.15      ha-web.co

Enregistrez le fichier et quittez vim.

Ensuite, testez tous les serveurs en envoyant un ping aux autres serveurs via chaque nom d'hôte.

ping -c 3 web01
ping -c 3 web02
ping -c 3 web03

Étape 2 - Installer et configurer Nginx

Nous commençons maintenant à créer la configuration de haute disponibilité du serveur Web Nginx en créant le cluster de basculement avec Pacemaker. Nous devons d'abord installer Nginx sur chacun des nœuds du serveur.

Installez Nginx avec la commande apt ci-dessous.

apt install -y nginx

Une fois l'installation terminée, remplacez la page par défaut de nginx par une page unique sur chaque serveur en exécutant les commandes ci-dessous afin que nous puissions identifier ultérieurement quel serveur a livré une page.

#Run Command on 'web01'
echo '<h1>web01 - hakase-labs</h1>' > /var/www/html/index.html

#Run Command on 'web02'
echo '<h1>web02 - hakase-labs</h1>' > /var/www/html/index.html

#Run Command on 'web03'
echo '<h1>web03 - hakase-labs</h1>' > /var/www/html/index.html

Arrêtez maintenant le serveur Web.

systemctl stop nginx

L'installation et la configuration de Nginx sont terminées.

Étape 3 - Installer Pacemaker, Corosync et Crmsh

Pacemaker est une application de gestionnaire de cluster open source. Corosync est un moteur de cluster pour Pacemaker, et Crmsh est un outil basé sur Python pour gérer un cluster Pacemaker. Toutes ces applications sont disponibles dans le référentiel Uubuntu.

Installez Pacemaker, Corosync et crmsh avec la commande apt ci-dessous.

apt install -y pacemaker corosync crmsh

Après l'installation, tous ces services s'exécutent automatiquement sur le système. Arrêtez-les avec les commandes systemctl ci-dessous.

systemctl stop corosync
systemctl stop pacemaker

La pile logicielle qui fournit la haute disponibilité pour Nginx a été installée.

Étape 4 - Configurer Corosync

Remarque :
Exécutez l'étape 4 uniquement sur le serveur 'web01'.

Comme nous n'utilisons pas pcsd pour Ubuntu, nous devons configurer Corosync manuellement. Nous allons générer la clé Corosync pour l'authentification du cluster et créer un nouveau fichier de configuration Corosync sur le serveur 'web01', puis copier la clé et la configuration sur les autres serveurs 'web02' et 'web03'.

Avant de générer la clé Corosync, nous devons installer le nouveau package 'haveged'. Il est utilisé pour obtenir de meilleurs nombres aléatoires pour la génération de clé Corosync.

Installez haveged à partir du référentiel avec la commande apt.

apt install -y haveged

Générez maintenant une nouvelle clé Corosync avec la commande ci-dessous.

corosync-keygen

Lorsque la génération de clé est terminée, vous pouvez voir la nouvelle clé 'authkey' dans le répertoire '/etc/corosync/'.

ls -lah /etc/corosync/

Ensuite, allez dans le répertoire '/etc/corosync' et sauvegardez le fichier de configuration par défaut 'corosync.conf'.

cd /etc/corosync/
mv corosync.conf corosync.conf.bekup

Créez ensuite un nouveau fichier de configuration 'corosync.conf' avec vim.

vim corosync.conf

Collez la configuration ci-dessous dans ce fichier.

# Totem Protocol Configuration
totem {
  version: 2
  cluster_name: hakase-cluster
  transport: udpu

# Interface configuration for Corosync
  interface {
    ringnumber: 0
    bindnetaddr: 10.0.15.0
    broadcast: yes
    mcastport: 5407
  }
}

# Nodelist - Server List
nodelist {
  node {
    ring0_addr: web01
  }
  node {
    ring0_addr: web02
  }
  node {
    ring0_addr: web03
  }
}

# Quorum configuration
quorum {
  provider: corosync_votequorum
}

# Corosync Log configuration
logging {
  to_logfile: yes
  logfile: /var/log/corosync/corosync.log
  to_syslog: yes
  timestamp: on
}

service {
  name: pacemaker
  ver: 0
}

Enregistrez le fichier et quittez l'éditeur.

Ensuite, copiez la clé d'authentification et le fichier de configuration du serveur 'web01' vers les serveurs 'web02' et 'web03'.

scp /etc/corosync/* [email protected]:/etc/corosync/
scp /etc/corosync/* [email protected]:/etc/corosync/

Lorsque tout est terminé, rendez-vous sur les serveurs 'web02' et 'web03', puis vérifiez les fichiers.

ssh [email protected]
cd /etc/corosync/
ls -lah

La configuration de Corosync est terminée.

Étape 5 - Démarrer tous les services de cluster

Remarque :
Exécutez l'étape 5 sur tous les serveurs.

Démarrez la pile logicielle du cluster HA, stimulateur cardiaque et corosync, sur tous les serveurs. Ensuite, activez-le pour qu'il démarre automatiquement au démarrage.

Démarrez Corosync et ajoutez-le pour qu'il démarre automatiquement au démarrage.

systemctl start corosync
systemctl enable corosync

Démarrez maintenant le stimulateur cardiaque et activez-le pour qu'il démarre au démarrage.

systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemaker

Tous les services ont été démarrés, vérifiez tous les nœuds et assurez-vous que le statut du serveur est "En ligne" sur chacun d'eux.

crm status

Ou vous pouvez vérifier l'état en vérifiant les membres Corosync avec la commande corosync-cmapctl ci-dessous.

corosync-cmapctl | grep members

Vous verrez toutes les adresses IP du serveur.

Étape 6 - Créer et configurer le cluster

REMARQUE :
Exécutez l'étape 6 uniquement sur le serveur web01

Dans cette étape, nous allons configurer le cluster Nginx actif-passif à l'aide de l'outil de ligne de commande crmsh. Puisque nous n'utilisons pas d'appareil STONITH, nous voulons désactiver STONITH et ignorer la politique de quorum sur notre cluster.

Exécutez les commandes crm ci-dessous pour désactiver "STONITH" et ignorer la règle de quorum.

crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignore

Vérifiez maintenant le statut de STONITH et la politique de quorum avec la commande crm ci-dessous.

crm configure show

Vous verrez le résultat ci-dessous.

Ensuite, nous devons créer de nouvelles ressources pour le cluster. Pacemaker prend en charge les types d'agents de ressources (RA) suivants.

  • LSB (Linux Standard Based) - Fourni par la distribution Linux. ex :script '/etc/init.d/service'.
  • OCF (Open Cluster Framework) - Ensemble d'outils pour l'informatique en cluster. Le projet fait partie de la Fondation Linux.

Pour notre serveur Web Nginx HA, nous devons créer deux ressources OCF :"virtual_ip" pour l'adresse IP flottante et "webserver" pour le service nginx.

Créez une nouvelle ressource "virtual_ip" pour la configuration IP flottante avec la commande crm ci-dessous.

sudo crm configure primitive virtual_ip \
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \
cidr_netmask="32" op monitor interval="10s" \
meta migration-threshold="10"

Et pour le nginx 'webserver', créez la ressource avec la commande ci-dessous.

sudo crm configure primitive webserver \
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \
op start timeout="40s" interval="0" \
op stop timeout="60s" interval="0" \
op monitor interval="10s" timeout="60s" \
meta migration-threshold="10"

Lorsque cela est fait, vérifiez les nouvelles ressources 'virtual_ip' et 'webserver' avec la commande ci-dessous. Assurez-vous que toutes les ressources ont le statut "démarré".

crm resource status

Enfin, nous devons ajouter un groupe pour la nouvelle configuration du service Failover IP. Nous souhaitons migrer le service 'Nginx' sur une ressource 'webserver' avec une IP flottante sur une ressource 'virtual_ip'.

Nous avons déjà créé l'IP flottante et le service, ajoutez maintenant ces ressources à un nouveau groupe nommé 'hakase_balancing' avec la commande ci-dessous. Vous pouvez bien sûr choisir votre propre nom de groupe ici, assurez-vous simplement de remplacer le nom partout où il est utilisé.

sudo crm configure group hakase_balancing virtual_ip webserver

Un nouveau groupe de ressources avec le nom 'hakase_balancing' a été défini. Vous pouvez le vérifier avec la commande ci-dessous.

crm resource show

Vous obtiendrez un groupe nommé hakase_balancing avec les ressources des membres 'virtual_ip' et 'webserver'.

La configuration du cluster est terminée.

Étape 7 - Tester

Tester l'état du nœud et l'état du cluster.

crm status

Nous avons 3 nœuds avec le statut "En ligne".

Nous avons un groupe de ressources nommé 'hakase_balancing', et il s'exécute maintenant sur le nœud 'web01'.

Test du serveur Web Nginx à partir d'un navigateur Web. Visitez l'adresse IP flottante, le nom de mon serveur de test est - ha-web.co . Utilisez ici le nom que vous avez choisi pour votre serveur.

Toutes les ressources sont sur le nœud 'web01'.

Tester le cluster actif-passif ou le basculement

Arrêtez le cluster sur le serveur 'web01' en exécutant la commande ci-dessous sur le nœud 'web01'.

crm cluster stop

Vous obtiendrez le résultat 'INFO :Services de cluster arrêtés '.

Connectez-vous maintenant au nœud 'web02' et vérifiez l'état du cluster.

crm status


Vous obtenez maintenant le résultat que le nœud 'web01' est 'Hors ligne', et les ressources de virtual_ip et webserver sont basculées vers le nœud 'web02'.

Lorsque vous visitez à nouveau l'IP flottante 'ha-web.co ', vous obtiendrez la page web02.

La haute disponibilité de Nginx avec Pacemaker, Corosync et Crmsh sur Ubuntu 16.04 a été installée et testée avec succès.


Ubuntu
  1. Comment configurer votre pare-feu Ubuntu avec UFW et définir des règles de pare-feu

  2. Comment configurer la haute disponibilité de MariaDB avec Heartbeat et DRBD sur Ubuntu 16.04 LTS

  3. Comment installer Nginx avec PHP5 et MySQL sur Ubuntu 11.10

  4. Comment installer et configurer PHP et Nginx (LEMP) sur Ubuntu 20.04

  5. Comment configurer le cluster haute disponibilité Nginx à l'aide de Pacemaker sur CentOS 7

Comment installer Django avec PostgreSQL et Nginx sur Ubuntu 16.04

Comment installer Nginx avec PHP et MySQL (pile LEMP) sur Ubuntu 18.04

Comment installer Wordpress avec Nginx, MariaDB et HHVM dans Ubuntu 15.04

Comment installer l'ensemble de règles de base OWASP sur Modsecurity avec Nginx sur Ubuntu 20.04

Comment configurer ModSecurity avec Nginx sur Debian/Ubuntu

Comment configurer un serveur Seafile avec Nginx sur Ubuntu 18.04