Chez JL

Joliciel Libre

Accueil > Informatique > Haute Disponibilité > NAS - drbd - heartbeat - samba et NFS

NAS - drbd - heartbeat - samba et NFS

mercredi 5 octobre 2011

Sources :

- http://doc.ubuntu-fr.org/tutoriel/mirroring_sur_deux_serveurs?s[]=drbd&s[]=samba
- http://shearers.net/john/papers/DRBD_NFS_How-To.html
- http://www.howtoforge.com/highly-available-nfs-server-using-drbd-and-heartbeat-on-debian-5.0-lenny
- http://wiki.goldzoneweb.info/cluster_nfs
- http://wiki.samba.org/index.php/1.0._Configuring_Samba

Voir autres articles pour installation et configuration heartbeat, drbd.

 DRBD

# vi /etc/drbd.conf
global {
   usage-count no;
}
common {
  protocol C;
 handlers {
   pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
   pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
   local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
   pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' root";
  split-brain "echo split-brain. drbdadm -- --discard-my-data connect $DRBD_RESOURCE ? | mail -s 'DRBD Alert' root";
 }
 startup {
wfc-timeout 120; # Temps d'attente du deuxième au lancement du daemon "drbd" (en seconde).
                       degr-wfc-timeout 110; # Temps d'attente du deuxième nœud en cas de crash (en seconde).

 }
 disk {
   on-io-error   detach;
 }
 net {
   after-sb-0pri discard-zero-changes;
   after-sb-1pri discard-secondary;
   after-sb-2pri disconnect;
   rr-conflict disconnect;
 }
 syncer {
   rate 30M;
   al-extents 257;
 }
}
resource r0 {
 on serveur1 {
   device     /dev/drbd0;
   disk       /dev/vg1/donnees;
   address    192.168.0.1:7788;
   meta-disk  internal;
 }
 on serveur2 {
   device    /dev/drbd0;
   disk      /dev/vg1/donnees;
   address   192.168.0.2:7788;
   meta-disk internal;
 }
}

 Samba

# aptitude install samba

Dans l’exemple, un seul groupe d’utilisateurs est créé :

groupadd sambausers

Et les utilisateurs sont créés de sorte qu’ils ne puissent pas utiliser le système (shell par défaut sur /bin/false et répertoire personnel (home) sur /dev/null) :

/etc/samba/smb.conf

Exemple de fichier minimal samba :

[global]
security = share
[public]
  path = /public
  guest ok = yes
  writable = yes

Voir le tutorial : http://marionpatrick.free.fr/man_html/html/tuto_samba.html

Si on met une sécurité par utilisateur "security = user", il faut bien définir les mots de passe samba des utilisateurs (avec : smbpasswd -a utilisateur), qui sont stockés dans un autre fichier que les mots de passe unix (/etc/samba/smbpasswd)

Prendre en compte la configuration (pour la tester) :

service samba reload
useradd --shell /bin/false --home /dev/null -g sambausers nom_utilisateur
smbpasswd -a nom_utilisateur

Test d’accès :

smbclient -L serveur
smbclient \\\\serveur\\nom_partage -U utilisateur

le paramètre "netbios name" est le même sur les 2 noeuds. (Le fichier smb.conf est le même sur les 2 noeuds)

Egalement les fichiers suivants, selon les configurations (si pas de ldap)

/etc/samba/smbpasswd
/etc/passwd

Désactiver le service sur les 2 noeuds, car c’est heartbeat qui va gérer son lancement.

# update-rc.d -f samba remove
update-rc.d: using dependency based boot sequencing
# service samba stop

 heartbeat

serveur1# aptitude install heartbeat
serveur1# vi etc/ha.d/ha.cf
debugfile /var/log/syslog
logfile /var/log/syslog
logfacility local0
autojoin none
ucast eth0 192.168.0.2
auto_failback off
warntime 4
deadtime 5
initdead 15
keepalive 2
node serveur1 serveur2

Sur le serveur2 la ligne suivant est différente :

ucast eth0 192.168.0.1

Ce fichier est le même sur les 2 serveurs

Fichier /etc/ha.d/authkeys voir article heartbeat

Le système de fichier sur le volume drbd sera monté sur /donnees

#  vi  /etc/ha.d/haresources
serveur1IPaddr::192.168.0.3 drbddisk::r0 Filesystem::/dev/drbd0::/donnees::ext3 samba  MailTo::admin@domain.fr::Changement_d_etat_serveur
serveur1 # service heartbeat reload
serveur2 # service heartbeat reload

