Monter un cluster avec kerrighed sur son réseau

Plopinou … encore un article de type « retour d’expérience geek »
Temps : 2h (en compilant le tout avec un AMD 3000+)
Niveau : Noob (faut quand même savoir jouer à WoW le temps de la compil’ qui peut prendre 1 heures)

Le but de cette technique était de recycler quelques PC sur mon réseau et gagner en puissance de calcul avec de vieux AMD 3000+ avec 1Go de ram.

Kerrighed est un cluster de type « Grappe de serveur » qui permet un truc assez sympa, il suffit que l’ensemble des machines du réseau utilisent le kernel modifié (un 2.6.20 obligatoire …) pour que l’ensemble de ces machines puissent être emulées comme une seul machine SMP partageant donc le CPU et la RAM des machines, assez sympa pour des logiciels qui bouffent de la ram et du cpu (genre firefox ?? xD).

Le gros intéret de ce type de réseaux face à des solutions comme les systèmes MPI est qu’il n’y a pas besoin d’avoir des logiciels spécifique qui utilisent l’interface en question, ici la plupart des softs qui peuvent tourner sur du kernel SMP (qui devient assez commun sur les dernières machine multi-core pour partager les calculs entre les cores d’une même machine) peuvent être susceptible d’utiliser le CPU/RAM des autres ordi.

Alors bon … d’un côté ça parait super intéressant de pouvoir ajouter la puissance de nos anciens PC, d’un autre ont se dit … c’est naze, faut installer le kernel à la main sur chacune de ces machines, de quoi repousser n’importe qu’elle geek en puissance devant le travail à fournir …

C’est là qu’intervient un truc super sympa que l’iut de stras utilisait pour faire booter les terminaux X (et que d’autre utilisent surement). Utiliser une machine comme serveur dhcp,nfs,tftpd-hpa pour faire booter d’autres machines sur un réseau (en clair, on installe le système sur une machine, et toute les autres boot dessus, permettant même de d’utiliser des machines sans disque dur, comme ça on peut ce faire une machine qui prend tt les dd et les partager sur le réseau et pouvoir rajouter une nouvelle machine en la connectant simplement au réseau et en la bootant dessus).

Pour ça, j’ai suivi un superbe tuto (en anglais, et pas trop vieux en plus) que je vais traduire et commenter avec mes superbes retour d’expériences ^^.

L’architecture :

J’ai ma machine HOST (serveur nfs,dhcp,tftpd, …) sur laquelle je fait toute mes manipulations, avec deux interfaces, la première connectée au net (histoire de pouvoir mettre à jour la machine), et la seconde connectée à mon réseau de cluster, qui a besoin d’un réseau à part, puisque j’utilise un serveur DHCP dédié à l’adressage de ces machines.

Donc voilà, pour les IPs : 192.168.0.1 est mon serveur principal, 192.168.0.10 et 192.168.0.11 sont mes deux nodes qui vont booter sur le réseaux.

L’ensemble des manipulations à suivre ce faisant depuis 192.168.0.1 (nommé HOST).

La première commande :

apt-get install dhcp3-server tftpd-hpa portmap syslinux nfs-kernel-server nfs-common debootstrap

qui permettra d’installer l’ensemble des softs nécessaire à notre cluster.

Puis on modifie le fichier /etc/default/dhcp3-server et on spécifie l’interface sur laquelle est connecté notre cluster (eth0 étant ma connexion au net) :

INTERFACES="eth1"

Puis le fichier /etc/dhcp3/dhcpd.conf

# General options
option dhcp-max-message-size 2048;
use-host-decl-names on;
deny unknown-clients;
deny bootp;

option domain-name "cluster.lan";
option domain-name-servers 192.168.0.1;

subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
}

group {
filename "pxelinux.0";
option root-path "192.168.0.11:/nfsroot/kerrighed";

host node1 {
fixed-address 192.168.0.10;
hardware ethernet 11:33:22:55:44:66;#à remplacer par l'adresse mac de votre machine 1
}
host node2 {
fixed-address 192.168.0.11;
hardware ethernet 11:22:33:44:55:66;#à remplacer par l'adresse mac de votre machine 2
}

server-name "host";
next-server 192.168.0.1; # Server IP
}

On permet le lancement en daemon de tftp au démarrage de la machine en modifiant /etc/default/tftp-hpa

RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

On copie notre loader pxe

cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot

On créer notre dossier de conf :

