Jan.01

Serveurs Samba redondants

Il y a quelques semaines, la modernisation de l’infrastructure informatique d’une petite entreprise de 15 travailleurs, m’a été confiée.

Tous travaillaient au même poste et devaient, en permanence, partager des données au niveau local. Or, celles-ci étaient stockées sur les postes clients et les échanges se faisaient par clef usb… Bref, pas top tout ça !

Mon approche a été de centraliser toutes ces données sur un serveur de fichiers, accessibles par tous les clients via le réseau (mélange de postes Ubuntu et Windows). Malheureusement, en centralisant l’information, on crée de nouvelles contraintes:

  1. Les données doivent être protégées contre la perte (Crash de HDD par exemple)
  2. Elles doivent être accessibles en permanence (FailOver requis !)

Au vus de ces contraintes, je me suis tourné vers un architecture à redondance complète : 2 machines avec réplication synchrone et gestion de FailOver, le tout sous Ubuntu Server. C’est la raison pour laquelle j’ai utilisé Samba (Serveur de fichiers), DRBD (synchronisation des données entre serveurs) et Heartbeat (FailOver logiciel via IP flottante).

Bon, au boulot !

Note: Toutes les commandes sont lancées en tant que super-utilisateur !

Nous travaillerons sur server01 (192.168.0.10) et server02 (192.168.0.11) et avec l’ip flottante 192.168.0.20. Nous considérerons que la partition allouée est /dev/sdb5.

  1. Installer les paquets requis:
    Samba:

    apt-get install samba
    DRBD:
    Installé par défaut dans les noyaux récents
    Heartbeat:
    apt-get install hearbeat
  2. Configuration de DRDB
    Pour un fonctionnement optimal de DRDB, je conseille de garder une partition logique dédiée à la réplication, où mieux encore, un disque-dur dédié. 
    Un fois DRDB installé, il faut que celui-ci se lance au démarrage du système afin que Heartbeat puisse démarrer le service à sa guise:
    update-rc.d drbd defaults 70
    Il faut aussi appliquer les bonnes permissions pour que Heartbeat puisse lancer ou arrêter les services de DRDB:
    chgrp haclient /sbin/drbdsetup
    chmod o-x /sbin/drbdsetup
    chmod u+s /sbin/drbdsetup
    chgrp haclient /sbin/drbdmeta
    chmod o-x /sbin/drbdmeta
    chmod u+s /sbin/drbdmeta

    Il nous reste à créer la ressource qui sera partagée, nommons-là r0.Il faut donc créer le fichier /etc/drbd.d/r0.res :
    resource r0 {
    on server01 {
    device /dev/drbd1;
    disk /dev/sdb5;
    address 192.168.0.10:7789;
    meta-disk internal;
    }
    on server02 {
    device /dev/drbd1;
    disk /dev/sdb5;
    address 192.168.0.11:7789;
    meta-disk internal;
    }
    }
    Manip à effectuer sur les deux serveurs (les fichiers doivent être exactement identiques, sans quoi le bon fonctionnement du système n’est pas garanti).À partir d’ici, les manips doivent être effectuées en même temps sur les deux machines. Autrement-dit, vous ne pouvez-pas passer à une étape avant d’avoir réalisé la précédente sur les deux machines !Création de la ressource DRDB:
    drbdadm create-md r0
    Puis, pour la monter:
    drbdadm up r0
    A ce stade, il n’existe pas de serveur primaire/secondaire:
    drbdadm role all
    renvoie:
    Secondary/Secondary
    ce qui signifie que les deux serveurs sont secondaires. Nous allons donc en définir un comme primaire. Pour ce-faire, effectuez cette commande uniquement sur le serveur primaire (server01 pour nous):
    drbdadm -- --overwrite-data-of-peer primary r0
    Dès ce moment, les serveurs se synchronisent (rapide puisque les deux partitions sont vierges !)

    Enfin, il reste à formater la partition:
    mkfs.ext3 /dev/drbd1
    et la monter:

    mkdir /data
    mount /dev/drbd1 /data
  3. Configuration de Samba
    Au vus de la nature de l’installation, c’est Samba qui gérera les comptes utilisateurs et non Ubuntu. Ceci est paramétrable dans /etc/samba/smb.conf. Pour ce-faire, nous allons créer un groupe d’utilisateurs réservé à samba:
    groupadd sambausers
    et y ajouter un premier utilisateur; Jean
    useradd -s /bin/false -d /dev/null -g sambausers jean
    smbpasswd -a jean

    Enfin, vient la configuration de Samba dans le fichier /etc/samba/smb.conf, qui est prêt à fonctionner, mais libre à vous d’y apporter des changements.
  4. Ajout d’un dossier partagé
    Pour ajouter un dossier en écriture, il suffit d’ajouter ces lignes à smb.conf:
    [nom_du_dossier_partagé]
    path = /data/shares/dossier_de_partage
    read only = no
    valid users = jean mathieu
    #liste d'utilisateurs séparés par des espaces

    Pour ajouter un dossier en lecture et  écriture:
    [nom_du_dossier_partagé]
    path = /data/shares/dossier_de_partage
    read only = yes
    valid users = mathieu
    write list = jean alain
    #liste d'utilisateurs séparés par des espaces

    Et évidemment, donner les permissions sur le répertoire de données:
    chmod -R 775 /data
  5. Configuration de Heartbeat
    C’est facile ! Il suffit d’éditer le fichier /etc/hearbeat/ha.cf:
    logfile /var/log/ha-log
    logfacility local0
    keepalive 2
    deadtime 10
    bcast eth0
    node server01 server02
    auto_failback yes
    respawn hacluster /usr/lib/heartbeat/ipfail
    apiauth ipfail gid=haclient uid=hacluster

    Ensuite, configurer le fichier de clef/protocol; /etc/heartbeat/authkeys :
    ( echo -ne "auth 1\n1 sha1 "; dd if=/dev/urandom bs=512 count=1 | openssl md5 ) > /etc/heartbeat/authkeys
    à faire sur server01, puis copier le fichier résultant sur server02 !
    Puis, appliquer les droits du fichier:
    chmod 0600 /etc/heartbeat/authkeys
    Enfin, il reste à dire à Hearbeat que faire en cas de FailOver. Ça se passe dans le fichier /etc/hearbeat/haresources:
    server01 IPaddr::192.168.0.20 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext3 smbd
    Note: server01 en début de ligne représente le serveur « préféré », IPaddr l’adresse IP flotante, ensuite les instructions de montage de la partition synchronisée, et enfin samba. En effet, Hearbeat ajoutera start/stop à la fin de chaque commande pour lancer/arrêter les services lui-même.
  6. Reboot !
    Si vous avez bien travaillé, tout doit être bon et, au reboot, voici ce qui se passe:
    – lancement de Heartbeat
    – écoute de 192.168.0.20 sur eth0:0 par server01
    – montage de /dev/drbd1 sur /data par server01
    – lancement de Samba sur server01. En cas de panne de server01, Heartbeat fera en sorte que instantanément, server02 reprenne le travail de server01. Quand server01 sera de nouveau UP, Heartbeat repassera la charge dessus puisque le paramètre « auto_failback » a été définis à « yes » dans le fichier /etc/hearbeat/ha.cf (auto_faillback signifie donc revenir sur le serveur préféré s’il revient en ligne)

 

  1. Bande Passante
    Pour éviter de surcharger le réseau (dans mon cas, un « bête » 10/100), j’ai installé un switch reliant les deux machines au réseau. De cette façon, les données ne transitent pas par tout le réseau pour aller d’un serveur à l’autre. Une autre solution peut être d’ajouter des cartes réseaux et de relier par un câble croisé ou tout simplement de limiter les taux d’échange entre les deux serveurs… au risque de ne plus avoir de parfait synchronisation !

 

  1. Commandes utiles
    La seule que vous utiliserez vraiment, puisque Heartbeat effectuera les autres:
    /etc/init.d/heartbeat start/stop/status/restart

 

Bonne chance 🙂

Tech&Dev

Comments(1)

  1. Load Balancing
    2483 days ago

    J’ai du refaire la manip et tout reprendre depuis le début deux fois je ne sais pas où j’ai buguer … mais merci pour les explications claires, ça fait plaisir de voir des blogs qui prennent le temps de partager 🙂
    A+!

Leave a comment

Comment