Ainsi la configuration est prise en compte. Activer ensuite les services, ici sur le serveur1 :

serveur1 # /usr/share/heartbeat/takeover

 NFS

# aptitude install nfs-kernel-server
# update-rc.d -f nfs-kernel-server remove
update-rc.d: using dependency based boot sequencing
# update-rc.d -f nfs-common remove
update-rc.d: using dependency based boot sequencing
# service nfs-kernel-server stop
# service nfs-common stop
# echo "/donnees 192.168.0.0/255.255.255.0(rw,no_root_squash,sync,no_subtree_check)" >> /etc/exports
serveur1# mv /var/lib/nfs /donnees/varlibnfs
serveur1# ln -s /donnees/varlibnfs /var/lib/nfs
# echo 'STATDOPTS="-n san1"' >> /etc/default/nfs-common

Ajouter à heartbeat

# vi /etc/ha.d/haresources
serveur1IPaddr::192.168.0.3 drbddisk::r0 Filesystem::/dev/drbd0::/donnees::ext3 samba nfs-kernel-server nfs-common MailTo::admin@domain.fr::Changement_d_etat_serveur
# service heartbeat reload

Sur le client

   client-a: # mkdir /mnt/san1
   client-a: # echo "san1:/donnees /mnt/san1 defaults 0 0" >> /etc/fstab
   client-a: # mount -a

 Tester

serveur1# ifconfig
...
eth0:0    Link encap:Ethernet  HWaddr 00:XX:XX:XX:XX:XX  
         inet adr:192.168.0.3  Bcast:192.168.3.255  Masque:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         Interruption:19 Adresse de base:0xec00
...
serveur1# df -h
...
/dev/drbd0            122G  101G   15G  88% /donnees
...
serveur1# /etc/init.d/drbd status
...
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /donnees  ext3
...
serveur1# ps aux | grep mbd         #(pour voir service samba : nmbd, smbd)
serveur2# /usr/share/heartbeat/hb_takeover
serveur1# ifconfig
serveur1# df -h
serveur2# ifconfig
serveur2# df -h

Egalement suivre les logs sur chaque serveur.

 Voir l’état

serveur1# /etc/ha.d/resource.d/drbddisk r0 status
running (Primary)
serveur2# /etc/ha.d/resource.d/drbddisk r0 status
stopped (Secondary)

 Problèmes rencontrés

blocage ressource

- l’utilisateur root était en ligne de commande dans le répertoire data, sur le serveur1.
- si serveur1 fait un bh_standby, mais il ne peut pas démonter la partition, car elle est utilisé par root.
- le serveur1 à ses logs qui tournent en boucle et va jusqu’à redémarrer tout seul !

heartbeat ne démarre pas

Au redémarrage du serveur heartbeat ne se lance pas. Pas de signe de lui dans les logs... En fait, le cluster était en mode dégradé, car l’autre serveur était éteint. Sur la console du serveur, drbd est en attente. Il faut attendre les timeout de 110s ou 120s, pour que heartbeat arrive dans le processus de démarrage. Il faut bien mettre des valeur différente de 0 sinon c’est un timeout infini :

wfc-timeout 120;
degr-wfc-timeout 110;

 Problème rencontré, puis corrigé

Diagnostics :

- les fichiers ne s’ouvre pas en modification. Ils s’ouvrent en lecture seul.
- pourtant on peut créer des fichiers. Mais même les nouveaux fichiers s’ouvrent ensuite en lecture seul
- Errreur dans les logs

monserveur kernel: [492477.332581] lockd: cannot monitor monclient

Solution

sources :
- info en bas de page : http://www.crazysquirrel.com/computing/debian/servers/nfs.jspx
- http://communities.netapp.com/thread/1293
=> Il faut démarrer le service nfs-common sur le serveur, qui démarre le processus rpc.statd

Il fallait faire :

server01# update-rc.d -f nfs-common remove

(J’avais raté la ligne dans ce tuto )

Le démon nfs-comon doit être lancer par nsf-kernel-server qui est géré par heartbeat.

En fait, vu sur ce site : http://sites.google.com/site/tfsidc/ha-nfs

J’ajouter nfs-common dans le haresouces

 Remarques

Après un takeover, il faut attendre environ 1min pour que les documents du partage NFS soient accessibles.