Haute disponibilité d`un serveur FTP

Transcription

Haute disponibilité d`un serveur FTP
Haute disponibilité d'un serveur FTP
Propriétés
Description
Type de publication
Côté Labo
Intitulé court
Haute disponibilité d'un serveur FTP (File Transfert Protocol)
Intitulé long
Haute disponibilité d'un serveur FTP avec synchronisation des données
via DRBD
Module
BTS SIO2 – SISR3 – Exploitation des services
Date de publication
Septembre 2013
Date de modification
Septembre 2013
Version
V1.0
Transversalité
SI7 :
•
•
•
•
SISR4 :
•
•
•
Justifier le choix d’une solution de mise en production d’un service
Stratégies et techniques associées à la continuité de service
Stratégies et techniques de sauvegarde et de restauration de
données
Stratégies et techniques de répartition et de réplication
Justifier le choix d’une solution de gestion de la disponibilité d’un
serveur
Installer et configurer une solution de disponibilité de serveurs
Disponibilité des systèmes, méthodes, technologies, techniques,
normes et standards associés
Présentation
L'objectif de ce Côté Labo (mis en œuvre en module) est de poursuivre la
mise en haute disponibilité des services (Coté Labo « Haute disponibilité du
service Web avec réplication de la base de données correspondante ») en
intégrant le serveur FTP.
Activités
D1.3 - Mise en production d'un service
•
A1.3.2 Définition des éléments nécessaires à la continuité d'un service
D2.1 - Exploitation des services
•
A2.1.2 Évaluation et maintien de la qualité de service
D3.2 - Installation d’une solution d’infrastructure
D3.3 - Administration et supervision d'une infrastructure
•
A3.3.1 Administration sur site ou à distance des éléments d'un réseau, de serveurs, de services et d'équipements terminaux
Pré-requis
Avoir quelques notions sur l'installation, la configuration et l'administration
d'un serveur Linux (ou Ubuntu).
Avoir réalisé le Coté Labo « Haute disponibilité du service Web ».
Rôle et principaux concepts du service FTP.
Rôle et principaux concepts d'un système de gestion de fichiers.
Savoir-faire
principaux
En SISR3 :
•
Caractériser les éléments nécessaires à la qualité, à la continuité et à
la sécurité d'un service
•
Installer et configurer les éléments nécessaires à la qualité et à la
continuité du service
•
Valider et documenter la qualité, la continuité et la sécurité d'un
service
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 1/17
Prolongements
En SI7 :
•
Rédiger, mettre en place et tester un Plan de Continuité D'Activité
(PCA)
En SISR3 :
•
Affiner la configuration de DRBD
•
Assurer la haute disponibilité d'autres services aux utilisateurs
•
Intégrer un autre nœud dans le Cluster
•
Intégrer la répartition de charges
•
Authentification LDAP pour le service FTP
En SISR4 :
•
Assurer la haute disponibilité des services système comme
l'authentification
En SISR5 :
•
Assurer la haute disponibilité des services réseau (DNS, DHCP, etc)
•
Assurer la haute disponibilité du matériel d'interconnexion
•
Superviser le Cluster
Outils
SE : Serveur Linux Debian Wheezy (stable actuelle) ou ultérieur
Serveurs/services : proftpd installé et configuré à l'identique sur deux
serveurs, Hearbeat et Pacemaker.
Clients : client FTP sur STA Linux, Windows ou autre système.
Contexte : organisation/GSB-Organisation.doc.
Documentation : organisation/outils/GSB-DocumentTechnique.doc
Site officiel de Pacemaker : http://clusterlabs.org/
Documentation en ligne :
http://clusterlabs.org/doc/en-US/Pacemaker/1.0/htmlsingle/Pacemaker_Explained/index.html
Site officiel de DRBD : /www.drbd.org/ et plus
http://www.drbd.org/users-guide-8.3/
particulièrement
Mots-clés
Disponibilité, HA, HD, Heartbeat, Pacemaker, synchronisation, FTP, DRBD
Durée
8 heures
Auteur(es)
Apollonie Raffalli avec la relecture attentive de Rogez Sanchez et Gaëlle
Castel
La haute-disponibilité d'un serveur de fichiers
Dans le précédent Côté Labo, nous avons installé un solution de haute disponibilité du service Web
pour l'application de gestion de frais avec failback automatique (retour automatique vers le serveur
primaire).
Nous proposons ici de compléter les services aux utilisateurs mis en haute disponibilité avec un
serveur FTP qui mettra à disposition (en lecture et écriture) certains répertoires du disque.
Comme pour un serveur Web dynamique, la haute disponibilité d'un serveur de fichier nécessite une
solution qui va permettre de répliquer les données de manière à ce que si le serveur de secours
venait à prendre le relais, il dispose des données actuelles. De même pour le retour vers le serveur
d'origine.
Comme pour le service Web avec un système de gestion de bases de données, plusieurs
architectures sont possibles.
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 2/17
Les données sont stockées sur un serveur « à part » (un serveur NAS par exemple) :
Les fichiers sont accessibles par
chaque serveur. Les disques sont
éventuellement en RAID.
Serveur maître
Lien HA
Serveur esclave
hearbeat+pacemaker
+service FTP
hearbeat+pacemaker
+service FTP
IP virtuelle
Tout ce qui est écrit sera retrouvé par l'autre machine, mais nous introduisons ici un point de faiblesse
car en cas de défaillance du serveur de fichiers lui-même (et pas seulement d'un disque), les données
ne sont plus disponibles.
Il faut donc assurer aussi la haute disponibilité du serveur de fichier en synchronisant en temps
réel les fichiers sur une autre machine. La solution la plus simple pour créer ce type de serveur est
d'utiliser DRBD (Distributed Replicated Block Device en anglais, ou périphérique en mode bloc
répliqué et distribué) qui est un outil qui synchronise (par réplication) des périphériques de stockage
(partition, volume logique, etc.) entre deux nœuds via le réseau (une sorte de RAID 1 réseau).
Pour utiliser DRBD et synchroniser des données, il n'est pas nécessaire d'utiliser un serveur « à
part », il suffit d'isoler les données à synchroniser sur une partition ou un volume logique : c'est
l'architecture que nous allons utiliser.
Les données sont stockées dans une partition sur chaque serveur :
Serveur maître
IP : 10.22.100.212
Partition 1 : syst + appli
Partition 2 : données
Serveur esclave
IP : 10.22.100.215
Partition 1 : syst + appli
Partition 2 : données
IP virtuelle
10.22.100.220
Le fonctionnement résumé de DRBD est le suivant :
● Une ou plusieurs partitions (déclarée(s) dans un fichier de configuration) contenant les
données à répliquer est identique sur chaque serveur ;
● Dans la plupart des cas, un seul serveur (celui qui est actif) est habilité à recevoir des
données (sauf à utiliser un système de fichier comme OCFS -Oracle Cluster File System- qui
permet la synchronisation de deux partitions montées en lecture et écriture) ;
● La synchronisation est réalisée en temps réel car elle se fait à la volée, pendant que les
données sont modifiées : lorsqu'une opération en écriture a lieu sur cette partition, DRBD
l'intercepte et envoie les blocs du disque dur qui ont été modifiés vers l'autre serveur ;
● l'utilisation est transparente : les applications (comme dans notre cas, le service FTP), qui
enregistrent leurs données sur le périphérique de stockage répliqué, le font sans même savoir
qu'il s'agit d'une unité de stockage spéciale.
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 3/17
Contexte
Le laboratoire pharmaceutique Galaxy-Swiss Bourdin (GSB) met à disposition des visiteurs médicaux
une application Web sécurisée de gestion des frais de remboursement (Côté Labo « Service Web
sécurisé »). La haute disponibilité de cette application est assurée via un serveur de secours (Cté
Labo « haute disponibilité du service Web »).
GSB dispose ainsi :
● d'un serveur maître intralab ;
● d'un serveur de secours hdintralab.
La mise en œuvre de la haute disponibilité a été simulée sur des machines virtuelles présentes dans
la ferme des serveurs et le cluster est accessible par son adresse IP virtuelle correspondant au nom
DNS « servIntralabXX.gsb.coop » où XX représente les initiales de vos prénoms et noms.
Il a été décidé de mettre à disposition sur le serveur intralab un service FTP (le paquetage proftpd)
utile aux développeurs de GSB pour transférer leurs fichiers. Ce service sera intégré à la solution de
haute disponibilité.
Nous supposerons ici que chaque nœud dispose de trois partitions :
● /dev/sda1 : une partition primaire sur laquelle on trouve le système et les applications ;
● /dev/sda5 : une partition logique destinée à accueillir les données des utilisateurs (le
répertoire /home) ;
● /dev/sda6 : la partition swap.
Proftpd sera installé sur la première partition du disque dur. Chaque utilisateur du système (dont les
développeurs) aura accès, après authentification, en lecture et écriture à son propre FTP dans son
répertoire personnel. À terme, l'ensemble des répertoires personnels seront donc déportés sur
/dev/sda5.
Par mesure de simplification, l'authentification sera une authentification « classique » via les fichiers
système (/etc/passwd, /etc/shadow, /etc/group). C'est le comportement par défaut de proftpd ; ainsi,
après l'installation, aucune modification n'est à opérer sur le fichier de configuration.
Le client FTP utilisé sur les STA peut être en ligne de commande et/ou graphique (comme filezilla
disponible sur Windows et Linux).
Vous trouverez :
● dans la documentation technique de GSB (organisation/outils/GSB-DocumentTechnique.doc)
l'installation et la configuration du serveur proftpd (fiche 5) ;
● en annexe 1, un mode opératoire concernant l'installation et la configuration de DRBD ;
● en annexe 2, la configuration d'une ressource en mode actif/actif
● en annexe 3, un récapitulatif des commandes
Sur chacun des deux serveurs, la partition /dev/sda5 est celle que DRBD duplique.
Comme nous faisons le choix (arbitraire) d'enregistrer les méta-données sur cette
partition, elle ne doit pas être formatée (ou si elle l'est, elle devrait être remise à zéro).
Il est possible (et conseillé en production) d'utiliser une autre partition (non formatée
ou remise à zéro) pour les méta-données.
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 4/17
Déroulement de la séquence
Préalable :
●
●
Créez sur chaque serveur la ou les partitions en ext3 ou ext4 nécessaires.
Installez, configurez et testez sur chaque serveur le service FTP.
1. Installation et configuration de DRBD (aide en annexe 1)
L'installation et la configuration de DRBD se fera dans un premier temps isolément des
problématiques d'Heartbeat et de Pacemaker.
●
●
●
Activez le module DRBD et installez les outils de gestion.
Procédez à la configuration de DRBD sur chacun des serveurs.
Proposez et réalisez des tests permettant de vérifier que la solution est opérationnelle dans
un tableau à 4 colonnes (actions à effectuer, résultats attendus, résultats obtenus, statut).
2. Intégration du service FTP dans le Cluster (aide en annexe 2)
Configuration des ressources DRBD et FileSystem
● Sur les deux nœuds, arrêtez le service DRBD et supprimez ce service du démarrage.
● Créez les ressources nécessaires.
● Proposez et réalisez des tests permettant de vérifier que la solution est opérationnelle dans
un tableau à 4 colonnes (actions à effectuer, résultats attendus, résultats obtenus, statut).
Configuration de la ressource FTP
● Sur les deux nœuds, arrêtez le service FTP et supprimez ce service du démarrage.
● Créez la ressource « serviceFTP » et procédez aux ajustements nécessaires.
● Proposez et réalisez des tests permettant de vérifier que la solution est opérationnelle dans
un tableau à 4 colonnes (actions à effectuer, résultats attendus, résultats obtenus, statut).
3. Sauvegarde de la configuration
●
●
Sauvegardez votre configuration
Testez une restauration (ou mise à jour)
Lors des différents tests, s'ils portent sur l’arrêt d'une ressource mise en erreur :
● ne pas oublier de supprimer toutes les erreurs via la commande : crm resource
cleanup <id_resource> ;
● vérifier l’ensemble des ressources par la commande : crm_resource -P
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 5/17
Annexes
Annexe 1 : installation et configuration de DRBD
Le module DRBD (Distributed Replicated Block Device) est donc
un autre composant du High-Availability Linux Project qui a pour rôle
de synchroniser les données entre deux postes. DRBD offre une
excellente garantie de réplication des données en fonctionnant en
RAID-1 par IP : les données sont copiées simultanément sur deux
postes via le réseau.
DRBD est constitué d'un module du noyau (le cœur du système), qui
se comporte comme un driver de système de fichiers, et d'outils de
gestion regroupés dans le paquetage drbd8-utils.
Le noyau installé avec debian Wheezy (version stable) dispose
théoriquement du module DRBD dans sa version 8.3.11.
Sur chaque serveur, il est possible de le charger (modprobe drbd) mais il n'est pas nécessaire de
gérer le module soi-même car DRBD va le charger et le décharger automatiquement via le service
(script /etc/init.d/drbd).
Pour vérifier qu'il soit bien chargé : lsmod | grep drbd
Pour obtenir des informations sur le module installé : modinfo drbd
filename:
/lib/modules/3.2.0-4-amd64/kernel/drivers/block/drbd/drbd.ko
alias:
block-major-147-*
license:
GPL
version:
8.3.11
description: drbd - Distributed Replicated Block Device v8.3.11
author:
Philipp Reisner <[email protected]>, Lars Ellenberg <[email protected]>
srcversion: F937DCB2E5D83C6CCE4A6C9
….
Et la commande cat /proc/drbd doit renvoyer (avant configuration) :
version: 8.3.11 (api:88/proto:86-96)
srcversion: F937DCB2E5D83C6CCE4A6C9
Il est nécessaire ensuite d'installer les outils de gestion drbd8-utils.
Étape 1 : les fichiers de configuration
La configuration s'articule autour des fichiers suivants qui doivent être identiques sur les deux
serveurs.
● /etc/drbd.conf : fichier général qui inclut les autres (nous ne le modifierons pas).
● /etc/drbd.d/global_common.conf : pour les paramètres généraux et communs à toutes les
ressources.
● /etc/drbd.d/nom_ress.res : théoriquement, un fichier pour chaque ressource (une ressource
correspond à UNE partition (block device) sur laquelle DRBD va agir).
L'exemple de configuration qui suit est basé sur la configuration suivante :
intralab : serveur maître
➔ IP réelle : 10.22.100.212 --> c'est celle qui est dans /etc/network/interfaces
➔ IP virtuelle : 10.22.100.220
➔ /dev/sda5 est la partition que DRBD va répliquer. Toutes les données de cette partition seront
perdues si les méta-données sont enregistrées sur cette partition.
hdintralab : serveur esclave
➔ IP réelle : 10.22.100.215 --> c'est celle qui est dans /etc/network/interfaces
➔ IP virtuelle : 10.22.100.220
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 6/17
➔ /dev/sda5 est la partition que DRBD va répliquer. Toutes les données de cette partition seront
●
perdues si les méta-données sont enregistrées sur cette partition.
/etc/drbd.d/global_common.conf : ce fichier contient les directives communes à toutes les
ressources. Ces directives peuvent être surchargées lors de la déclaration des ressources.
Ce qui suit est la configuration minimale :
Directives et valeurs
usage-count yes;
Explications
Statistiques sur l’usage des versions collectées par le projet
DRBD. Un serveur web est contacté à chaque fois qu’une
nouvelle version de DRBD est installée sur un serveur.
C'est le protocole le plus sécurisé : les opérations d'écriture
en local sur le nœud principal sont considérées comme
achevées lorsque que les écritures sur les 2 partitions ont été
confirmées.
Débit entre les différends nœuds (650M est le maximum).
Si le réseau n'est pas dédié, le projet DRBD recommande de
mettre le débit à 1/3 de la bande passante1.
protocol C;
syncer { rate 650M; }
Le déclaration des ressources : fichier /etc/drbd.d/ftp.res (à créer sur chaque serveur)
Directives et valeurs
resource resftp {
device /dev/drbd0*;
disk /dev/sda5;
meta-disk internal**;
on intralabAR {
address 10.22.100.212:7789;
}
Explications
Définition de la ressource « resftp »
DRBD va créer un disque virtuel...
… Qui sera monté sur le disque physique /dev/sda5
Gestion des méta-données (ici, enregistrés sur le même disque)*
Déclaration du premier nœud (adresse IP et port)
Déclaration du deuxième nœud (adresse IP et port)
on hdintralabAR {
address 10.22.100.215:7789;
}
}
* le block device est conventionnellement nommée /dev/drbdX, ou X est le numéro de périphérique
mineur. Si une autre ressource (correspondante à une autre partition) est créé, le « device » sera
/dev/drbd1.
** : une autre configuration possible (recommandée par DRBD) est d'externaliser les méta-données
sur une autre partition ; il faut préciser dans ce cas la partition et l'emplacement des données dans la
partition, par exemple meta-disk /dev/sda6[0).
Dans ce cas, la partition qui contient les données peut être formatée normalement ou laissé e telle
quelle si elle contient déjà les données utiles.
Étape 2 : initialisation des méta-données sur la partition qui va
contenir les données
Initialisation des méta-données sur chaque nœud :
drbdadm create-md resftp
Plusieurs cas peuvent se présenter :
Cas N°1
La partition vient d'être créée et n'est pas formatée. La commande devrait fonctionner sans problème
et renvoyer le résultat suivant :
Writing meta data...
initializing activity log
NOT initialized bitmap
1 Il est recommandé d'utiliser une connexion dédié pour DRBD mais, par mesure de simplification,
nous n'allons pas le faire dans ce Coté Labo.
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 7/17
New drbd meta data block successfully created.
success
Cas N°2
La partition a déjà été formatée (éventuellement des données sont écrites). Dans ce cas, vous devriez
avoir le message d'erreur ci-dessous :
you are the 1012th user to install this version
md_offset 2600464384
al_offset 2600431616
bm_offset 2600349696
Found ext3 filesystem
2539520 kB data area apparently used
2539404 kB left usable by current configuration
Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command 'drbdmeta 0 v08 /dev/sda2 internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40
Il est nécessaire de détruire le système de fichier. Pour cela :
Sur le nœud maître :
● sauvegarder (dans /root par exemple), droits sur les objets compris, le contenu de la partition
s'il s'agit de la partition qui contient les données (et que des données utiles sont déjà dessus).
● démonter la partition : umount /dev/sda2 ;
● détruire le système de fichier : shred -zvf -n 1 /dev/sda2 ;
● exécuter la commande drbdadm create-md resftp qui doit maintenant fonctionner.
Sur le nœud esclave, même s'il s'agit d'une partition qui contient les données, il n'est pas besoin
d'une quelconque sauvegarde puisque les données vont être répliquées à partir du maître ; il suffit
de :
●
●
●
Démonter la partition : umount /dev/sda2.
Détruire le système de fichier : shred -zvf -n 1 /dev/sda2
Exécuter la commande drbdadm create-md resftp
Étape 3 : première synchronisation
Il faut activer la ressource avec la commande drbdadm up resftp qui regroupe les trois commandes
suivantes :
•
drbdadm attach resftp (associe la ressource DRBD à son périphérique) ;
•
drbdadm syncer resftp (ajuste les paramètres de synchronisation pour cette ressource) ;
•
drbdadm connect resftp (connecte la ressource) ;
Le statut de DRBD : root@intralabAR:~# cat /proc/drbd affiche alors :
version: 8.3.11 (api:88/proto:86-96)
srcversion: F937DCB2E5D83C6CCE4A6C9
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2539404
La ressource, « 0 » pour drbd0, est connectée (cs:Connected) et les 2 nœuds ont été trouvés. Aucun
des nœuds n'est maître (ro :Secondary/Secondary : le premier Secondary représente le nœud sur
lequel la commande est exécutée). ds:Inconsistent/Inconsistent indique le statut des disques et est
l'état normal à ce stade (aucune synchronisation n'a encore été réalisée).
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 8/17
Sur le nœud maître, il faut lancer la première synchronisation :
root@intralabAR:~# drbdadm -- --overwrite-data-of-peer primary resftp
Le statut a changé :
root@intralabAR:~# cat /proc/drbd
...
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----ns:202232 nr:0 dw:0 dr:210976 al:0 bm:12 lo:1 pe:5 ua:64 ap:0 ep:1 wo:f oos:2047360
[>...................] sync'ed: 9.3% (2047360/2248960)K
finish: 0:00:30 speed: 67,200 (67,200) K/sec
La ressource est en train de se synchroniser (cs:SyncSource) à partir du nœud sur lequel a été lancé
la commande qui est en « Primary ». Le statut du disque du nœud secondaire « Inconsistent » est
normal tant que la synchronisation n'est pas terminée.
Remarque : les chiffres indiqués ne sont pas très représentatifs de ce que l'on peut obtenir avec des
disques réels (tous ces tests sont fait à partir d’une machine virtuelle).
Une fois la synchronisation terminée, le statut de DRBD doit être le suivant :
root@intralabAR:~# cat /proc/drbd
...
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----ns:2248960 nr:0 dw:0 dr:2249966 al:0 bm:138 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
La commande /etc/init.d/drbd status (ou service drbd status) affiche en plus le point de montage et
le système de fichier (ici, le disque virtuel n'a pas encore été formaté)
drbd driver loaded OK; device status:
...
m:res cs
ro
ds
p
mounted
fstype
0:resftp Connected Primary/Secondary UpToDate/UpToDate
C
Étape 4 : formatage et montage de la partition sur le nœud primaire
Sur le nœud primaire, il est nécessaire de formater le disque virtuel.
Le disque à formater n'est pas /dev/sda5 mais /dev/drbd0 :
root@intralabAR:~# mkfs.ext4 /dev/drbd0
mke2fs 1.42.5 (29-Jul-2012)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
...
Écriture des tables d'i-noeuds : complété
Création du journal (16384 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété
Il est nécessaire ensuite de monter la partition (le but ici est de synchroniser les « /home ») :
Le montage se fera donc sous /home et doit utiliser /dev/drbd0
root@intralabAR:~# mount /dev/drbd0 /home/
« /home » est peut-être déjà monté automatiquement au démarrage via une ligne dans le fichier
/etc/fstab, auquel cas il faut supprimer (ou commenter) cette ligne.
La commande /etc/init.d/drbd status affiche maintenant :
drbd driver loaded OK; device status:
...
m:res cs
ro
ds
p
0:resftp Connected Primary/Secondary UpToDate/UpToDate
http://www.reseaucerta.org
mounted
C
/home
© CERTA - septembre 2013 – v1.0
fstype
ext4
Page 9/17
Il ne reste plus qu'à restaurer les données préalablement sauvegardées et le serveur FTP devrait être
de nouveau opérationnel.
Tester la synchronisation
Par défaut, DRBD fonctionne en mode Primary/Secondary. Ceci signifie que l'un des disques supporte
les lectures et écritures (sur le nœud primaire), mais que le second n'accepte que les opérations en
lecture.
Pour pouvoir tester la synchronisation, il est nécessaire sur le nœud primaire de :
● démonter la partition : umount /dev/drdb0 ;
● changer le statut de la ressource pour « secondaire » : drbdadm secondary resftp ;
Et sur le nœud secondaire :
● changer le statut de la ressource pour « primaire » : drbdadm primary resftp ;
● monter la partition : mount /dev/drdb0 /home
Vous devriez retrouvez les données restaurées dans /home... et vous pouvez y créer un fichier pour
vérifer qu'après l'opération inverse, celui-ci se retrouve bien sur le nœud primaire.
Il est possible d'obtenir des disques répliqués en mode primary/primary. Cela signifie que les
2 disques supportent les écritures en simultanée. Mais il faut pour cela un système de fichiers
qui le supporte comme OCFS2 ou GFS.
Le split brain
Un split brain se produit lorsque deux parties d'un cluster d'ordinateurs sont déconnectées, chaque
partie croyant que l'autre ne fonctionne plus. Le terme est une analogie médicale du syndrome splitbrain (littéralement « dédoublement du cerveau ») (source : http://fr.wikipedia.org/wiki/Split-brain).
Chaque nœud va alors démarrer les services (les deux nœuds se déclarent primary), ce qui va
éventuellement provoquer une incohérence des données quand les différents nœuds montent et
écrivent sur un système de fichiers de façon concurrente.
DRBD va détecter les deux primary au moment où la connectivité entre les deux nœuds est rétablie :
le démon stoppe alors la connexion et arrête la réplication, ce qui est visible dans les logs :
Split-Brain detected, dropping connection!
Il est possible de configurer DRBD pour reprendre la main automatiquement et décider quelles
données garder (instructions after-sb-*pri dans la section net) mais il est préférable d'intervenir
manuellement afin d'estimer les « dégâts » et décider quel est le nœud dont les données sont les plus
actuelles et quel est le nœud dont les données doivent être discréditées.
Comment éviter le split brain
●
●
Assurer au maximum la liaison entre les éléments du cluster : on peut utiliser deux liens
réseau différents ou faire du bonding – agrégation de liens.
S’assurer que l’autre nœud est inactif : le Stonith : « Shoot The Other Node In The Head » est
une méthode d’isolation d’un nœud qui ne répond plus. Le nœud jugé hors service sera donc,
en général, arrêté électriquement (via IPMI – Interface de Gestion Intelligente du Matériel par
exemple). Nous ne le mettrons pas en œuvre dans ce Coté Labo mais ceci est indispensable
en production.
Comment résoudre le split brain ?
Il faut supprimer les données sur le nœud le moins actif et resynchroniser. En règle générale
les commandes suivantes suffisent :
Sur les deux nœuds : umount /dev/drbd0 et drbdadm disconnect resftp
Sur le nœud le moins actif : drbdadm secondary resftp et drbdadm -- --discard-my-data connect resftp
Sur le nœud à partir duquel on réplique les données : drbdadm connect resftp
À la fin de la synchronisation on monte DRBD : mount /dev/drbd0 /home
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 10/17
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 11/17
Annexe 2 : intégration du service FTP dans le cluster
L'intégration du service FTP revient de facto à intégrer aussi le service DRBD. Les principes de
l’intégration sont sont les suivants :
● Une ressource pour chacun de ces services doit être créée.
● Ces services doivent être démarrés par Pacemaker ==> il faut les sortir du démarrage du
système.
● Le service DRBD doit démarrer sur les deux nœuds mais avec un rôle différent
(primary/secondary – voir Rappel ci-dessous) avec une préférence en tant que primaire pour
le nœud « intralab » .
● Lorsque le service DRBD démarre sur le nœud qui joue le rôle de maître, ce dernier doit être
en primary et monter le disque virtuel sur /home ==> il faut déclarer une nouvelle ressource
de type « système de fichier » (ocf:heartbeat:Filesystem).
● Le service DRDB doit démarrer avant celui de FTP.
La ressource DRBD doit donc être configurée en mode actif/actif avec la fonction “clone” qui,
rappelons-le, admet 3 types :
• Le clone « anonymous » (clone par défaut) : les ressources sont configurées de manière
identique sur chaque nœud. Si un nœud est indisponible, il n’y a pas de bascule de cette
ressource puisqu’elle est déjà fonctionnelle et identique sur l’autre nœud.
• Le clone « globally-unique=true » : contrairement au cas précédent, les ressources ne
sont pas identiques d’un nœud à l’autre. Elles peuvent par exemple, avoir des données
différentes.
• Le « multi-state » : c’est une ressource qui peut être dans 2 états différents : « master » ou
« slave ». C'est ce type de clone que nous allons utiliser.
Création et configuration des ressources DRBD et Système de
fichiers
Il est préférable que les commandes qui suivent soient validées/activées en même temps car
elles sont étroitement liées. On travaille donc en mode « live »
root@intralabAR:~# crm configure
On crée tout d'abord une ressource appelée drbd0 qui démarrera sur le maître et, sur l'esclave, la
ressource resftp (définie dans le fichier /etc/drbd.d/ftp.res) :
crm(live)configure# primitive drbd0 ocf:heartbeat:drbd params drbd_resource=resftp op monitor
role=Master interval=60s timeout=30s op monitor role=Slave interval=60s timeout=30s
La primitive ressource nommée drbd0 est intégrée ici dans un objet plus complexe "ms" (pour masterslave) nommé ms-drbd0 :
crm(live)configure# ms ms-drbd0 drbd0 meta clone-max=2 clone-node-max=1 master-max=1 masternode-max=1 globally-unique=false notify=true
Explication :
● clone-max=2 : il ne peut y avoir que 2 ressources démarrées en même temps (= nombre de
nœuds) ;
● clone-node-max=1 : une ressource par nœud au maximum ;
● master-max=1 : une seule ressource peut être activée en tant que maître ;
● master-node-max=1 : une seule ressource sur le même nœud ;
● globally-unique=false : les ressources sont identiques d'un nœud à l'autre ;
● notify=true : le cluster informe les nœuds du changement d’état de chacune des ressources.
On configure ensuite une ressource fs0 qui permet de monter le système de fichiers qui contiendra
les données partagées :
crm(live)configure# primitive fs0 ocf:heartbeat:Filesystem params fstype=ext4 directory=/home
device=/dev/drbd0
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 12/17
Il est nécessaire maintenant de gérer l'exécution des ressources (préférence d'exécution, ordre
dans lequel les ressources seront exécutées, etc). En effet, comme nous l'avons déjà observé, si
les ressources ne sont pas groupées, elles vont être activées sur des nœuds différents de manière à
optimiser le cluster.
Une alternative à la commande group (vue dans le précédent Côté Labo) est l'utilisation les
contraintes colocation et order : le principe est le même, on va lier des ressources entre
elles et créer un ordre de démarrage mais ces deux commandes permettent une gestion
beaucoup plus fine des contraintes.
Trois types de contraintes sont disponibles :
● contrainte locative avec la commande location : définit une préférence ou une obligation
d’exécution d’une ressource sur un nœud (c'est ce type de contrainte qui est écrite
automatiquement lorsque l'on migre une ressource sur un nœud – voir précédent Côté Labo) ;
● contrainte colocative avec la commande colocation : oblige une ressource à fonctionner
(ou pas) sur le même nœud qu'une autre ressource (l’obligation peut être une interdiction
suivant la valeur de la pondération – voir ci-après) ;
● contrainte d’ordre avec la commande order : ordonnance le démarrage et arrêt des
ressources.
La syntaxe générale des commandes est la suivante :
location <id_contrainte> <id_ressource> [rule role=rôle] <score>: #uname eq <noeud>
colocation
<id_contrainte>
<id_ressource_necessaire[:rôle]>
<score> :
<id_ressource_dependante[ :rôle]>
order <id_contrainte> <score> : <id_ressource1 :action1> <id_ressource2 :action2>
Avec
Rôle : started, slave ou master
action : start, stop, promote, demote (l'action1 est à réaliser sur la ressource 1 avant de réaliser
l'action2 sur la ressource2)
Le cluster prend en compte les préférences d’exécution sur un nœud ou l’autre suivant un
mécanisme de pondération des ressources (score). Le score peut avoir une valeur positive ou
négative :
● + l'infini (ou mandatory) : avec location, obligation d’exécution de la ressource sur le nœud
(valeur notée « inf » dans les commandes) et avec colocation, obligation d'exécution des
ressources ensemble.
● Valeur comprise entre 0 et + l’infini : préférence d’exécution de la ressource
● Valeur comprise entre - l’infini et 0 : préférence de non-exécution de la ressource
● Valeur = 0 correspond au mot clé advisory
● - l'infinie : avec location, interdiction d’exécution de la ressource sur le nœud (valeur notée « inf » dans les commandes)
Il est possible de connaître la syntaxe d'une commande via la commande : crm configure
help nom_commande (par exemple crm configure help order)
On déclare que ms-drbd0 sera exécutée préférentiellement en tant que maître sur intralabar (avec un
score égal à 100) :
crm(live)configure# location ms-drbd0-master-on-intralabar ms-drbd0 rule role=master 100: #uname
eq intralabar
Dans un cluster à deux nœuds une valeur de pondération (score) comprise entre 0 et +
l’infini (ici « 100 » choisi arbitrairement) est équivalente à la valeur « inf ». La donne
change à partir de 3 nœuds car on pourra préférer créer un ordre priorité pour chacun de
nœuds (par exemple par rapport aux capacités physiques des serveurs).
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 13/17
Le système de fichiers doit être monté sur le nœud où la ressource ms-drbd0 est lancé en tant que
maître, et seulement après que drbd0 ait été promu maître :
crm(live)configure# colocation fs0-on-ms-drbd0 inf: fs0 ms-drbd0:Master
La commande colocation permet donc de forcer deux (ou plus) ressources à cohabiter sur le
même nœud : ici, fs0 et ms-drbd0 quand il est lancé en maître.
Contrairement à la commande group, cette dernière contrainte ne définit pas d’ordre de démarrage (et
d’arrêt) des ressources. Il faut lui adjoindre la commande order.
Le système de fichiers doit être monté après que ms-drbd0 ait été promu maître :
crm(live)configure# order ms-drbd0-before-fs0 mandatory: ms-drbd0:promote fs0:start
La commande order permet donc de définir un ordre dans les ressources. Ici, fs0 n'est démarré
qu'une fois que la ressource ms-drbd0 est promue maître.
Les commandes colocation et order peuvent encore être affinées avec l'usage des
parenthèses pour les ressources qui n'ont pas de liens entre elles.
Par exemple :
colocation id inf:(A B) C
Les ressources A et B sont indépendantes.
L'arrêt de la ressource A ou celle de la ressource B n’impactera pas la ressource C
Pour que le ressource C s'arrête et migre avec A et/ou B, il est nécessaire que les ressources A et B
s'arrêtent simultanément. Par contre, si la ressource C s'arrête, les ressources A et B seront coupées.
order id inf:(A B) C
Les ressources A et B peuvent démarrer en parallèle et C démarrera après le démarrage d'une des
deux ressources.
Si aucune ligne n'a renvoyé d'erreurs, on peut valider :
crm(live)configure# commit
crm_mon :
============
Last updated: Mon Aug 9 14:07:28 2013
Last change: Mon Aug 9 14:07:25 2013 via crmd on intralabar
Stack: Heartbeat
Current DC: hdintralabar (d990204c-2de3-40c5-8f8d-4469d01aafb3) - partition with quorum
Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
2 Nodes configured, unknown expected votes
7 Resources configured.
============
Online: [ intralabar hdintralabar ]
Resource Group: servIntralab
IPFailover (ocf::heartbeat:IPaddr2):
Started intralabar
serviceWeb (ocf::heartbeat:apache):
Started intralabar
Clone Set: cServiceMySQL [serviceMySQL]
Started: [ hdintralabar intralabar ]
Master/Slave Set: ms-drbd0 [drbd0]
Masters: [ intralabar ]
Slaves: [ hdintralabar ]
fs0 (ocf::heartbeat:Filesystem): Started intralabar
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 14/17
Création de la ressource relative au service FTP
La création de la ressource relative au service FTP ne devrait pas poser de problèmes si l'on prête
attention au fait que :
➔ le chemin par défaut prévu dans le script ocf vers le fichier de configuration n'est pas correct
(crm ra info ocf:heartbeat:proftpd) ;
➔ Il est préférable de rallonger les timeout à 40 s de démarrage et d'arrêt qui sont, par défaut,
courts (20 s) (si on laisse le fichier de configuration par défaut, le démarrage de FTP prend
plus de 20 secondes : en laissant le timeout par défaut, le système se met en erreur car il
considérera que FTP ne peut être démarré sur aucun des nœuds)
La ressource FTP ne devra être activée que sur le nœud sur lequel DRBD est lancé en
tant que maître et après que le système de fichier ne soit monté.
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 15/17
Annexe 3 : récapitulatif des commandes courantes
Vérifier que Heartbeat est lancé :
/etc/init.d/heartbeat status
Vérifier que Heartbeat est actif :
cl_status hbstatus
Voir la liste des noeuds :
cl_status listnodes
Voir l'état d’un noeud :
cl_status nodestatus nom_node
Accéder à l'interface de configuration du cluster :
crm
crm(live)# help
This is the CRM command line interface program.
Available commands:
cib
resource
node
options
configure
ra
status
quit,bye,exit
help
end,cd,up
manage shadow CIBs
resources management
nodes management
user preferences
CRM cluster configuration
resource agents information center
show cluster status
exit the program
show help
go back one level
Si on saisit crm(live)# nom_commande help, on a les différentes possibilités d'arguments après la
commande et ainsi de suite...
Éditer/Modifier une configuration
crm configure edit
cela vous placera dans une instance de « vim » pour effectuer une modification qui sera appliquée à
la sauvegarde.
Éditer/Modifier directement une ressource
crm configure edit <id_ressource>
cela vous placera dans une instance de « vim » pour effectuer une modification qui sera appliquée à
la sauvegarde.
Modifier la configuration du cluster en entrant directement dans le mode de configuration :
crm configure
Voir la configuration
crm(config)configure# show
Équivalent de crm configure show
Vérifier sa configuration
crm(config)configure# verify
Équivalent de crm configure verify
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 16/17
Stopper une ressource
crm resource stop <id_ressource>
Démarrer une ressource
crm resource start <id_ressource>
Supprimer une ressource
crm configure delete <id_ressource>
Si la ressource est en cours d'utilisation, il vaut mieux la stopper avant de la supprimer.
Déplacer une ressource
crm resource move <id_ressource> <noeud>
Annuler le déplacement
crm resource unmove <id_ressource>
Préférence du noeud
crm configure location <nouvel_id_ressource> <id_ressource> <score>: <nœud>
La ressource <id_ressource> préférera tourner sur le nœud <nœud>.
Liste des ressources OCF
crm ra list ocf heartbeat
Connaître la liste complète des paramètres d’une primitive,
crm ra info ocf:heartbeat:nom_primitive.
Vous obtenez la liste des timeout par défaut, des paramètres et de leurs valeurs par défaut, les
paramètres obligatoires et facultatifs.
Mettre un poste en maintenance
crm node standby [<noeud>]
Sortir un poste de maintenance
crm node online [<noeud>]
Effacer les erreurs sur une ressource
crm resource cleanup <id_resource>
Cloner une ressource (de type « anonymous »)
crm configure clone <nom_clone> <id_resource>
Sauvegarder une configuration
crm configure save /root/sauveha.conf
crm configure save xml /root/sauveha.conf.xml # Version XML
Restaurer une configuration (et remplacer la configuration actuelle)
crm configure load replace /root/sauveha.conf
Mettre à jour une configuration
crm configure load update /root/sauveha.conf
http://www.reseaucerta.org
© CERTA - septembre 2013 – v1.0
Page 17/17

Documents pareils

Solution Haute Disponibilité pour Linux : Un cluster

Solution Haute Disponibilité pour Linux : Un cluster La solution que nous allons étudier ici répond à deux impératifs : ne pas avoir de SPOF dans le cluster, et avoir des données parfaitement à jour en cas de bascule du service vers la deuxième machi...

Plus en détail