CMANv3

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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.conf pour retirer la section clusternode
 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