mkdir -p /var/lib/tftpboot/pxelinux.cfg

Et on edit notre fichier de boot réseau dans /var/lib/tftpboot/pxelinux.cfg/default :

LABEL linux
KERNEL vmlinuz-2.6.20-krg
APPEND console=tty1 root=/dev/nfs nfsroot=192.168.0.1:/nfsroot/kerrighed ip=dhcp rw session_id=1

Maintenant que notre boot est prêt, il faut créer le système sur lequel les autres machines vont booter :

mkdir -p /nfsroot/kerrighed

On prépare l’import en éditant le fichier /etc/exports :

/nfsroot/kerrighed 192.168.0.1/255.255.255.0(rw,no_subtree_check,async,no_root_squash)

Puis un coup de

exportfs -avr && debootstrap - -arch i386 lenny /nfsroot/kerrighed http://ftp.fr.debian.org/debian

Qui peut prendre un bon bout de temps (z’avez le temps de faire un warsong voir même une instance de 30 minutes sur WoW ^^) … puis on fait un coup de

chroot /nfsroot/kerrighed

Pour changer les fichiers de config de notre « nouvelle machine » :

mount -t proc none /proc && mkdir /config && mount -t configfs none /config && apt-get update && export LC_ALL=C && apt-get install dhcp3-common nfs-common nfsbooted openssh-server && ln -sf /etc/network/if-up.d/mountnfs /etc/rcS.d/S34mountnfs &&  apt-get install automake autoconf libtool pkg-config gawk rsync bzip2 libncurses5 libncurses5-dev wget lsb-release xmlto patchutils xutils-dev build-essential subversion && svn checkout svn://scm.gforge.inria.fr/svn/kerrighed/trunk /usr/src/kerrighed -r 5426

Puis modification du /etc/fstab

proc /proc proc defaults 0 0
/dev/nfs / nfs defaults 0 0
configfs /config configfs defaults 0 0

On passe par /etc/network/interfaces pour configurer notre réseau … pour moi :

auto lo
iface lo inet loopback
iface eth0 inet dhcp

Une fois que la plupart des configs sont faites, on peut passer par la compilation du kernel kerrighed.

wget -O /usr/src/linux-2.6.20.tar.bz2 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 && cd /usr/src/kerrighed && ./autogen.sh && ./configure && cd kernel && make defconfig && make menuconfig

Dans le menu ‘super ecran bleu’ :
Allez dans « Device Drivers » puis « Network device support » et choisir sa carte réseau (sinon vous n’arriverez pas à monter le root une fois le kernel booté).
Revenir au premier menu et choisir « File systems » puis « Network File Systems » et permettre le nfsV3.
On quitte et on sauvegarde la configuration (en cliquant sur « exit »).

On reprend nos commandes (on peut faire un match sur HoN là, y’en a pour une heure) :

cd .. && make kernel && make && make kernel-install && make install && ldconfig

On continue la configuration de notre systèmes en modifiant le fichier /etc/kerrighed_nodes

session=1 #entre 1 et 254
nbmin=1 #nombre de node minimal pour kerrighed.
192.168.0.10;1:eth0
192.168.0.11:2:eth0

et on termine ici en modifiant /etc/default/kerrighed

ENABLE=true

on quitte notre chroot par un superbe :

exit

On copie notre « booter » dans le boot et on redémarre tout nos soft :

cp /nfsroot/kerrighed/boot/vmlinuz-2.6.20-krg /var/lib/tftpboot/ && /etc/init.d/tftpd-hpa start && /etc/init.d/dhcp3-server start && /etc/init.d/portmap start && /etc/init.d/nfs-kernel-server restart

A partir de maintenant, toute machine bootant en réseau sera capable d’utiliser le kernel compilé. (assez sympa en cyber café, ou … 😉 ).

Par contre une fois lancer, il ne faut pas oublier d’autoriser la migration des processus en se connectant sur l’une des nodes :

krgadm nodes && krgadm cluster start && /usr/local/bin/krg_legacy_scheduler && krgcapset -d +CAN_MIGRATE && krgcapset -k $$ -d +CAN_MIGRATE && krgcapset -d +USE_REMOTE_MEMORY && krgcapset -k $$ –inheritable-effective +CAN_MIGRATE

Et voilà … les geeks en puissance vont pouvoir faire revivre leurs premières machines ^^ (et les terminer dignement xD)

