CMANv3
| Fiche express | |
|---|---|
| Type | Gestionnaire de cluster RHEL (génération 2) |
| Versions concernées | RHEL 6 / CentOS 6 |
| Outil de configuration | ccs
|
| Statut | Historique — remplacé par Pacemaker/Corosync (pcs) en RHEL7+
|
| Voir aussi | CMANv2 · Install Cluster rhel5 |
Cette page couvre la mise en œuvre du Red Hat Cluster Suite sur RHEL 6 / CentOS 6,
pilotée par la commande ccs (Cluster Configuration System), qui remplace la
combinaison Luci/ccsd de la génération précédente (CMANv2, RHEL5). L'architecture reste la
même (CMAN pour le quorum, rgmanager pour le basculement de services, fenced pour l'isolation
de nœuds, GFS2/CLVM pour le stockage partagé) — voir CMANv2 pour la vue d'ensemble des
composants. À partir de RHEL 7, cette pile entière est remplacée par
Pacemaker + Corosync (administrés via pcs) : la logique de configuration
décrite ici (fichier cluster.conf, commande ccs) ne s'applique
qu'aux versions 5 et 6.
Installation
yum install -y openais cman rgmanager lvm2-cluster gfs2-utils
L'ACPI doit être désactivé pour que l'arrêt forcé d'un nœud (fencing) puisse être immédiat — sans quoi l'ACPI peut retarder ou ignorer une demande d'extinction, ce qui compromet la fiabilité du fencing :
chkconfig --del acpid
Désactiver également l'ACPI au niveau du BIOS, et ajouter acpi=off à la ligne de
paramètres noyau dans grub.conf (pas une ligne autonome — un paramètre ajouté à la
suite des autres options de la ligne kernel/linux existante).
Services haute disponibilité pris en charge
Le module complémentaire High Availability gère nativement le basculement de : Apache, Application (script générique), LVM (HA LVM), MySQL, NFS, OpenLDAP, Oracle, PostgreSQL 8, Samba, SAP, Tomcat 6 (liste des paramètres par type de service dans la documentation Red Hat officielle du Cluster Administration Guide RHEL6).
Considérations réseau
- NetworkManager doit être désactivé sur les nœuds — sa présence empêche
cman
de démarrer correctement (NetworkManager peut réinitialiser les interfaces de façon incompatible avec la gestion réseau attendue par CMAN).
- Multidiffusion (multicast) : le réseau du cluster doit autoriser le trafic multicast et
avoir IGMP activé — CMAN communique l'appartenance au cluster par ce canal. Tester la
communication multicast entre nœuds avec omping.
Ricci (remplace ccsd)
Dans RHEL6, ricci remplace le démon ccsd de RHEL5 pour propager la
configuration entre les nœuds du cluster.
yum install luci
service luci start
passwd ricci # mot de passe local demandé lors de la première propagation
Interface web Luci : https://<host_luci>:8084
cman_tool version -r # propager la configuration dans le cluster
Quorum et disque quorum (qdiskd)
qdiskd n'est utile que pour des configurations de négociation d'autorité
particulières (par exemple un cluster à 3 votes contre 1). Si utilisé, prendre en compte :
- le nombre de votes par nœud,
- le délai d'expiration d'appartenance CMAN,
- la configuration du fencing,
- le nombre maximum de nœuds supportés par
qdiskd(16), - le périphérique de disque quorum (créé par
mkqdisk).
mkqdisk -c <device> -l <label> # créer le disque quorum
mkqdisk -L # lister les disques quorum visibles
mkqdisk -f <label> # détail d'un disque quorum
man qdisk # référence complète des paramètres (heuristiques, scores…)
Heuristiques : un programme testé périodiquement (path to program, exécuté via
/bin/sh -c, code retour 0 = succès), avec un intervalle (2s par défaut), un poids
(score, 1 par défaut) et un nombre d'échecs consécutifs (TKO) avant que l'heuristique
soit déclarée indisponible. Le score total minimum qu'un nœud doit atteindre pour être
considéré vivant ne doit jamais dépasser la somme des scores heuristiques disponibles, sinon le
quorum ne peut jamais être satisfait.
Les commandes principales
| Commande | Rôle |
|---|---|
clustat |
statut du cluster et des services |
ccs_config_validate |
valide la configuration du cluster |
clusvcadm |
administration des services (start/stop/relocate…) |
cman_tool |
gestion du gestionnaire de cluster (appartenance, statut) |
fence_tool |
rejoindre/quitter le domaine fence |
ccs_config_dump |
sauvegarde de la configuration du cluster |
Manipuler le fichier de configuration avec ccs
ccs -h host [options] # agir directement sur un nœud distant (déclaré)
ccs -f file [options] # travailler sur un fichier de configuration local nommé
ccs -h host -f file --setconf # pousser un fichier local vers un nœud
ccs -h host --getconf # récupérer la configuration active d'un nœud
Création du cluster
Déclarer les nœuds dans /etc/hosts sur chaque machine :
### Cluster
192.168.132.245 node1.cluster node1
192.168.132.246 node2.cluster node2
###
ccs -h host --createcluster clustername
ccs -h host --addnode node
ccs -h host --lsnodes
ccs -h host --addnode host --votes votes --nodeid nodeid
ccs -h host --rmnode node
Configuration du fencing
man fenced
cman_tool status
# régler les délais du démon fence
ccs -h host --setfencedaemon post_fail_delay=value # délai avant déclaration de service indisponible
ccs -h host --setfencedaemon post_join_delay=value # délai avant acceptation d'un nœud qui rejoint
# déclarer un périphérique fence pour le cluster
ccs -h host --addfencedev devicename [fencedeviceoptions]
ccs -h node1 --addfencedev myfence agent=fence_apc ipaddr=apc_ip_example login=login_example passwd=password_example
ccs -h host --lsfencedev
ccs -h host --rmfencedev fencedevicename
Section générée dans cluster.conf :
<fencedevices>
<fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc" passwd="password_example"/>
</fencedevices>
Fence basé sur l'alimentation (par nœud)
ccs -h host --addmethod method node
ccs -h node01.example.com --addmethod APC node01.example.com
ccs -h host --addfenceinst fencedevicename node method [options]
ccs -h node01.example.com --addfenceinst apc node01.example.com APC port=1
Fence basé sur le stockage (SAN, par nœud)
ccs -h host --addmethod method node
ccs -h node01.example.com --addmethod SAN node01.example.com
ccs -h host --addfenceinst fencedevicename node method [options]
ccs -h node01.example.com --addfenceinst sanswitch1 node01.example.com SAN port=11
# unfencing : autoriser le nœud à réintégrer sans intervention manuelle une fois isolé
ccs -h host --addunfence fencedevicename node action=on|off
Supprimer une méthode/instance fence
ccs -h host --rmmethod method node
ccs -h node01.example.com --rmmethod APC node01.example.com
ccs -h host --rmfenceinst fencedevicename node method
ccs -h node01.example.com --rmfenceinst apc1 node01.example.com APC-dual
Domaines de basculement (failover domains)
- Unrestricted — un sous-ensemble de membres est préféré, mais le service peut tourner
sur n'importe quel membre disponible si nécessaire.
- Restricted — le service ne peut tourner que sur les membres du domaine ; s'ils sont
tous indisponibles, le service ne démarre pas (ni manuellement, ni automatiquement).
- Unordered — le membre choisi parmi ceux disponibles du domaine ne suit aucun ordre de
priorité.
- Ordered — priorité explicite entre membres (le premier de la liste est préféré).
- Failback — détermine si le service revient sur son nœud préféré une fois celui-ci
rétabli. Utile à désactiver si un nœud est instable de façon répétée : sans cette précaution, le service peut faire des allers-retours répétés entre nœuds et dégrader sévèrement la disponibilité.
ccs -h host --addfailoverdomain name [restricted] [ordered] [nofailback]
ccs -h node-01.example.com --addfailoverdomain example_pri ordered
ccs -h host --addfailoverdomainnode failoverdomain node priority
ccs -h node-01.example.com --addfailoverdomainnode example_pri node-01.example.com 1
ccs -h node-01.example.com --addfailoverdomainnode example_pri node-02.example.com 2
ccs -h host --lsfailoverdomain
ccs -h host --rmfailoverdomain name
ccs -h host --rmfailoverdomainnode failoverdomain node
Ressources globales et services
ccs -h host --lsservices
ccs -h host --addresource resourcetype [resource options]
ccs -h node01.example.com --addresource fs name=web_fs device=/dev/sdd2 mountpoint=/var/www fstype=ext3
ccs -h host --rmresource resourcetype [resource options]
Attributs à connaître pour un service : autostart (démarrage automatique au boot du cluster), domain (domaine de basculement associé), exclusive (le service ne tourne que sur un nœud sans aucun autre service actif), recovery (politique : relocate, restart, disable, restart-disable).
ccs -h host --addservice servicename [service options]
ccs -h node-01.example.com --addservice example_apache domain=example_pri recovery=relocate
ccs -h host --addsubservice servicename subservice [service options]
ccs -h node01.example.com --addsubservice example_apache fs ref=web_fs
ccs -h node01.example.com --addsubservice example_apache fs name=web_fs device=/dev/sdd2 mountpoint=/var/www fstype=ext3
ccs -h host --rmservice servicename
ccs -h host --rmsubservice servicename subservice [service options]
Disque quorum via ccs
ccs -h host --setquorumd [quorumd options]
Options principales : interval (fréquence des cycles lecture/écriture en secondes), votes (votes annoncés à cman quand le score est suffisant), tko (cycles ratés avant déclaration de mort), min_score (score minimum pour être considéré vivant), device/label (identification du périphérique quorum, identique sur tous les nœuds).
ccs -h host --lsquorum
ccs -h host --rmheuristic [heuristic options]
Configurations diverses
ccs -h host --lsmisc # attributs divers configurés (totem, dlm, rm, cman)
ccs -h host --setversion n
ccs -h host --getversion
ccs -h host --incversion
ccs -h host --setmulticast multicastaddress # adresse multicast explicite
ccs -h host --setmulticast # revenir à l'auto-sélection
# cluster à deux nœuds : autoriser un seul nœud restant à garder le quorum
ccs -h host --setcman two_node=1 expected_votes=1
Pour les paramètres avancés (totem, dlm, rm, cman), voir man ccs et le schéma
annoté du fichier de configuration fourni par le paquet cman
(/usr/share/doc/cman-*/cluster_conf.html).
Propager la configuration
ccs -h host --sync --activate
ccs -h host --checkconf # vérifier que tous les nœuds sont synchronisés
ccs -f file -h host --setconf # pousser un fichier vers un nœud spécifique
Gérer le cluster avec ccs
ccs -h host --stop # faire quitter le cluster à un nœud
ccs -h host --start # faire rejoindre le cluster à un nœud
ccs -h host --stopall # arrêter le cluster entier
ccs -h host --startall # démarrer le cluster entier
ccs -h host --checkconf # diagnostiquer un problème de configuration
ccs -f file --checkconf
Démarrage/arrêt manuel (outils en ligne de commande)
ccs_config_validate
service cman start
service clvmd start
service gfs2 start
service rgmanager start # pour le HA
cman_tool nodes
clustat
Arrêt, dans l'ordre inverse (respecter cet ordre : arrêter rgmanager avant de démonter GFS2 évite de laisser des montages orphelins) :
service rgmanager stop # pour le HA
service gfs2 stop
umount -at gfs2 # s'assurer que tous les FS GFS2 sont bien démontés
service clvmd stop
service cman stop
Retirer un nœud
service rgmanager stop
service gfs2 stop
service clvmd stop
service cman stop
- Modifier
/etc/cluster/cluster.confpour retirer la sectionclusternode
du nœud supprimé.
- Si le cluster passe à deux nœuds après ce retrait, ajouter
<cman two_node="1" expected_votes="1"/>.
- Incrémenter
config_version(ex.2→3).
ccs_config_validate
cman_tool version -r # propager
Si le cluster passe de plus de deux nœuds à deux nœuds, redémarrer le cluster entier plutôt que recharger à chaud :
service cman start
service clvmd start
service gfs2 start
service rgmanager start
cman_tool nodes # vérifier le "M" dans la colonne Sts = membre du cluster
clustat # vérifier le HA
Ajouter un nœud
Sur un nœud existant, modifier /etc/cluster/cluster.conf pour ajouter la section
clusternode du nouveau nœud, incrémenter config_version, puis :
ccs_config_validate
cman_tool version -r
Redémarrer le cluster entier si le décompte des nœuds passe de deux à plus de deux ; sinon, démarrer simplement les services sur le nouveau nœud.
Gérer les services haute disponibilité
États affichés par clustat :
| État | Signification |
|---|---|
| Started | Les ressources du service sont configurées et disponibles sur le nœud propriétaire. |
| Recovering | Le service est en attente de démarrage sur un autre nœud. |
| Disabled | Service désactivé, aucun propriétaire assigné, jamais redémarré automatiquement. |
| Stopped | État temporaire : le service sera réévalué au prochain événement de cluster. Peut être activé/désactivé depuis cet état. |
| Failed | Le service est présumé mort (l'arrêt d'une ressource a échoué). Vérifier qu'aucune ressource n'est encore allouée avant tout disable — seule opération possible depuis cet état.
|
| Uninitialized | Peut apparaître transitoirement au démarrage ou lors d'un clustat -f.
|
Piloter les services avec clusvcadm
clusvcadm -e <service_name> # activer/lancer
clusvcadm -e <service_name> -m <member> # ... sur un membre précis
clusvcadm -d <service_name> # désactiver
clusvcadm -r <service_name> # relocaliser sur un autre nœud
clusvcadm -r <service_name> -m <member> # ... vers un membre précis
clusvcadm -s <service_name> # arrêter
clusvcadm -Z <service_name> # geler (empêche le basculement)
clusvcadm -U <service_name> # dégeler
clusvcadm -M <service_name> -m <member> # migrer (VM uniquement)
clusvcadm -R <service_name> # redémarrer
Diagnostic
omping # tester la communication multicast entre nœuds
rg_test test /etc/cluster/cluster.conf start service servicename # simuler le démarrage d'un service
rg_test rules # afficher les règles connues
rg_test noop /etc/cluster/cluster.conf start service servicename # afficher l'ordre de démarrage sans l'exécuter
rg_test noop /etc/cluster/cluster.conf stop service servicename # afficher l'ordre d'arrêt sans l'exécuter
rg_test delta cluster.conf-file1 cluster.conf-file2 # delta entre deux fichiers de conf
Pour un cluster à 3 nœuds ou plus, démarrer cman sur la majorité des nœuds à peu
près simultanément — le quorum ne peut se former tant que cette majorité n'a pas rejoint.
Supervision SNMP
Le cluster peut transmettre ses traps SNMP — configuration et liste des paramètres décrits dans le Cluster Administration Guide RHEL6 officiel (chapitre transfert des traps SNMP et paramètres fence).
Voir aussi
- CMANv2 — génération RHEL5 (Luci/ccsd), vue d'ensemble de l'architecture
- Install Cluster rhel5 — procédure d'installation complète sur RHEL5
- NFS — l'un des services HA supportés nativement par ce module