Le cluster Types génériques de clusters Clusters de calcul Ce type de cluster est destiné à permettre la mise en commun de ressources de calcul. Il est utilisé pour résoudre des problèmes calculatoires en distribuant les parties indépendantes du calcul sur les différents noeuds. Clusters de haute disponibilité Lorsque l'on met en place un cluster de ce type, on ne cherche pas la performance du calcul mais plutôt à assurer la disponibilité de la ressource, principalement en cas de panne de l'un des serveurs. La ressource peut aussi bien être un service (calculs numériques, applications, etc.) qu'un fichier. Ils sont basés sur des mécanismes de redondance et de détection des pannes. Clusters de répartition de charge Ces clusters sont typiquement utilisés pour les services web, mais ils peuvent tout aussi bien être utilisés dans d'autres domaines. Toutes les requêtes arrivent sur un même nœud du cluster, le seul visible de l'extérieur, mais la requête sera envoyée sur un autre. Le choix se fait en fonction de la charge de chacun des nœuds, de manière à traiter la requête le plus rapidement possible. Solutions Il existe énormément de solutions pour mettre en place un cluster. Il y en a pour les différents systèmes d'exploitation de Microsoft, pour les Mac, pour les Unix (propriétaires ou libres), etc. La plupart sont des solutions commerciales, clés en main avec support technique. Mais ces dernières ont un coût non négligeable dû aux prix des licences logiciels (souvent une licence par nœud est nécessaire) et au prix du support technique. Il existe aussi des solutions gratuites, à base de logiciels "libres". Le choix se fera donc en fonction du support technique voulu et du budget disponible. Il est possible de mettre en place un cluster à l'aide de n'importe quel système d'exploitation. En effet, il faut que chaque noeud puisse avoir accès à un système d'exploitation pour pouvoir fonctionner. Donc soit-on installe un système complet sur tous les noeuds, soit-on leur met à disposition une image qu'ils iront chercher à chaque lancement. Le cluster ne marche que grâce à une couche logiciel supplémentaire qui permet une communication efficace et l'échange des tâches entre les nœuds. Il suffit donc que cette couche soit présente pour que le système d'exploitation soit capable de faire fonctionner le cluster. Une catégorie particulière : les clusters Beowulf Les clusters Beowulf ont la particularité de fonctionner uniquement avec des logiciels dits "libres". Il existe deux classes de clusters Beowulf se distinguant par leur architecture matérielle : Classe I : Cette classe concerne les machines faites d'éléments matériels largement disponibles. Pour être considérer comme un cluster Beowulf de classe I, il faut que les nœuds soient composées de matériels que l'on peut trouver dans au moins quatre journaux de publicités de grande diffusion (test "Computer Shopper", du nom d'un magazine américain équivalent à "PC Direct" en France). L'avantage d'un tel système est la large diffusion du matériel ce qui permet une plus grande compatibilité avec Linux car basé sur des standards (Ethernet, SCSI, IDE, ...) mais les performances peuvent être limitées. Classe II : Cette classe concerne les machines qui ne passent pas le test "Computer Shopper". Elles sont souvent basées sur le matériel d'un seul vendeur et la compatibilité avec Linux dépend du développement de drivers pour Linux par ce vendeur. De plus cette solution peut être beaucoup plus chère que les solutions de classe I mais les performances meilleures. Conception d'un système à haute performance - Le cluster 1/4 Copyright © CETMEF 2004 Choix du matériel A cause de toutes les contraintes dues à la mise en commun des ressources, le choix du matériel est important, que ce soit pour le couple processeur / mémoire ou pour l'interface réseau. Tout d'abord, ce n'est pas une technique miracle, si on met quelques dizaines de Pentium de première génération dans un cluster, il ne faut pas s'attendre à avoir des performances dignes d'un unique processeur de dernière génération. Il faut aussi faire attention à l'équilibre entre les performances des processeurs et celui du réseau. En effet, plus les processeurs iront vite, plus le réseau de communication devra suivre. Sinon une grande partie de la puissance de calcul sera perdue lors de l'attente des communications et synchronisations. A l'inverse, mettre un réseau ultra rapide (et donc cher) avec des processeurs relativement lents, n'est pas un bon choix non plus, le réseau étant sous utilisé. Processeurs Là encore, il faut faire un compromis entre le coût par noeud et les performances. Comme souvent en informatique, il faut éviter de se précipiter sur la dernière technologie sortie. En générale, il vaut mieux attendre quelque temps pour la laisser mûrir et avoir plus de recul sur ses conséquences et ses réelles performances. Ceci est d'autant plus vrai pour les clusters de moyenne et de grande taille vu le nombre important de machines. Il est donc préférable de prendre une technologie de processeurs et de mémoires qui a déjà fait ses preuves et de proportionner sa puissance avec les applications destinées aux clusters. Le nombre de noeuds doit aussi être en rapport avec la taille du problème que l'on cherche à résoudre. Comme indiqué dans la partie sur le calcul parallèle et distribué, plus on ajoute de processeurs, plus on s'approche de la limite théorique du gain de performance. Mais, cette formule ne tient pas compte d'un phénomène important. Pour un problème donné, plus le nombre de noeuds sur lequel on le répartit augmente, plus la part de travail de chaque noeud est petite. Mais il arrive un moment où le temps perdu (pour le calcul) dans la distribution des données et dans le réassemblage du résultat devient trop important, ce qui peut entraîner une diminution les performances, contrairement à ce que l'on pourrait croire. Là encore, il n'y a pas de principes généraux, il faut étudier le problème et faire des essais pour trouver le compromis idéal. Le matériel du cluster doit être le plus homogène possible pour permettre une administration aisée. Pour assurer la portabilité des programmes, il convient de ne pas mélanger des architectures différentes (Power PC, PC 32bits, PC 64bits, Station Sparc, etc.). Mémoires En ce qui concerne la mémoire, il existe différents types, il faut donc faire attention au choix de la carte mère, car les différents types ne sont pas forcément compatibles entre eux. On peut citer par exemple la SDRAM, la SDRAM DDR, la SDRAM ECC, ... La SDRAM était la mémoire traditionnelle, mais elle est maintenant remplacée par la SDRAM DDR qui est capable de transférer des données à la fois sur le front montant et sur le front descendant du signal carré de l'horloge. D'où des débits théoriques deux fois plus rapides et des temps de latence plus faibles. Il y a aussi les mémoires dites "registred" ou "buffered". On trouve sur ces barrettes, des mémoires tampons qui permettent de mettre plus de 16 composants DRAM sur la même barrette et ainsi d'avoir la possibilité de mettre plus de 4 barrettes de mémoire sur une carte mère. Il est aussi possible de rajouter des méthodes de détection et de correction d'erreurs. C'est pourquoi, il existe des barrettes de mémoire avec un contrôle de parité, mais ce contrôle nécessite de la place, donc pour avoir la même place utilisable il faut avoir plus de place réelle (environ 12% de pertes), elles sont donc plus chères. De plus, en cas d'erreur détectée (ce système n'est capable de détecter qu'une erreur par octet), le système d'exploitation est averti et c'est à lui de réagir (arrêt de l'application en cours ou arrêt totale de la machine) mais il n'y a pas correction de l'erreur (car impossible avec un seul bit de parité). C'est pourquoi il existe un autre type de mémoire : la mémoire ECC (Error Control Correction) qui, en réservant une partie de la place mémoire disponible, permet grâce à un algorithme de correction d'erreurs de garantire l'intégrité des données présentes en mémoire. Bien sur, cela à un coût financier, un léger coût en terme de performance et toutes les cartes mères ne l'acceptent pas. Aujourd'hui la mémoire avec contrôle de parité n'est pratiquement plus utilisée au profit de la mémoire ECC. Et on trouve aussi de la mémoire SDRAM DDR ECC registred. Conception d'un système à haute performance - Le cluster 2/4 Copyright © CETMEF 2004 Interfaces réseau Il existe beaucoup de technologies réseaux (Token Ring, ATM, Ethernet, Myrinet, FrameRelay, X25...), mais deux sont principalement utilisées : Ethernet et Myrinet. La technologie Ethernet est largement utilisée dans les clusters à cause de sa maturité et de ses performances. De plus, le prix des équipements (carte d'interface, HUB, switch, ...) permet d'avoir un bon compromis entre le prix et les performances. Les débits habituels des équipements actuels sont de l'ordre de 100 Mbits/s (FastEthernet), ce qui est suffisant pour un cluster de petite taille. Mais les temps de latence (important pour les échanges de petits messages) sont conséquents. Donc, pour certaines applications, le Gigabit Ethernet sera préférable. Ce dernier ayant un temps de latence faible mais un coût financier plus important. L'autre technologie largement employée s'appelle Myrinet crée par la société Mircom, elle permet d'atteindre des débits de l'ordre de 2 Gbits/s et offre des temps de latence très faible. Les drivers sont disponibles pour un grand nombre de systèmes d'exploitation. Malheureusement, cette technologie a un coût nettement supérieur à la précédente. Autres contraintes Pour des systèmes de taille importante, il faut tenir compte d'autres facteurs. Il faut prévoir la place pour mettre l'ensemble des noeuds du cluster et prévoir l'infrastructure qui sera capable de le recevoir. Notamment l'alimentation en électricité et le passage des câbles électriques et réseaux. Mais il ne faut pas oublier que les composants électroniques de chaque noeud du cluster, principalement le processeur et l'alimentation, sont des sources de chaleur non négligeables surtout à pleine charge. Il faut donc veiller à évacuer correctement cette chaleur. En effet, les processeurs sont prévus pour fonctionner dans une certaine plage de température. Si elle est trop élevée, il y a des risques de pertes des performances (certains processeurs diminuent leur fréquence d'horloge), de blocages, voire d'endommager le matériel. Insertion du cluster dans le réseau Il y a plusieurs méthodes pour insérer le cluster dans un réseau existant. Souvent, le réseau entre les noeuds du cluster est d'un type particulier (plus rapide, utilisant une autre technologie que celle du réseau local où s'insèrera le cluster). Il convient donc d'isoler complètement les noeuds du cluster du réseau local, en mettant un switch dédié où tous les noeuds (et uniquement eux) viendront se raccorder. Ainsi les noeuds esclaves ne seront pas visibles de l'extérieur du cluster. Le lien vers le réseau local se fera par l'intermédiaire d'une deuxième interface réseau sur le noeud maître. On pourra mettre en place du NAT ( Network Address Translation ) si on souhaite que les noeuds aient un accès au réseau externe. Du point de vue du réseau local, le cluster, dans son ensemble, sera vu comme une machine unique. Cette méthode permet de concentrer les efforts de sécurisation du cluster uniquement au niveau du noeud maître. Comme les noeuds esclaves ne sont pas accessibles de l'extérieur on peut, dans ce cas, relâcher la sécurité sur les noeuds afin de faciliter l'administration. C'est la méthode la plus courante. Conception d'un système à haute performance - Le cluster 3/4 Copyright © CETMEF 2004 Dans certaines circonstances (par exemple, quand un grand nombre de tâches non parallèles doivent être lancées), on peut vouloir que les utilisateurs, au lieu de n'utiliser que le noeud maître, puissent avoir accès à l'ensemble des noeuds (pour des questions de répartition de charge et de facilité d'utilisation). Dans ce cas, tout en gardant le réseau spécifique au cluster, il faut rendre accessible au réseau local l'ensemble (ou une partie seulement) des noeuds. Mais il faut alors faire attention à la sécurisation de chaque noeud tout en laissant possible l'administration à distance. Programmes et bibliothèques nécessaire Pour assurer l'exploitation du cluster, il est nécessaire d'installer les programmes et les bibliothèques suivants (cette liste n'est pas exhaustive et elle ne contient que des exemples issus de projets "libres") : • • • • • Un bibliothèque de programmation par passages de messages (MPICH, PVM) Un mécanisme de répartition de processus et de charge (OpenPBS, clusterit, gexec) Des outils de monitoring pour s'assurer de la bonne marche du cluster (Ganglia) Des outils d'administration d'un groupe de machines (pconsole, ka-run) Des mécanismes d'échange de fichiers (pcp) On peut, bien sur, adapter cette liste à l'utilisation voulue du cluster Installation et maintenance L'installation de ces logiciels sur une machine particulière ne pose généralement pas de problème. Mais dans le cas d'un cluster, ce n'est pas cette difficulté qui faut prendre en considération, mais la répétitivité de la tâche d'installation et les opérations nécessaires pour la maintenance. En effet, un cluster est souvent composé de plusieurs dizaines de machines qui possèdent chacune leur propre système d'exploitation. C'est pourquoi l'administration d'un cluster sans des outils adéquats serait inefficace. Pour cela, on peut s'appuyer sur les solutions commerciales existantes. Il est également possible de développer ses propres outils, mais il existe un grand nombre de projets de cluster ayant déjà rencontré ce problème et pour lesquels des outils ont été développés et mis à la disposition de tous. Conception d'un système à haute performance - Le cluster 4/4 Copyright © CETMEF 2004