Mise en place d`un cluster via OpenMosix sous Linux
Transcription
Mise en place d`un cluster via OpenMosix sous Linux
Résumé Cet article vous guidera dans l'installation et l'administration d'un cluster OpenMosix. OpenMosix est un patch du noyau Linux vous permettant la migration des processus entre plusieurs ordinateurs au sein d'un réseau en LAN. Il s'agit là d'une solution de clustering simple et performante compte tenu de son coût et des types de machines concernés. 1. NOTIONS DE BASES : Avant de pouvoir découvrir ce qu’est OpenMosix, nous allons définir succinctement ce qu’est un Cluster, car il y a beaucoup à dire à ce sujet. Et je pense qu’il est nécessaire de posséder certaines notions avant de démarrer notre entreprise. 1.1. Qu’est ce qu’un Cluster ? Tout d’abord, le nom « cluster » (ou grappe en français) est un terme attaché à un réseau. Imaginez-vous une grappe de raisin, à première vue, rien à voir avec un anneau de calcul ! Maintenant, prenez la tige comme étant la backbone et les fruits comme étant l’un des ordinateurs (nœud ou node) de cette grappe, vous obtenez donc un système (grappe ou cluster) relié par de multiples tiges qui correspondent à leur tour aux câbles réseaux (couche physique) du système. Le but de ce Cluster de calcul est de permettre des calculs grâce à l’intermédiaire de plusieurs machines afin d’augmenter les performances du système ou afin d’équilibrer les charges CPU entre d’un nœuds en redirigeant certains processus vers un autre noeud. Le cluster est donc un ensemble d’ordinateurs qui vous permettrons de partager leurs ressources matérielles. Il existe plusieurs types de clusters. OpenMosix s’apparente à un cluster loadbalancing dû à l’algorithme de répartition de charges. Cet algorithme permet un équilibre des charges en fonction de l'occupation des processeurs. 1.2. Comment fonctionne OpenMosix ? Le but d’un anneau de calcul est comme son nom l’indique de calculer une information par l’intermédiaire de migration de processus dans le cas d’OpenMosix. Rappelons qu’un processus est une tache exécutée par le noyau d’un système d’exploitation, dans notre cas, le noyau Linux. Les performances d’un ordinateur sont en partie dues au temps que met un processeur à terminer les threads d’un processus. L’avantage des ordinateurs SMP est que les threads des processus sont répartis sur plusieurs processeurs d’une même machine, divisant donc le temps d'execution de la tâche par le nombre de processeurs. L’Hyper-threading possède aussi un certain avantage à cela, mais cela peut ne pas suffire, comme le montre ce site : http://www.top500.org les cluster ont aucune limite en terme de puissance d'où la nécessitée et l'avantage de créer un anneau de calcul avec des machines SMP, seulement leur coût est élevé ! 1 Le plus gros cluster est actuellement Earth Simulator Center : Regardez ses caractéristiques et vous comprendrez que vous votre merveilleux PC n’est même pas l’égale au centième d’un supercalculateur ! http://www.es.jamstec.go.jp/esc/eng/Hardware/pn.html Pourquoi utiliser un anneau de calcul ? Imaginez-vous six conversions d’un format audio quelconque. Le nombre de processus envoyés en même temps au processeur sera découpé en thread par le système d’exploitation (et heureusement, étant donné qu'un processeur ne peut calculer qu’un thread à la fois, le système d’exploitation découpe celui-ci en threads afin que le noyau puisse vous donner l’impression d’exécuter plusieurs tâches en même temps alors qu’en réalité il exécute un thread à la fois. Heureusement car si vous ne pouviez voir une vidéo en ayant le son en même temps, cela semblerait plutôt embarrassant) ces 6 processus prendront donc 6 fois le temps d’exécution d’un seul processus en supposant que la taille des fichier soient identiques. Dans un cluster de 6 noeuds, si les ressources sont équivalentes, le temps théorique de la conversion de ces 6 fichiers sera divisé par 6. OpenMosix fonctionne de cette façon. Lors du lancement des 6 conversions sur un nœuds, l’algorithme d’équilibre des charges redirigera ces processus lourds vers les machines les plus puissantes ou les plus libres du cluster afin d’améliorer la vitesse d’exécution de la totalité des tâches. De plus, il vous est possible de gérer vous-même la migration des processus, ce qui présente un certain avantage si vous désirez occuper votre poste à d’autres fins. OpenMosix met à disposition pour cela une pléthore de programmes 1.3. Limites et problèmes rencontrés : OpenMosix fonctionne différemment de certains clusters de serveurs. Tout d’abord, les ordinateurs sont identifiés comme étant plusieurs ordinateurs (plusieurs IP) contrairement à certains cluster beaucoup plus performants. La mémoire n’est pas partagée. Il ne peut être migré que certains processus appelés lourds (qui nécessitent tout simplement un temps de calcul important) du fait des problèmes de latences réseaux qui sont beaucoup plus importantes que les latences entre les bus d’un ordinateur. Un petit processus migré mettra plus de temps à être terminé qu'un gros processus migré sur une machine pouvant l'exécuter plus rapidement du fait que le réseau entraîne une latence lors de la transmission de celui-ci. Le plus grand problème en terme de sécurité est due à l’utilisation du démon omdiscd. En effet celui-ci met à jour une carte des nœuds openmosix de manière automatique ce qui fait que n’importe quel administrateur d’un ordinateur, est aussi administrateur du réseau et cela est du à deux choses : le système MFS (Mosix File System) vous donne accès à tt les nœuds en montant chaque racine dans le répertoire monter de type MFS. Ex : /mnt/mfs/num_id_du_noeud/ Et le fait de manière automatique grâce à omdiscd qui met à jour le mappage du cluster. N’importe quel administrateur possède les droits de toutes les machines. Il est donc recommandé de limiter l’accès physique au réseau. 2 Après ces quelques explications théoriques, vous pouvez dès à présent débuter l’installation de votre cluster OpenMosix. 2. MISE EN PLACE DU CLUSTER OPEN MOSIX : 2.1. Pré requis : Au moins 2 PC feront l’affaire, prévoyez sinon un bon switch et un réseau en 100Mbits ça vaut mieux, à 10Mbits la latence sera tellement forte que le système ne sera pas efficace. Voilà pour les grandes lignes, le reste c’est un O.S. Linux n’importe quel distribution, personnellement j’utilise Gentoo. Il n’y a aucun pré requis de package si ce n’est de posséder un noyau 2.4.24 (conseillé) (il n’est pas encore possible d’utiliser un 2.6) pour appliquer le patch openmosix. Donc il suffit des sources du kernel 2.4.24 et de quoi le compiler. Cependant vous aurez par la suite besoin d’autres librairies pour compiler les outils de gestion et de monitoring. (libjpeg, glibc, etc.) 2.2. Installation : Dans mon cas, j'installe un cluster sous gentoo, le tout sur un réseau avec un serveur DHCP, la reconnaissance des nodes se fait donc automatiquement grâce au démon omdiscd. Téléchargement : Au moment où cet article est écrit, le Noyau patché OpenMosix est le noyau linux2.4.24 Il est disponible sur le site http://openmosix.sourceforge.net Téléchargez la dernière version du patch d’OpenMosix et placez-le dans le répertoire des sources du noyau. (Ex : /usr/src/linux-2.4.24) N’oubliez pas de vous mettre en root. Sur n’importe quel distribution : # mv openMosix-2.4.24.gz /usr/src/linux-2.4.24 # cd /usr/src/linux-2.4.24 # zcat openMosix-2.4.24.gz | patch -Np1 Si vous n’utilisez pas zcat : # mv /root/openMosix-2.4.24.gz /usr/src/linux-2.4.24 # cd /usr/src/linux-2.4.24 # gunzip openMosix-2.4.24.gz # cat openMosix-2.4.24 | patch -Np1 Sur Gentoo : Pour emerger les sources de OpenMosix : # emerge openmosix-sources 3 1.2. Configuration du noyau : # cd /usr/src/linux # make menuconfig Vous devez mettre les options suivantes (à ajoutez à votre configuration du noyau courantes) : 9 OpenMosix process migration : Migration des processus du cluster. 9 Stricter security on OpenMosix ports 9 Level of process-identify disclosure (0-3) 9 OpenMosix File System : Permet l'utilisation des système de fichier oMFS ou MFS (Mosix File system) nous verrons l'utilité de ce système de fichier plus loin. 9 Prompt for development and/or incomplete code/drivers : Active des options nécessaires à la configuration du noyau. 4 9 Packet socket 9 TCP/IP networking 9 IP: multicasting 9 /proc files system support : permet d’accéder au noyau sous forme de fichier système dans le répertoire /proc. 9 /dev file system support (EXPERIMENTAL) 9 Automatically mount at boot 5 Une fois la configuration terminée, il ne reste plus qu’à compiler notre nouveau noyau : #make dep clean bzImage modules modules_install # cp arch/i386/boot/bzImage /boot/bzImage-OMosix-2.4.24 Puis configurer et mettre à jour son boot loader : Lilo : # vi /etc/lilo.conf Rajoutez à la fin ceci (remplacez X par votre partition correspondant à la racine /) : image = /boot/bzImage-OMosix-2.4.24 root= /dev/hdaX label = OpenMosix read-only N’oubliez pas de monter votre partition boot ! Certaines distributions mette la partition boot dans le fstab en noauto, donc avant de taper cette commande montez la partition ! mount /boot # lilo (ou /sbin/lilo) 6 Installation des outils OpenMosix : La suite de programmes OpenMosix est assez complète. Elle permet de gérer le cluster. Cette suite de programmes se trouve dans l'archive openmosix-tools. Pour obtenir openmosix-tools, téléchargez les packages ou le sources sur le lien suivant : http://sourceforge.net/project/showfiles.php?group_id=46729 Sur une Gentoo, il suffit d'emerger openmosix-user. 2.3. Configuration d’un nœud : Mise en place de Mosix File System (MFS) : Ce Système de fichier supporté par votre nouveau noyau permet d'accéder à tout vos noeuds sur chaque ordinateurs et ce, de manière identique sur chaque noeud. Vous devez donc créer un fichier dans lequel vous monterez vos noeuds : # mkdir /mfs Editez le fichier table d’allocation des système de fichier : # vi /etc/fstab Puis ajoutez la ligne : none /mfs mfs noauto,dfsa=1 0 0 Enfin, montez le répertoire : # mount /mfs L'option noauto n'est pas obligatoire seulement au cas ou vous utiliser un noyau autre que openmosix, vous ne pourrez pas monter ce système de fichier (il ne sera pas reconnu pas ce noyau) De plus, ce système de fichier vous donne accès à l’ensemble des nœuds des racines du système avec les privilèges que sur votre machine !!! Il suffit donc d’avoir accès au compte administrateur d’un nœud pour en contrôler l’ensemble. Ne laissez donc pas votre MFS en auto ;-) Voilà, vous avez terminé l'installation d'OpenMosix, il ne vous reste plus qu'à maitriser ses outils. 3. Administration d’OpenMosix 3.1. Démarrage d’OpenMosix : Pour gérer le démarrage de OpenMosix et l'Arrêt : # /etc/init.d/openmosix start # /etc/init.d/openmosix stop # /etc/init.d/openmosix status La manière la plus facile de configurer openmosix au démarrage et à l'arrêt est de rajouter dans le rc.local la commande : 7 /sbin/setpe -W -f /etc./hpc.map Pour Gentoo : #rc-update add openmosix default En lisant le script openmosix : #!/sbin/runscript # # Distribué sous les termez de la GNU General Public License V2 depend() { need net } stop() { ebegin "Stopping openMosix" # Tout les processus sont desactivé grace à la commande expel einfo "openMosix: " mosctl expel setpe -off killall -TERM omdiscd &> /dev/null rm -f /var/lock/subsys/mosix eend } start() { # Si vous n’avez pas activez l’option OpenMosix dans le noyau : exit # /proc/hpc est le repertoire du noyau lié au cluster if [ ! -d /proc/hpc ]; then einfo "This is not an openMosix kernel, configuration aborted" exit fi # Cherche le mapfile d’OpenMosix AUTODISC=0 if [ -f /etc/openmosix.map ]; then OMOSIX_MAP=/etc/openmosix.map elif [ -f /etc/mosix.map ]; then OMOSIX_MAP=/etc/mosix.map einfo "openMosix map-file /etc/mosix.map depreciated: Rename to /etc/openmosix.map" elif [ -f /etc/hpc.map ]; then OMOSIX_MAP=/etc/hpc.map einfo "openMosix map-file /etc/hpc.map depreciated: Rename to /etc/openmosix.map" else AUTODISC=1 fi OMnode="" if [ -f /etc/openmosix/om-node-num ] then OMnode="-p $(< /etc/openmosix/om-node-num)" fi # Check the map-file for sanity if [ $AUTODISC -eq 0 ]; then setpe $OMnode -c -f $OMOSIX_MAP &> /dev/null if [ ! $? -eq 0 ]; then einfo "openMosix: Invalid configuration in map-file $OMOSIX_MAP, using autodiscovery" 8 AUTODISC=1 fi fi # Source the configuration from /etc/openmosix/openmosix.config # This file would be a good place to force autodiscovery by setting AUTODISC=1 [ -f /etc./openmosix/openmosix.config ] && . /etc./openmosix/openmosix.config # Make sure we have omdiscd installed if [ $AUTODISC -eq 1 ]; then if [ ! -x `which omdiscd` ]; then eerror "openMosix: omdiscd not installed, exiting" eend fi fi ebegin "Initializing openMosix" # The variables $OVERHEADS, $MFSCOSTS, $MYOMID, $MOSGATES and $AUTODISCIF # can be set to desired values in /etc/openmosix/openmosix.config [ $OVERHEADS ] && echo $OVERHEADS > /proc/hpc/admin/overheads [ $MFSCOSTS ] && echo $MFSCOSTS > /proc/hpc/admin/mfscosts if [ $AUTODISC -eq 0 ]; then # Static configuration via $OMOSIX_MAP SETPE_OPTIONS="" [ $MYOMID ] && SETPE_OPTIONS="$SETPE_OPTIONS -p $MYOMID" [ $MOSGATES ] && SETPE_OPTIONS="$SETPE_OPTIONS -g $MOSGATES" setpe $OMnode -W $SETPE_OPTIONS -f $OMOSIX_MAP else # Configurate openMosix with the omdiscd OMDISCD_OPTIONS="" [ $AUTODISCIF ] && OMDISCD_OPTIONS="$OMDISCD_OPTIONS $AUTODISCIF" omdiscd $OMDISCD_OPTIONS fi [ $? -eq 0 ] && touch /var/lock/subsys/openmosix mosctl noblock 1>/dev/null 2>&1 eend } -i On peut remarquer que le script utilise les programmes setpe, mosctl à l’arrêt du système. Nous verrons plus loin leurs fonctions importantes dans l’administration du cluster. La lecture de la map s’effectuait auparavant dans le fichier /etc/hpc.map, puis /etc/mosix.map et enfin maintenant sur /etc/openmosix.map. 3.2. Identification des noeuds : Afin que les noeuds puissent s’identifier à l’anneau, il est nécessaire qu’ils déclarent leurs adresses IP correspondantes ainsi qu’un numéro d’identification (ID) du noeud et ses caractéristiques comme le nombre de processeur sur la machine. Pour cela, il existe deux méthodes : La méthode empirique (à la main ;-)) et la méthode automatique (avec un démon) : 9 o Configuration du fichier /etc/openmosix.map : Depuis les dernières versions ce fichier se nomme openmosix.map, ne vous étonnez pas s’il possède un autre nom. Chaque ordinateur doit configurer un fichier contenant le numéro de chaque noeud du cluster ainsi que leur IP et le nombre de processeur qu’il contient. De la manière suivante : Id IP Nb_de_Processeurs Par exemple : 1 172 .168.100.34 2 Cette méthode n’est malheureusement pas pratique. Bien que l’on soit sur de contrôler le « mappage » du cluster et donc sa sécurité, cette technique nécessite tout d’abord un réseau possédant des nœuds fixe ainsi qu’une grande patience, car il faut avant tout reproduire, mettre à jour la openmosixmap sur chaque nœud, à chaque fois qu’un nouveau nœud apparaît. C’est pourquoi par défaut, OpenMosix est configuré par une démon de découverte automatique : OMDISCD (OpenMosix autoDISCover Daemon) : A chaque intégration d’un nouveau nœud, Omdiscd envoie une requête au réseaux afin d’obtenir en réponse le « mappage » du cluster. Il est ainsi intégré en se déclarant automatiquement auprès de l’anneau et mets à jour le mappage de celui-ci. Ce démon se trouve être très efficace pour la mise en place d’un anneau de calcul devant être opérationnel en peu de temps ou dans les cas ou les calculs s’effectuent dans une écoles ou dans une université possédant des IP dynamique… L'utilisation de Omdiscd ne nécessite pas de configuration particulière dans le cas d'un cluster intégré à un réseau possédant un serveur DHCP 3.3. Les programmes OpenMosix : En ligne de commande : ¾cpujob : Donne a un processus une partie définie de la charge de CPU ¾iojob : permet de limiter sur le réseaux les entrées et sorties accorder au processus ¾joingroup : Permet de joindre un processus à un group. (utile pour la commande migrategroup) ¾migrate : Pour migrer les processus en cours vers un nœuds ¾migrategroup : Pour migrer un groupe ¾mosmon : il s'agit d'un moniteur openmosix permettant de visionner l'état de tous les noeuds du cluster (CPU, mémoire) ¾mosctl : Programme important dans l'administration d'OpenMosix : Il permet de gérer l'administration d'un noeud au niveau du noyau. (cf. section administration) Les options de mosctl sont :stay, block, noblock, quiet, noquiet, nomfs, mfs, expel, bring, gettune, getdecay. 10 ¾mosrun : Mosrun vous permet de forcer la migration d'un processus, de préciser un noeud de destination ou un groupe de noeuds particulier. ex : mosrun -12 emerge gkrellm La compilation s'effectue sur le noeud ayant pour ID 12. Dans notre cas, la charge donnée pour le processus exécutant la ligne possède une charge de moins de 10% dans notre exemple, la charge du noeuds 12 possède une charge d'environ 90%. ¾mps est l'équivalent de la commande ps pour un cluster OM. Il donne en plus l’ID du nœud ou le processus est migré. ¾mtop est l'équivalent de la commande top pour OM. Une colonne est ajoutée pour donner le numéro d'ID du noeuds où le processus a été migré. ¾nomig : Lance une commande sur le noeud qui interdit toute migration. ¾Resetgroup : supprime le groupe crée ¾runhome : équivalent à la commande mosrun -h : il permet de lancer et de bloquer le processus en local. ¾runon permet de lancer et de bloquer le processus sur un noeud OpenMosix particulier. ¾Setpe : l’option -r (read) permet de lire la configuration actuelle du cluster (la map) ¾-off déconnecte le noeuds du réseau. Le script /etc/init.d/openmosix est muni de mosctl expel afin de renvoyer les processus traités sur le noeuds (pour éviter de perdre les données et de setpe -off pour le shutdown d'openmosix. ¾Cette procédure est relativement importante si vous ne voulez pas perdre les processus ! ¾showmap : montre la "carte" du cluster. Dans l'ordre : le numéro hexadécimal de la node, l'IP et le nombre de processeurs. En voici un exemple : root@localhost / # showmap My Node-Id: 0x6417 Base Node-Id Address Count ------------ ---------------- ----0x6417 172.16.100.23 1 0x640c 172.16.100.12 1 ¾showgroup : montre les groupe de processus (qui ont été crées par la commande joingroup) Toutes ces commandes sont amplement suffisantes d'OpenMosix. Elles sont relativement simples mais complètes ! pour l'adminstration Openmosixview : Openmosixview est une interface graphique rassemblant la totalité des programmes précédents et permettant une gestion totale et optimale du cluster. Lancer en root, on obtient quelques options supplémentaires (mémoire de tout les nœuds et nombre de processeurs sur chaque nœud). 11 La gestion est très pratique et permet de gérer votre cluster de migrer des processus en quelques cliques. Cependant le rafraîchissement du la charge des CPU et des mémoires de chaque nœud peut poser certains problèmes arrivé à un certains nombre de nœuds. En cliquant sur l’IP d’un des nœuds, on obtient la fenêtre suivante : On retrouve ici, l’option auto migration (/proc/hpc/admin/stay), le démarrage ou l’arrête du nœuds distant etc… Le tout en mode click-click ;-). Jetez un oeil sur l'administration avancé pour comprendre votre nouveau noyau ! 3.4. Administration avancé de OpenMosix : L’administrateur peut configurer et optimiser le cluster en utilisant openmosix user space tools. Cela consiste à modifier les valeurs des fichiers de configuration présent dans /proc/hpc/admin. Quelques exemples : # echo 1 > /proc/hpc/admin/block Cette commande refuse l’arrivé de processus “émigré”. 12 # echo 1 > /proc/hpc/admin/bring Ramène tout les processus migrés de la node. Les programmes définis précédemment interfère en réalité dans le noyau, grace à l’interface du noyau dans le répertoire /proc/hpc/admin : On active ainsi toutes ses fonctions en donnant la valeur 1 à leur fichier de configuration. config : fichier principale de configuration block : permet / interdit l'arriver de processus distant bring : ramène tout les processus migrés dfsalinks : liste les lien dfsa en cours expel : envoi les processus home gateways : nombre maximum de passerelles lstay : liste des processus qui doivent pas migrer mospe : contient les ID des noeuds OpenMosix nomfs : Activer/Desactiver MFS overheads : pour optimiser quiet : stopper la collecte des informations d’équilibre des charges decay-interval: définit l’intervalle de rafraîchissement du load-balancing speed : définit une vitesse de nœud. Un cluster possédant un nombre plus faible aura une priorité d’« immigration » de processus plus important que les autres nœuds. Stay : activer/désactiver la migration automatique des processus Vous voilà fin prêt à maitriser votre merveilleux cluster ! Il ne vous reste plus qu'à convertir, compiler, etc. afin de vérifier que tout est opérationnel ! Si openmosixview présente une adresse IP en rouge, celà signifie que ce noeud est tombé, il ne vous reste qu'à cerner le problème, quitte a redémarrer le scriot /etc/init.d/openmosix du noeud. Pour plus d'informations, jetez un oeil sur le HOWTO openmosix, celui-ci n'existant qu'en anglais. 13 Conclusion Vous voilà fin prêt à gérer votre cluster. Mais résumons les caractéristiques de votre anneau de calcul OpenMosix : Votre anneau de calcul vous permet de réaliser des gros calculs. Les outils d’administrations vous permettent de gérer simplement la migration de vos processus. Les petites tâches ne vous permettent pas de rentabiliser le temps d’exécution de celles-ci sur les autres nœuds. La sécurité des données n’est pas possible lançant tel quel le démon omdiscd du fait que celui-ci met à jour automatiquement la map du système et accepte donc n’importe quel machine et donc n’importe quel administrateur en tant qu'administrateur du cluster. Il s’agit là des caractéristiques classiques d’un anneau de calcul très abouti. L’utilisation de Linux, vous permet de faire tourner OpenMosix sur des machines diverses et variées, vous permettant donc d’exploiter des machines dépassées par les ordinateurs actuelles. Pour cela il existe divers possibilités dont celle à retenir est LSTP. OpenMosix a été porté sur des consoles de jeux (Playstation 2, Xbox, etc.) à des fins expérimentales et on montrés une améliorations des performances allant jusqu’à 20% des capacités normales. De plus, l’équipe du projet OpenMosix travaille sur des améliorations tout à fait intéressantes en tentant de contourner problèmes rencontrés sur la migration des processus légers. 14
Documents pareils
Le rapport du projet
Exécuter la commande Make MenuConfig.
Copier le fichier system.map (généré par le Make MenuConfig dans le répertoire
linux) dans le répertoire /boot
Créer les dépendances des modules : Make dep
Exé...