Installation de GFS pour utilisation avec volume DRBD sous Centos 5.5 ou redhat

Pour faire suite à la mise en place de DRBD dans mon post précédent (http://blog.inforeseau.com/2011/03/installation-drbd-sur-centos-5-5-ou-redhat), nous allons voir la mise en place de GFS, un système de fichier supportant les accès concurrentiels, et permettant ainsi à 2 systèmes (dans le cas présent) d’accéder à un support de stockage simultanément.

A réaliser sur les deux machines concernées (les machines qui partagent le volume DRBD et qui vont constituer notre cluster) :

Il nous faut tout dabord, CMAN (cluster manager) et le support GFS2 :

yum install gfs-utils gfs2-utils cman
yum groupinstall Clustering

Pour configurer le fichier de configuration de base du cluster, j’ai utilisé l’interface graphique « system-config-cluster » pour avoir un modèle, mais on peut créer le fichier à la main directement et définir les éléments du cluster (Ce fichier permet de définir les éléments du cluster pour CMAN qui va gérer les verrous).

<?xml version="1.0" ?>
<cluster config_version="3" name="mon_cluster">
        <fence_daemon post_fail_delay="1" post_join_delay="6"/>
        <clusternodes>
                <clusternode name="pcmsi" nodeid="1" votes="1">
                        <fence/>
                </clusternode>
                <clusternode name="pchp" nodeid="2" votes="1">
                        <fence/>
                </clusternode>
        </clusternodes>
        <cman expected_votes="1" two_node="1"/>
        <fencedevices/>
        <rm>
                <failoverdomains/>
                <resources/>
        </rm>
</cluster>

(man cluster.conf ou man fenced pour plus d’infos sur les paramètres du fichier ci dessus, j’ai augmenté le post_fail_delay à 1 seconde qui est à 0 par défaut à cause de latence sur mon réseau d’expérimentation qui est loin d’être performant! Plus d’infos sur les paramètres notamment liés au quorum (système d’élection dans le cluster) : http://sourceware.org/cluster/wiki/FAQ/CMAN#cman_quorum).

A noter également, la possibilité de modifier le délai de coupure considéré comme étant une rupture de liaison, entrainant le blocage du service (fence = ejection du noeud qui ne répond pas, bloquant l’accès au système GFS avec seulement 2 noeuds dans le cluster) : http://sourceware.org/cluster/wiki/FAQ/CMAN#cman_deadnode_timer

On autorise le trafic dans le firewall entre les noeuds du cluster (attention ici en réseau protégé, limitez les connexions aux machines de confiance, idéalement sur un réseau dédié au cluster).

ATTENTION SI VOUS AVEZ DEJA UNE CONFIGURATION IPTABLES SAUVEZ LE FICHIER AVANT D’UTILISER CE SCRIPT (EN CAS DE DOUTE, PRÉFÉRER LA MÉTHODE MANUELLE EN AJOUTANT LES RÈGLES IPTABLES A LA MAIN COMME INDIQUÉ JUSTE APRÈS).

Avec Iptables, on va utiliser un petit script pour configurer iptables afin d’autoriser le trafic pour le cluster.
Le fichier qui va bien (source : http://www.open-sharedroot.org/faq/administrators-handbook/cluster-system-administration/ports-being-in-use-by-the-red-hat-cluster-software) :

#!/bin/bash

IPTABLES=/sbin/iptables
CLUSTER_INTERFACE=eth0
TCP_PORTS="41966 41967 41968 41969 50006 50008 50009 21064"
UPD_PORTS="50007 5405"

echo -n "Applying iptables rules"
for port in $TCP_PORTS; do
  $IPTABLES -I INPUT  -i $CLUSTER_INTERFACE -p tcp -m tcp --sport $port -j ACCEPT
  $IPTABLES -I INPUT  -i $CLUSTER_INTERFACE -p tcp -m tcp --dport $port -j ACCEPT
  $IPTABLES -I OUTPUT -o $CLUSTER_INTERFACE -p tcp -m tcp --dport $port -j ACCEPT
  $IPTABLES -I OUTPUT -o $CLUSTER_INTERFACE -p tcp -m tcp --sport $port -j ACCEPT
done
for port in $UPD_PORTS; do
  $IPTABLES -I INPUT  -i $CLUSTER_INTERFACE -p udp -m udp --sport $port -j ACCEPT
  $IPTABLES -I INPUT  -i $CLUSTER_INTERFACE -p udp -m udp --dport $port -j ACCEPT
  $IPTABLES -I OUTPUT -o $CLUSTER_INTERFACE -p udp -m udp --dport $port -j ACCEPT
  $IPTABLES -I OUTPUT -o $CLUSTER_INTERFACE -p udp -m udp --sport $port -j ACCEPT
done
echo "[OK]"
echo -n "Saving new rules"
(/etc/init.d/iptables save && \
 echo "[OK]") || echo "[FAILED]"

On l’exécute évidemment pour appliquer les règles qui permettent le trafic. Attention encore, cette configuration ne filtre rien, et considère que vous utilisez une carte réseau dédiée (la CLUSTER_INTERFACE eth0 ici) pour le cluster, sans interception de trafic possible, un câble réseau dédié en gros (pas utilisable sur un réseau ouvert).

Note : on peut sauver la configuration iptables de manière permanente comme suit (recommandé pour le relancement du cluster en cas de reboot) :

/sbin/iptables-save>/etc/sysconfig/iptables

SI LE SCRIPT AU DESSUS VOUS POSE PROBLEME – METHODE MANUELLE (ce qui a été le cas sur une machine pour moi) :
Voici simplement les lignes à ajouter dans /etc/sysconfig/iptables avant les 2 lignes du bas (REJECT et COMMIT) pour permettre la communication du cluster, si vous utilisez ETH0 pour la communication du cluster :

-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp --dport 5405 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp --sport 5405 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp --dport 50007 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp --sport 50007 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 21064 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 21064 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 50009 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 50009 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 50008 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 50008 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 50006 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 50006 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 41969 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 41969 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 41968 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 41968 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 41967 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 41967 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --dport 41966 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m tcp --sport 41966 -j ACCEPT

Après avoir ajouté ces lignes, relancez iptables et c’est réglé.

Puis on active les services au démarrage :

chkconfig cman on
chkconfig gfs2 on

On lance les services :

service cman start
service gfs2 start

On crée le système de fichier gfs2 sur le volume géré par DRBD (uniquement sur la machine principale) :

mkfs.gfs2 -p lock_dlm -t mon_cluster:vbox /dev/drbd1 -j 2

On passe les 2 machines en primary sur DRBD si ça n’est pas le cas (nécessaire pour le montage simultané des ressources):

drbdadm primary resource

On monte le volume une fois créé sur les deux machines :

mkdir /mnt/drbd
mount -t gfs2 /dev/drbd1 /mnt/drbd

Voilà, c’est opérationnel, les deux machines peuvent lire et écrire sur le volume /dev/drbd1 grâce à la gestion du verrou par le cluster.

Quelques références utilisées pour la réalisation de ce post :
http://www.redhat.com/gfs/
http://www.cyberciti.biz/faq/linux-cluster-suite-software/
http://securfox.wordpress.com/2009/08/11/how-to-setup-gfs/
http://sources.redhat.com/cluster/wiki/FAQ/CMAN#two_node
http://www.open-sharedroot.org/faq/administrators-handbook/cluster-system-administration/ports-being-in-use-by-the-red-hat-cluster-software
http://www.sourceware.org/cluster/wiki/DRBD_Cookbook
http://www.drbd.org/users-guide/ch-gfs.html
Ici un autre tuto complet et très clair avec Debian, GFS2 et DRBD :
http://gcharriere.com/blog/?p=73
et à lire un commentaire très pertinent sur la procédure qui s’applique également à mon post :
http://gcharriere.com/blog/?p=73#comment-15
Un article assez complet sur la haute disponibilité chez Redhat :
http://docs.redhat.com/docs/fr-FR/Red_Hat_Enterprise_Linux/5/html-single/Cluster_Suite_Overview/index.html#fig-intro-cluster-CSO

Tags: , , , , , , , ,

vendredi, mars 11th, 2011 Bash, GNU - Linux, Innovation, Reseau, Technologie

5 Commentaires to Installation de GFS pour utilisation avec volume DRBD sous Centos 5.5 ou redhat

  • tresronours dit :

    Pour permettre à un cluster de 2 noeuds de ce type de poursuivre son activité de manière transparente en cas de panne d’un des deux supports, il faut configurer un « quorumdisk ». Plus d’informations ici :
    http://magazine.redhat.com/2007/12/19/enhancing-cluster-quorum-with-qdisk/

    En l’etat, le système assure simplement la réplication et permet de disposer d’un volume à accès concurrent, sans pour autant proposer de continuité d’activité en cas de panne. Il faudra en effet un intervention « humaine » pour remonter le système en cas de problème.
    – Rétablir la synchro DRBD (primaire, secondaire, passer le secondaire en primaire en fin de synchro)
    – Rétablir la liaison du cluster (relancer les services cman)
    – Remonter le volume GFS et éventuellement relancer les services qui utilisent les données stockées sur celui ci.

  • tresronours dit :

    Petite note : en cas de soucis et pour écarter les doutes, la première chose à faire est de couper iptables afin de s’assurer que le soucis ne vienne pas d’un mauvais paramétrage du firewall.

    Plus d’infos sur le firewall centso / redhat / fedora : http://www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/

  • tresronours dit :

    Just pour memo, mon cluster.conf après quelques modifications :

    <?xml version="1.0"?>
    <cluster config_version="4" name="mon_cluster">
            <fence_daemon post_fail_delay="0" post_join_delay="6"/>
            <totem token="21000"/>
            <clusternodes>
                    <clusternode name="pcmsi" nodeid="1" votes="1">
                            <fence/>
                    </clusternode>
                    <clusternode name="pchp" nodeid="2" votes="1">
                            <fence/>
                    </clusternode>
            </clusternodes>
            <cman expected_votes="1" two_node="1"/>
            <fencedevices/>
            <rm>
                    <failoverdomains/>
                    <resources/>
            </rm>
    </cluster>
  • Ajouter un commentaire


     
    mars 2011
    L M M J V S D
    « Fév   Avr »
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
     

     
    Suivez moi sur twitter - follow me on twitter
    [FSF Associate Member]
     
    Free Software, Free Society
    VIRTUALISATION :
    Compacter une image virtualbox VDI
    Bon petit tutoriel esxi
    Marche d'appliances vmware
    Installer ESXi sur un disque IDE
    Installer ESXi 3.5 sur un disque USB
    Installer proxmox avec DRBD et migration / réplication à chaud
    Installer OSSEC avec VMware
    Information sur le VDI
    SECURITE - FIREWALL :
    Ouvrir des ports dynamiquement iptables - knockd
    Autre tres bon tuto knockd
    Docs Arp poisoning - Anglais
    Metasploit test de pénétration
    Zone H - sites piratés en temps réel
    Blog invisible things
    Tips protection sécurité wordpress
    Pfsense - distribution firewall opensource - adsl internet failover
    Iproute 2 mini how to - linux advanced routing
    ClearOS - la passerelle sécuritaire lan - wan
    HAUTE DISPONIBILITE :
    CDN - Accélération de la distribution de données
    drbd iscsi ocfs2 dm multipath tutoriel
    Load balancing LVS
    Load balancing opensource list
    HA-Proxy :
    HAproxy - http load balancer
    Simple tutoriel HAproxy
    HAproxy - debian tutoriel
    Centos - Ip failover
    Configuratoin DM-Multipath Redhat
    VMware Doubletake - continuité
    Quelques liens sur la réplication MySQL : Manuel MySQL, chapitre sur la réplication
    Manuel MySQL, Tutoriel clair sur la mise en place
    Autre tuto sur la mise en place de la réplication MySQL
    Références pour optimisation du serveur MySQL
    Utilisation de EXPLAIN mysql pour optimiser vos bases
    optimiser vos bases - requetes et index
    STOCKAGE RESEAU :
    Un outil de clonage disque en reseau
    Internet NAS 250Go 250 accès VPN
    Server ISCSI avec Ubuntu tuto
    ISCSI centos redhat tutoriel
    Gérer et étendre un LVM
    Créer sa piratebox ! trop cool
    Deaddrops, les clés USB dans les murs, aussi cool !
    OPTIMISATION WORDPRESS :
    Télécharger Xenu
    Comment utiliser Xenu
    optimisation hébergement wordpress
    Super howto wordpress (En)
    Test de charge serveur web - Load impact
    VPN - ROUTEUR - LAN:
    Zeroshell - le mini-routeur wifi tout en un
    Retroshare, votre réseau d'échange crypté!
    Openvpn sur centos redhat
    Intégrer Linux dans active directory
    Routage inter-vlan avec Linux
    Routage avec OSPF
    Network Weathermap
    TENDANCES - WEB:
    Boutons twitter
    Analyser les tendances des recherches Google
    Protocole sitemap - robots.txt
    Creer des animations CSS3
    Code php pour interagir avec twitter
    E reputation
    Jquery
    TRUCS ET ASTUCES GNU/LINUX :
    Tuxmachines.org - Actus et tips linux
    Configurer GRUB2 et grub2 ici
    Panoet - en anglais - tips & tricks
    Readylines tips and trick pertinents
    Squid Clamav - proxy antivirus
    Apprendre Unix en 10 minutes
    13 tips sur les expressions régulières
    IE Sous linux IES
    LDAP 2.4 Quickstart guide
    Tutoriel LDAP
    Installation annuaire LDAP
    Serveur Mail Postfix - Dovecot - LDAP - MDS
    Créer un linux personnalisé en ligne - custom linux
    Super site sur linux - en
    Capistrano - déploiement automatisé
    MONITORING :
    Nagios tutoriel et doc
    Nagios plugin NRPE tuto
    Nagios plugin NRPE autre tuto
    Nagios plugin NRPE officiel
    Zabbix - fonctionnalités
    Zabbix - installation
    Guide MRTGsys - grapher la charge locale
    MRTGsys - ajouter des graphs
    MRTGsys - interpréter les données
    Shinken - Monitoring
    Thruk Monitoring webinterface
    Shinken - Tutoriel
    Shinken - Référence chez Nicolargo
    AUTRES LIENS :
    RemixJobs IT jobs
    USB Multiboot
    Reset mot de passe windows
    Java python et autres tips, intéressant !
    Forum inforeseau
    Open Clipart
    Excellent comic en ligne
    Inforeseau.fr
     
    Contrat Creative Commons
    This création is licensed under a Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique 2.0 France License.