Outils pour utilisateurs

Outils du site


sio:ppe3_2:g2:app_cluster

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

sio:ppe3_2:g2:app_cluster [18/09/2016 02:54] (Version actuelle)
Ligne 1: Ligne 1:
 +====== Mise en cluster de l'applicatif ======
 +===== Objectif =====
 +Le but de cette documentation est de présenter la mise en cluster d’un serveur Web avec la surveillance de la connectivité de la machine et du service nginx grace au service Corosync et Pacemaker.
  
 +===== Pré-requis =====
 +  * Un serveur Debian 7 opérationnel
 +  * Deux cartes réseau, une pour le LAN et une pour la ligne de vie
 +
 +===== Installation =====
 +Nous commençons par configurer les adresse de nos deux cartes réseaux. Nous plaçons eth0 sur le réseau DMZ d’adresse 172.29.0.0/24 et eth1 pour la ligne de vie 10.29.0.0/30.
 +Nous avons choisi de positionner notre premier serveur, GSB-Web, aux adresses 172.29.0.10/10.29.0.1 et le second serveur, GSB-Web2 aux adresses 172.29.0.11/10.29.0.2.
 +
 +Nous installons ensuite pacemaker, contenant corosync comme dépendance puis, temporairement, le paquet **haveged**. Il nous permettra de créer de l'entropie pour la clé corosync que nous générerons ensuite :
 +  # apt-get install pacemaker haveged
 +  # corosync-keygen
 +  # apt-get purge haveged
 +
 +===== Configuration =====
 +Une fois notre clé générée, nous la copions vers le second serveur et la plaçons dans le bon dossier, **/etc/corosync** :
 +  GSB-Web ~ # scp /etc/corosync/authkey user@172.29.0.11:/home/user
 +  GSB-Web2 ~ # mv /home/user/authkey /etc/corosync/
 +
 +Une fois fait, nous modifions le fichier **/etc/corosync/corosync.conf** et plus précisement la valeur **bindnetaddr** contenu dans le bloc interface lui même contenu dans le bloc totem :
 +  interface {
 +      # The following values need to be set based on your environment
 +      ringnumber: 0
 +      bindnetaddr: 172.29.0.0
 +      mcastaddr: 226.94.1.1
 +      mcastport: 5405
 +  }
 +
 +On ajoute notre second serveur dans le fichier **/etc/hosts** qui ressemblera à ceci :
 +  127.0.0.1    localhost
 +  172.29.0.10 GSB-Web
 +  172.29.0.11 GSB-Web2
 +  
 +  # The following lines are desirable for IPv6 capable hosts
 +  ::1 localhost ip6-localhost ip6-loopback
 +  ff02::1 ip6-allnodes
 +  ff02::2 ip6-allrouters
 +
 +Enfin, changeons la valeur **START** à **yes** dans le fichier **/etc/default/corosync** puis on démarre le service et vérifie l’état de notre cluster :
 +  # service corosync start
 +  # crm status
 +
 +{{ :sio:ppe3_2:g2:cluster_status_install.png |}}
 +
 +A partir de maintenant, nous travaillons sur un seul noeud. On attribue une adresse IP virtuelle (172.29.0.100) à notre cluster en créant une primitive nommée clusterWeb. Nous finissons en vérifiant la configuration et en appliquant les changements si aucun problème n’est signalé :
 +  crm
 +  cib new config
 +  configure
 +  primitive clusterWeb ocf:heartbeat:IPaddr params ip="172.29.0.100" cidr_netmask="24" nic="eth0" op monitor interval="5s"
 +  property stonith-enabled=false
 +  property no-quorum-policy=ignore
 +  location preferred-GSB-Web clusterWeb 100: GSB-Web
 +  verify
 +  commit
 +  end
 +
 +{{ :sio:ppe3_2:g2:cluster_status_heartbeat.png |}}
 +
 +Cette partie ne fonctionne que lorsque le serveur perd la connexion réseau. Nous allons maintenant configurer notre cluster pour gérer la panne du service web. Nous y ajouterons une colocation pour éviter la répartition des ressources entre les membres du cluster qui s’opére par défaut.
 +  crm
 +  configure
 +  primitive serviceWeb ocf:heartbeat:nginx params configfile="/etc/nginx/nginx.conf" meta migration-threshold="2" op monitor interval="10s" op start timeout="30s" op stop timeout="30s"
 +  colocation clusterWeb-serviceWeb inf: clusterWeb serviceWeb
 +  commit
 +  quit
 +
 +La gestion du service web se faisant maintenant avec notre cluster, nous désactivons le démarrage automatique d’nginx
 +  # update-rc.d -f nginx remove
 +
 +===== Mises à jour =====
 +==== Pare-feu ====
 +On modifie la règle de redirection du pare-feu en modifiant l’IP de 172.29.0.10 à 172.29.0.100 :
 +  # iptables -D PREROUTING -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.29.0.10:80
 +  # iptables -A PREROUTING -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.29.0.100:80
 +
 +==== Nginx ====
 +Afin d’identifier facilement le serveur que notre cluster utilise, nous configurons un header qui sera renvoyé par nginx lors des requêtes des clients. Pour cela, nous modifions le fichier **/etc/nginx/sites-available/applis_gsb** et y ajoutons la ligne :
 +  add_header "node" "WebX";
 +X correspondant au numèro de serveur.
 +
 +===== Jeu d’essai =====
 +^ Situation ^ Opération(s) réalisée(s) ^ Résultat ^
 +| Accès à l’applicatif (situation normale) | Rentrer l’IP du cluster dans un navigateur et on devrait obtenir la page de l’applicatif. | Depuis l’interface publique du routeur 172.16.2.2 et avec les bonnes redirections au niveau du pare-feu on obtiens bien la page de l’applicatif. |
 +| Arrêt du serveur maître | On coupe l’interface du serveur maître | On accède a l’application et lorsque l’on examine l’élément on voit  bien que c’est le serveur 2 qui nous a répondu |
 +| Arrêt du serveur esclave | On coupe l’interface du serveur esclave | On accède a l’application et lorsque l’on examine l’élément on voit  bien que c’est le serveur 1 qui nous a répondu |
 +
 +{{:sio:ppe3_2:g2:cluster_test2.png?450|}} {{:sio:ppe3_2:g2:cluster_test3.png?450|}}
sio/ppe3_2/g2/app_cluster.txt · Dernière modification: 18/09/2016 02:54 (modification externe)