Mise en place d'un cluster OpenFiler

Le but de ce how-to est la mise en place d'un cluster haute disponibilité composé de deux machines sous OpenFiler, qui pourra être utilisé pour du NAS (nfs, smb, ftp, http), ou du NAS (iSCSI).

Sources

Ce how-to est largement basé sur celui-là: http://www.howtoforge.com/installing-and-configuring-openfiler-with-drbd-and-heartbeat

Matériel

Deux machines (de préférences identiques, mais pas obligatoire), supportées par OpenFiler 2.3 Chaque machine doit disposer deux deux interfaces réseau au minimum (une carte pour l'accès au réseau classique, une carte pour dialoguer avec l'homologue du cluster Les volumes de stockages doivent être de taille identique pour éviter les erreurs de synchronisation.

Installation

Installer Openfiler 2.3 sur les deux machines en les partitionnant comme ceci:

3 GB root (“/”)

2 GB “swap”

512 MB “/meta” (utilisé pour DRBD0)

Les partitions de données doivent être configuré comme un volume LVM non monté (utilisé pour DRBD1)

Réseau

Chaque serveur OpenFiler aura deux interfaces réseau: une pour communiquer sur son réseau, l'autre pour communiquer avec le second membre du cluster, via un câble croisé. La première sera utilisé pour l'administration.

Une IP virtuelle sera également attribuée au cluster. C'est elle qui sera utilisé pour accéder au serveur, et pointera vers la machine active.

Below is what is used:

ofha1

Interface LAN (eth0) 192.168.7.21

Interface de réplication (eth1) 192.168.101.11

ofha2

Interface LAN (eth0) 192.168.7.22

Interface de réplication (eth1) 192.168.101.12

Adresse IP du cluster (eth0) 192.168.7.20

Cette adresse est spécifiée dans cluster.xml (ne pas essayer de la configurer ailleurs)

Configuration des noms d'hôtes

Pour que chaque membre du cluster puisse contacter son homologue (via l'interface de réplication), il faut configurer un nom d'hôte en dur dans /etc/hosts

sur ofha1:

192.168.101.12 ofha2

sur ofha2:

192.168.101.11 ofha1

Clefs SSH

Pour permettre aux deux membres de se parler (via SSH) sans authentification interactive, il faut mettre en place une authentification par clefs SSH

sur ofha1 et ofha2

ssh-keygen -t rsa -b 2048

Ne pas mettre de mot de passe sur la clef

Il faut maintenant copier la partie publique de la clef * sur ofha1:

cat .ssh/id_rsa.pub | ssh root@ofha2 "cat >> ~/.ssh/authorized_keys"
ssh root@ofha2 chmod 600 ~/.ssh/authorized_keys

sur ofha2

cat .ssh/id_rsa.pub | ssh root@ofha1 "cat >> ~/.ssh/authorized_keys"
ssh root@ofha1 chmod 600 ~/.ssh/authorized_keys

Configuration de DRBD

DRBD est le composant qui permet de synchroniser les données sur les deux machines. Il fonctionne un peu comme du RAID1, mais sur TCP/IP, et permet donc de synchroniser des périphériques blocs à travers le réseau.

sur ofha1 et ofha2 (a configuration drbd est identique sur les deux nœuds):

On sauvegarde d'abord le fichier d'origine:

mv /etc/drbd.conf /etc/drbd.conf.org
vim /etc/drbd.conf

Puis on met en place la nouvelle configuration:

global {
# minor-count 64;
# dialog-refresh 5; # 5 seconds
# disable-ip-verification;
usage-count ask;
}
common {
syncer { rate 1000M; }
}
resource cluster_metadata {
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";
# outdate-peer "/usr/sbin/drbd-peer-outdater";
}
startup {
# wfc-timeout 0;
degr-wfc-timeout 120; # 2 minutes.
}
disk {
on-io-error detach;
}
net {
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
# rate 10M;
# after "r2";
al-extents 257;
}
on ofha1 {
device /dev/drbd0;
disk /dev/hda2;
address 192.168.101.11:7788;
meta-disk internal;
}
on ofha2 {
device /dev/drbd0;
disk /dev/hda2;
address 192.168.101.12:7788;
meta-disk internal;
}
}
resource vg0drbd {
protocol C;
startup {
wfc-timeout 0; ## Infinite!
degr-wfc-timeout 120; ## 2 minutes.
}
disk {
on-io-error detach;
}
net {
# timeout 60;
# connect-int 10;
# ping-int 10;
# max-buffers 2048;
# max-epoch-size 2048;
}
syncer {
after "cluster_metadata";
}
on ofha1 {
device /dev/drbd1;
disk /dev/hdb1;
address 192.168.101.11:7789;
meta-disk internal;
}
on ofha2 {
device /dev/drbd1;
disk /dev/hdb1;
address 192.168.101.12:7789;
meta-disk internal;
}
}

ATTENTION: il faut évidemment adapter /dev/hda2 et /dev/hdb1 respectivement à la partition créé lors de l'install /meta, et au volume de stockage.

Maintenant, sur les deux noeuds, on démonte /meta, on ré-initialise le début de la partition (pour détruire le FS ext3):

umount /meta
dd if=/dev/zero of=/dev/hda2 bs=1M count=1M

On répète l'opération sur ofha2.

Puis on initialise les volumes DRBD

drbdadm create-md cluster_metadata
drbdadm create-md vg0drbd

Et on re-fait la même opération sur ofha2