16 réflexions sur “ Monter un cluster avec kerrighed sur son réseau ”

  1. Sympa cet article mais y a t il une version imprimable ? car si j’utilise la fonction aperçu avant impression il me manque des bouts de commande …

  2. Je viens de rajouter le lien « Télécharger au format PDF » assez long à générer, et le rendu est assez moche mais y’a toute les commandes 😉

  3. Je continu à lire ton article mais j’aurais une petit question technique : plutot que d’installer un serveur dhcp sur notre distribution linux ne pourrait on pas utiliser le serveur dhcp de la livebox par exemple ? y a t il dans ce cas une configuration à faire ? merci

  4. Dans ce cas, installer le serveur dhcp ne sert à rien en effet, mais il faut aussi que le serveur dhcp actuel (la box/le modem) supporte le bootp et que l’interface de configuration du service en question soit disponible (ce qui n’est pas le cas sur la plupart des box).
    N’ayant jamais eu de livebox, je ne sais pas si c’est possible.

    Si l’installation du service dhcp pose problème, un indice pourrait être la redirection de port (bootp) depuis la box sur la machine avec seulement le service bootp, sans dhcp … genre : bootpd
    Sinon, on peut installer un dhcp non-autoritaire comme ici : http://www.orgrim.net/linux/serveur-bootp

  5. Tres intéressant, j’utilise Kerrighed, et je compte faire un tutoriel a peu près similaire (expliquation général + traduction du totoriel officiel), mais tu m’as déja devancé.. Chapeau-bas!

  6. slt
    je suis actuellement sur un projet de clustering
    entre autre de calcul et je rencontre des pb à la compilation du noyau 2.4.26 car en effet je comptait utiliser openmosix mais vu le probleme de compilation du noyau 2.4.26
    je cherche des alternatifs et je me pose la question de savoir si le kerrighed pourra resoudre le pb?
    Merci

  7. Comme kerrighed utilise un kernel 2.6 je pense que ça peut résoudre le problème.

    Sinon, si tu utilise du openMosix (projet mort depuis 2 ans), le projet LinuxPMI peut t’intéresser : http://linuxpmi.org/trac/ (ça tourne aussi en 2.6)

  8. Bonjour,

    Je suis interressé par kerrighed, mais je m’intérroge sur quelques points.
    J’aimerais savoir si le serveur NFS/DHCP/… peut opbtenir les ressources des nodes ?

    Je pose cette question car je doit installer un cluster. Le but serait d’utiliser au départ deux de nos serveurs. Les utilisateurs se connectent sur le serveur 1 (en mode graphique) puis lancent leurs calculs. Nous aimerions que le serveur 1 puisse obtenir les ressources du serveur 2.

    Hors je n’ai pas l’impression que cela soit faisable avec les image PXE, j’ai essayé mais je n’arrive pas a voir les ressources de mes nodes sur le serveur.

    Suite à une prise de contact sur la mailing list, on m’a donné le nom d’une personne qui avait fait cela mais après l’avoir contacté cela m’a découragé, elle a eu un pb et à abandonné….

    Je procède actuellement à la compilation du dernier serveur afin de pouvoir tester si, en compilant directement sur chaque serveur, cela conviendrai pour ce que nous cherchons.

    Vous comment l’utilisez vous ?
    L’utilisez vous en entreprise, si oui comment font vos users pour lancer leurs calculs sur les nodes (à cause de l’autre réseau fournit par DHCP) ?

    Merci d’avance.

  9. Si votre but est d’utiliser kerrighed sur 2 machines, vaut mieux patcher et compiler les kernels de vos deux serveurs avec kerrighed, l’utilisation d’un PXE est intéressant lorsque l’on doit avoir un réseaux complet (ou un nombre assez important) de nodes, par contre il faut que les nodes puissent partager certains dossier, sinon les processus ne migrerons pas (comme /var, /tmp, …) d’où l’intêret du NFSROOT et du PXE qui automatise le tout.

    Pour ma part, je n’ai jamais utilisé kerrighed en production, seulement en environnement de test, pour du cracking, mais depuis, je passe par ma carte graphique, beaucoup plus rapide pour ce genre de calcul. (Donc je n’ai pas de réel compétence en kerrighed, juste deux trois utilisations hasardeuses)

    Pour que le serveur NFS/DHCP, puisse profiter/partager des ressources, il faut qu’il soit « patché kerrighed » et déclaré comme node (après, selon la doc, il n’est pas recommandé d’utiliser le serveur comme node).

    Normalement, après avoir autorisé la migration des processus (voir commandes plus haut, ou la doc), les différents processus devraient être partagés entre les machines (après on peut choisir comment sont répartis les processus), un cat /proc/cpuinfo permet de vérifier si on partage les CPU entre les nodes, il faut aussi vérifier que la mémoire soit partagée, sinon les processus ne migrerons pas.

    Bonne chance 😉

  10. salut,

    Je tombe sur ton article très intéressant et surtout l’un des seuls ou la mise en place du cluster est bien guidée.
    Mon commentaire est le suivant: j’utilise beaucoup dvd-rip en mode cluster. Mais pour cela, je dois avoir des OS installés avec DD sur d’autres machines. j’avais essayé dvd-rip cluster live CD mais impossible pour l’heur d’avoir un truc qui fonctionne au poil (j’ai très souvent des erreurs et pas bien identifiées)
    je suis à la recherche d’une soluce alternative et la tienne pourrait être cette solution. Lorsque dvd-rip fonctionne avec la grappe, il génère autant de jobs qu’on a créé de noeuds. Donc autant de processus qu’un openmosix ou alors kerrighed pourrait faire migrer sur d’autres bécanes via le réseau.
    J’aimerai me lancer mais je ne sais pas si je vais droit dans le mur sans le savoir. Mon gros soucis, c’est la compilation du kernel. est-ce que la méthode que tu décris est compatible avec les kernels récents. pour préciser, vu que depuis ubuntu 10.04 le dossier /boot est complètement changé, est-ce que ta méthode de compilation seras utilisable dans ce cas. J’ai un niveau basique dans le monde de linux mais quand les tutos sont bien décris j’arrive à me démerder.
    Au final, si je réussis cette manipe, j’ai aussi des logiciels de calcul scientifique à faire tourner (modélisation moléculaire entre autre) et là si je peux allier boulot et passion de l’informatique, je serai plus que ravi !

    merci d’avance de ton aide
    ph

  11. Salut, si dvd-rip supporte l’utilisation de plusieurs processeurs (par thread, fork, …) ça devrais passer sans trop de souci.

    Kerrighed ne peut être compilé avec tout les kernels (d’autant plus que si tu est en x86_32 il te faut utiliser la 2.3.0, les versions supérieurs ne fonctionnant seulement en x86_64).
    La dernière version (3.0.0) est utilisable avec un kernel 2.6.30 (http://www.kerrighed.org/wiki/index.php/Main_Page).

    Le kernel en lui-même n’est pas compliqué à patcher/compiler/installer, si tu le compile en 2.6.30, mais je ne suis pas sûr que les derniers kernels soient supportés (rien qu’au patch ça devrait planter).

    Sinon, côté boot, je ne connais pas grub2, mais comme ce n’est qu’un chargeur de noyaux comme grub1, remplacer grub2 par grub1 ne devrait pas poser de souci, puisque la manière dont le kernel est chargé ne change pas (http://doc.ubuntu-fr.org/grub2#desinstallation). Néanmoins, il est surement possible d’utiliser ce système avec du grub2 (mes expériences avec grub2 ayant été assez « foireuse », je ne pourrais pas t’aider de ce côté).

  12. sakut,

    merci de tes infos. un kernel type 2.6.32.16 sera ok alors ? ou me faut il obligatoirement un 2.6.30.xx ?

    par ailleurs, comment puis-je « réinitialiser » ma carte eth ? j’ai essayé avec les commandes ifconfig et en désinstallant dhcp-serveur, mais rien n’y fait… Je vais continuer mon tour sur les forums mais si tu connais une ligne de commande magique…

  13. ok, j’ai re-configuré ma carte ethernet….
    je vais plus gentiment lire tout ce qui se dit sur kerrighed et je reprendrai ce tuto quand j’aurai toutes les cartes en main.
    @ bientôt, je ne manquerai pas de fauire un retour.

  14. Il est préférable d’utiliser un 2.6.30 (ou celui qui est fait pour la version de kerrighed que tu récupère). La version fournit dans ce tuto (par la commande svn …) fonctionne seulement avec une version 2.6.20 (la dernière version supportant les proc i386).

    Pour utiliser la dernière version, il faudra surement changer 2 ou 3 trucs en accord avec la doc officielle : http://www.kerrighed.org/wiki/index.php/UserDoc

Les commentaires sont fermés.