Ce chapitre décrit en détails la construction d'un cluster Beowulf en utilisant Debian GNU/Linux et FAI. Pour plus d'information sur le concept Beowulf, consulter : http://www.beowulf.org.
Le cluster Beowulf de l'exemple est constitué d'un noeud maître et de 25 clients. Tout le matériel est assemblé dans un grand rack, avec un clavier et un moniteur. Ils sont connectés au serveur maître la plupart du temps, mais comme les câbles du moniteur et du clavier sont longs, ils peuvent ainsi être connectés sur chacun des noeuds si une modification doit être faite dans le BIOS, ou pour le dépannage quand un noeud ne démarre pas.
L'alimentation en énergie doit aussi faire l'objet d'une étude. Il ne faut pas brancher trop de noeuds sur chaque cordon d'alimentation et sur chaque prise. Répartissez-les sur plusieurs boîtes de dérivations et prises.
Et en ce qui concerne l'émission de chaleur ? Une douzaine de noeuds dans une petite pièce peuvent créer trop de chaleur, il faut alors prévoir un climatiseur.
Après une coupure d'alimentation électrique, les alimentations de chaque noeuds basculent-elles en stand-by, ou tous les noeuds redémarrent-ils simultanément ?
Tous les ordinateurs dans cet exemple sont connectés à un switch Fast Ethernet. Le noeud principal (ou serveur maître) est appelé « nucleus ». Il est équipé de deux cartes réseau. Une pour la connexion à l'Intranet externe, une pour la connexion au réseau interne du cluster. Pour une connexion depuis l'Intranet externe, il s'appelle « nucleus », mais les noeuds de cluster accèdent au noeud maître par le nom « atom00 ». C'est le nom de la deuxième interface réseau.
Le serveur maître est aussi le serveur d'installation pour les noeuds de calcul. Un miroir Debian local sera installé sur son disque dur. Le répertoire /home de chaque compte utilisateur est aussi placé sur le serveur maître. Il sera exporté via NFS à tous les noeuds de calcul. NIS sera utilisé pour distribuer le compte et les informations de noms machines et d'imprimantes à tous les noeuds.
Tous les noeuds clients atom01 à atom25 sont connectés via le switch sur la deuxième carte d'interface du noeud maître. Ils ne peuvent se connecter qu'aux autres noeuds ou au maître, mais ne peuvent communiquer avec aucun hôte à l'extérieur du réseau du cluster. Ainsi, tous les services (NTP, DNS, NIS, NFS...) doivent être disponibles sur le serveur maître. Je choisis le réseau de classe 'C' 192.168.42.0 pour adresser le réseau du cluster Beowulf local. Vous pouvez remplacer le sous-réseau 42 par un autre nombre si vous préférez. Si vous avez plus de 253 noeuds de calcul, choisissez un réseau de classe 'A' 10. X.X.X.
Dans la phase de préparation de l'installation, vous devrez démarrer plusieurs fois le premier client, jusqu'à ce qu'il n'y ait aucune erreur dans vos script de configuration. Vous devrez donc avoir un accès physique au serveur maître et au noeud client. Alors, connectez les deux ordinateurs à un commutateur, le clavier et le moniteur sont ainsi partagés par les deux machines.
Le serveur maître sera installé à la main si c'est votre premier ordinateur installé avec Debian. Si vous avez déjà un hôte sous Debian, vous pouvez aussi installer le serveur maître via FAI. Créez une partition sur /files/scratch/debmirror pour le miroir Debian local avec plus de 9.0 GB d'espace disponible.
Ajoutez les lignes suivantes dans /etc/network/interfaces pour la seconde carte réseau :
# Beowulf cluster connection
auto eth1
iface eth1 inet static
address 192.168.42.250
netmask 255.255.255.0
broadcast 192.168.42.255Ajoutez les adresses IP pour les noeuds clients. Le paquet FAI propose un exemple pour le fichier /etc/hosts :
# create these entries with the perl one liner
# perl -e 'for (1..25) {printf "192.168.42.%s atom%02s\n",$_,$_;}'
# Beowulf nodes
# atom00 is the master server
192.168.42.250 atom00
192.168.42.1 atom01
192.168.42.2 atom02Vous pouvez donner un nom au réseau interne du cluster en ajoutant cette ligne au fichier /etc/networks :
beowcluster 192.168.42.0
Activer la deuxième interface réseau :
# /etc/init.d/networking startAjoutez un utilisateur normal nommé par exemple Tom, qui est la personne qui édite l'espace de configuration et gère le miroir Debian local :
# adduser tom
# addgroup linuxadminCet utilisateur doit aussi être dans le groupe linuxadmin .
# adduser tom linuxadmin
Choisissez d'abord le nom de domaine NIS en créant le fichier /etc/defaultdomain , puis en appelant domainname[ (8)]. Initialisez le serveur maître comme serveur NIS en appelant :
# /usr/lib/yp/ypinit -mÉditez aussi /etc/default/nis pour que l'hôte devienne un serveur de domaine NIS. Copiez alors le fichier netgroup du répertoire contenant les exemples dans /etc et éditez le. Paramétrez l'accès au service NIS.
# cat /etc/ypserv.securenets
# Always allow access for localhost
255.0.0.0 127.0.0.0
# This line gives access to the Beowulf cluster
255.255.255.0 192.168.42.0Reconstruisez les maps NIS :
# cd /var/yp; make
Vous trouverez beaucoup plus d'information sur NIS dans le document NIS-HOWTO.
Maintenant l'utilisateur Tom peut créer un miroir Debian local sur /files/scratch/debmirror en utilisant mkdebmirror. Vous pouvez ajouter l'option -debug pour voir quels fichiers sont reçus. Il y aura besoin de 9.0 GB d'espace disque pour Debian 3.0 (c'est-à-dire woody). Exportez ce répertoire au netgroup @faiclients en lecture seule. Voici un exemple pour le fichier /etc/exports
/files/scratch/debmirror * (ro)
Ajoutez les paquets suivants au serveur d'installation :
nucleus:/# apt-get install ntp tftpd-hpa dhcp3-server \
nfs-kernel-server etherwake fai fai-kernels
nucleus:/# tasksel -q -n install dns-server
nucleus:/# apt-get dselect-upgradeConfigurez NTP pour que le serveur maître ait le temps système correct. Il est très important d'utiliser le nom réseau atom00 interne pour le serveur maître (pas le nom externe nucleus) dans /etc/dhcp3/dhcpd.conf et /etc/fai/make-fai-nfsroot.conf. Remplacez les termes FAISERVER par atom00 et décommentez la ligne suivante dans /etc/fai/make-fai-nfsroot.conf pour que les noeuds Beowulf puissent utiliser ce nom pour joindre leur serveur maître.
NFSROOT_ETC_HOSTS="192.168.42.250 atom00"
Paramétrez le démon du serveur d'installation comme décrit dans Démarrage avec une carte réseau respectant la norme PXE.
Si vous devez connecter beaucoup de noeuds de cluster (plus qu'environ 10) et si vous avez choisi d'utiliser rsh dans /etc/fai/fai.conf, augmentez le nombre de connections par minute à certains services dans inetd.conf :
shell stream tcp nowait.300 root /usr/sbin/tcpd /usr/sbin/in.rshd login stream tcp nowait.300 root /usr/sbin/tcpd /usr/sbin/in.rlogind
L'utilisateur Tom doit avoir les droits pour créer les liens symboliques pour démarrer via la carte réseau, il faut alors changer le groupe et ajouter quelques utilitaires.
# chgrp -R linuxadmin /boot/fai; chmod -R g+rwx /boot/fai
# cp /usr/share/doc/fai/examples/utils/* /usr/local/binMaintenant, l'utilisateur Tom sélectionne l'image de boot pour le premier noeud Beowulf.
fai-chboot -IFv atom01Démarrez maintenant le premier noeud client pour la première fois. Commencez alors à ajuster la configuration pour vos noeuds. N'oubliez pas de construire le noyau pour les noeuds de cluster en utilisant make-kpkg[ (8)] et de l'enregistrer dans /usr/local/share/fai/files/packages.
Les outils suivants sont utiles pour un cluster Beowulf :
Change le lien symbolique qui pointe sur l'image du noyau utilisé pour démarrer à partir d'une carte réseau. Ce n'est utilisé que quand vous démarrez en utilisant BOOTP.
Imprime une liste de tous les hôtes, imprime seulement les hôtes qui répondent à un ping ou les hôtes qui ne répondent pas. La liste complète des hôtes est définie par le netgroup allhosts. Regardez un exemple dans /usr/share/doc/fai/examples/etc/netgroup.
Exécute via rsh une commande sur tous les hôtes qui sont actifs. Utilise all_hosts pour avoir la liste de tous les hôtes actifs. Vous pouvez aussi utiliser la commande dsh[ (1)] (dancer's shell, ou distributed shell).
Voici ensuite quelques outils communs pour un environnement de cluster :
Pour un immense cluster, essayez rgang. C'est un outil qui exécute des commandes ou distribue des fichiers sur de nombreux noeuds. Il utilise un algorithme pour construire une structure en arbre qui permet la répartition du temps de traitement à l'échelle de 1000 noeuds ou plus (téléchargeable à http://fermitools.fnal.gov/abstracts/rgang/abstract.html).
Pour surveiller les ressources de tous les noeuds (CPU, mémoire, swap...) vous pouvez utiliser jmon[ (1)] qui installe un simple démon sur chaque noeud de cluster.
Ce toolkit est excellent pour contrôler votre cluster. Disponible à http://ganglia.sourceforge.net/.
Mais il y a beaucoup d'autres outils disponibles qui n'ont pas encore été inclus dans un paquet Debian.
« Wake on LAN » est une fonction très agréable sur un réseau local pour démarrer un ordinateur sans y avoir un accès physique. En envoyant un paquet éthernet spécial à la carte réseau, l'ordinateur s'allumera. Il faut réaliser les opérations suivantes pour utiliser la fonction « Wake on LAN » (WOL).
Connecter la carte réseau au connecteur « Wake on LAN » sur la carte mère utilisant le câble 3 broches.
Ma carte mère ASUS™ K7M a un cavalier appelé « Vaux » (3VSBSLT) qui permet de choisir la tension fournie pour les cartes PCI additionnelles. Positionnez-le sur 3VSB (3 volts stand-by).
Activez la fonction « Wake on LAN » dans le BIOS
Pour une carte 3Com™ utilisant le driver 3c59x, vous devez valider la fonction de WOL en utilisant l'option de module du noyau enable_wol. Pour réveiller un ordinateur, utilisez la commande etherwake[ (8)]. Vous trouverez des informations complémentaires sur http://www.scyld.com/expert/wakeonlan.html.