Nous créons un système de déploiement d'applications à l'aide de Docker. Calcul parallèle sur Raspberry Pi Caractéristiques techniques du Cluster HAT

Aujourd'hui, nous allons parler d'un outil merveilleux, à savoir le système de déploiement d'applications conteneurisées - Docker. Ce sujet concerne directement les développeurs de Raspberry Pi. Bienvenue au chat.

1. Qu'est-ce que Docker

Peut-être que tout le monde n’est pas familier avec les systèmes de déploiement. Alors je vais vous expliquer.

Parlant du tout dans un langage simple, Docker est un système qui permet de configurer une application une fois sur une machine, de sauvegarder son environnement (non seulement la configuration, mais aussi l'environnement) et ses dépendances, puis de la distribuer déjà configurée sous forme de conteneur. Ceux. Vous n'aurez besoin de rien d'autre qu'une image pour le déploiement.

De plus, vous pouvez voir les mots « Docker » et « virtualisation » quelque part dans la même phrase, cela ne signifie pas que Docker émule le processeur, la mémoire, le noyau du système d'exploitation, etc., la virtualisation se produit au niveau du noyau, c'est-à-dire tous les processus qu'il « virtualise » sont de véritables processus de votre système d'exploitation.

Comme vous l’avez peut-être deviné, vous pouvez proposer de nombreuses applications. Par exemple, vous allez créer un cluster Raspberry Pi qui exploitera des bitcoins (d'ailleurs, ce n'est pas rentable de nos jours) et sur chacune des 1000 cartes de votre arsenal vous devez installer et configurer le même logiciel. Oui, vous pouvez compiler votre propre image du système d'exploitation, mais d'une part, ce n'est pas si rapide, et d'autre part, ce n'est pas si flexible (la configuration a un peu changé et vous devez reconstruire l'intégralité de l'image du système d'exploitation).

Ou, par exemple, vous souhaitez distribuer votre application pour plusieurs modifications d'ordinateurs monocarte : Rpi1, Rpi2, O-droid, Rpi3. Partout, la structure de l'application est la même, le code exécutable est le même, mais la configuration est différente. Vous pouvez créer 3.4 manuels d'installation et de configuration distincts pour les utilisateurs, puis vous en aurez assez et vous créerez N configurations différentes, déjà configurées, de votre application pour les plateformes les plus populaires et les distribuerez sous forme de conteneurs.

C'est ce que j'ai trouvé à l'improviste. En fait, Docker est un outil très, très puissant ; il existe un nombre illimité d'applications pour cela.

Le plus grand avantage est que vous pouvez déployer le conteneur sur absolument n'importe quelle autre machine sur laquelle Docker est installé.

Bon, la partie introductive a été un peu trop longue. Nous allons passer aux choses sérieuses.

2.Installation

Si vous installez un système à partir de zéro, il peut être plus rationnel d'utiliser une image prête à l'emploi de l'équipe Hypriot.

La plupart des utilisateurs ne réinstalleront pas le système car ils souhaitent essayer Docker. Par conséquent, vous trouverez ci-dessous le processus d’installation sur Raspbian.

0. Si vous possédez une ancienne version de Raspbian, mettez à jour vers la nouvelle car Depuis Debian 8, la prise en charge du noyau Docker est apparue immédiatement :

$ sudo sed -i "s/wheezy/jessie/" /etc/apt/sources.list $ sudo sed -i "s/wheezy/jessie/" /etc/apt/sources.list.d/raspi.list $ sudo apt-get update && sudo apt-get -y upgrade # répondez "y" aux questions à venir $ sudo sudo apt-get -y dist-upgrade # répondez "y" aux questions à venir $ sudo init 6 $ sudo apt-get -y suppression automatique $ sudo apt-get -y purge $(dpkg -l | awk "/^rc/ ( print $2 )") $ sudo init 6

1. Il n'y a pas de manuel sur le site officiel décrivant l'installation sur Raspberry Pi, mais l'équipe Hypriot a fait un excellent travail en automatisant l'installation de Docker sur Raspberry. Profitons des fruits de leur travail :

$ git clone https://github.com/hypriot/rpi-docker-builder.git $ cd rpi-docker-builder $ sudo sh build.sh $ sudo sh run-builder.sh

Après cela, vous trouverez le package d'installation de Docker dans le répertoire ./dist/docker-hypriot_1.10.3-1_armhf.deb. Il s'agit de la dernière version pour le moment.

Les paresseux peuvent utiliser les packages prêts à l'emploi d'Hypriot :

$ curl -sSL http://downloads.hypriot.com/docker-hypriot_1.10.3-1_armhf.deb >/tmp/docker-hypriot_1.10.3-1_armhf.deb $ sudo dpkg -i /tmp/docker-hypriot_1.10.3- 1_armhf.deb $ rm -f /tmp/docker-hypriot_1.10.3-1_armhf.deb $ sudo sh -c "usermod -aG docker $SUDO_USER" $ sudo systemctl activer docker.service

2. Vérification des fonctionnalités

Informations sur le docker Sudo

Version Docker

Affichera des informations sur la version, le nombre de conteneurs, la version du noyau, les pilotes, etc.

3. Désormais, toute application disponible en tant que conteneur Docker pour ARM peut être installée à l'aide de Docker exécuté sur Raspberry Pi.

La commande suivante téléchargera et déploiera un petit serveur web déjà configuré :

Docker run -d -p 80:80 hypriot/rpi-busybox-httpd

La liste des conteneurs peut être consultée en utilisant

DockerPS

3.Utilisation

Vous pouvez bien sûr décrire les commandes principales etc., mais pour cela il vaut mieux se référer à la documentation.

Par conséquent, nous allons regarder un exemple.

Supposons que nous souhaitions créer un conteneur dans lequel il y aura un serveur Web NGinx et PHP 5.4.

Au début, les instructions pour assembler l'image sont écrites. La liste des fichiers avec commentaires est donnée ci-dessous.

src : build/backend/Dockerfile

# Nous utilisons Ubuntu 14.04 LTS FROM ubuntu:14.04 comme conteneur # Basculez Ubuntu en mode non interactif - pour éviter les requêtes inutiles ENV DEBIAN_FRONTEND noninteractive # Installez les paramètres régionaux RUN locale-gen ru_RU.UTF-8 && dpkg-reconfigure locales # Ajoutez le référentiels nécessaires et packages d'installation RUN apt-get install -y software-properties-common RUN add-apt-repository -y ppa:ondrej/php5-5.6 RUN add-apt-repository -y ppa:nginx/stable RUN sudo apt-key adv --keyserver keyserver .ubuntu.com --recv-keys 4F4EA0AAE5267A6C RUN apt-get update RUN apt-get update -y RUN apt-get install -y wget curl php5-fpm php5-mysql php5-gd php5-curl php- pear php-apc php5 -mcrypt php5-imagick php5-memcache superviseur nginx # Ajouter une description de l'hôte virtuel ADD iloverpi.ru /etc/nginx/sites-enabled/iloverpi.ru # Désactiver le mode démon pour Nginx (puisque nous allons exécutez-le nous-mêmes) RUN echo "\ ndaemon off;" >> /etc/nginx/nginx.conf # Désactiver le mode démon pour php-fpm RUN sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm /php-fpm.conf # Ajouter une configuration de superviseur (description des processus que nous voulons voir s'exécuter sur ce conteneur) ADD Supervisord.conf /etc/supervisor/conf.d/supervisord.conf # Déclarer les répertoires auxquels nous allons connecter VOLUME [" /var/www"] # Déclarer quel port ce conteneur diffusera EXPOSE 80 # Lancer le superviseur CMD ["/usr/bin/supervisord"]

src : build/backend/supervisord.conf

Nodaemon=true loglevel=debug command=/usr/sbin/nginx autorestart=true command=/usr/sbin/php5-fpm autorestart=true

Liste complète les commandes avec explications sont disponibles sur le lien.

Maintenant, en utilisant ces instructions, nous assemblons l'image d'iloverpi.ru.

Sudo docker build -t iloverpi.ru ~/PATH_TO_DOCKERFILE_DIR

L'image iloverpi.ru doit être lancée, créant ainsi un conteneur. De plus, vous devez connecter le port hôte 80 au port conteneur 80. Pour plus de commodité et d'exhaustivité de l'exemple, nous lierons également /var/www de l'hôte et /var/www du conteneur.

$ sudo docker run -v /var/www:/var/www -p 80:80 -m -t iloverpi.ru

Assurez-vous que le conteneur est en cours d'exécution :

Docker sudo ps | grep "iloverpi.ru"

Le nom du conteneur n'a pas été spécifié explicitement, il a donc reçu un nom automatique avec lequel nous pouvons interagir avec lui.

Ma sortie de la commande précédente ressemble à ceci :

D8429cc192c0 astgo.ru/dev:latest "/usr/bin/supervisor il y a 20 secondes Jusqu'à 19 secondes 0.0.0.0:80->80/tcp conteneur23

Ici "container23" est le nom du conteneur.

Pour interagir avec la ligne de commande du conteneur, il existe une commande

Sudo docker exec -i -t conteneur23 bash

Après cela, l'invite de ligne de commande normale deviendra disponible. Ce sera la console de notre conteneur.

Nous avons donc assemblé et déployé notre conteneur, et appris à interagir avec lui.

L'article s'est avéré long, mais j'espère que vous l'avez trouvé intéressant. Jusqu'à la prochaine fois.

Raspberry Pi 3 peut être qualifié d'ordinateur véritablement universel. Bien sûr, vous ne pourrez pas extraire de Bitcoin dessus, et vous ne pourrez pas jouer à des jeux avec les graphismes des dernières générations de consoles, mais il gérera bien beaucoup d’autres choses. Ci-dessous, les applications principales et les plus populaires du Raspberry Pi 3 seront abordées.

Capacités multimédia du Raspberry Pi 3

Les capacités multimédia du Raspberry Pi 3 sont très grandes. En particulier, à partir du Raspberry, vous pouvez réaliser un centre multimédia, une console de jeux, voire tout à la fois. De ce fait, avec cette carte monocarte vous pourrez accéder aux catégories de divertissement suivantes sur votre téléviseur doté d'un port HDMI :

  • vidéo dans haute résolution sur YouTube ou d'autres sites d'hébergement ;
  • musique sur les services de streaming ;
  • des jeux en streaming sur, par exemple, Twitch ;
  • jeux développés pour les anciennes consoles : NES, SNES, SEGA, etc.

Pour visualiser et écouter du contenu multimédia, vous pouvez soit utiliser un navigateur, soit, plus pratique encore, installer un lecteur multimédia spécial. Le plus fonctionnel et le plus pratique d'entre eux est Kodi.

Pour transformer Raspberry en console de jeu, vous devez installer des émulateurs des plateformes qui vous intéressent et commander des Roms de jeu. Cela se fait en quelques dizaines de minutes. Et il est encore plus simple et pratique d'installer une distribution spéciale, par exemple Retro Pie ou une autre.

Développement et travail avec des documents sur RPi

Bien entendu, Malina n'est pas l'ordinateur le plus puissant, ce qui signifie que ce n'est pas la meilleure solution pour travailler. Mais si vous le souhaitez, vous pouvez plus ou moins confortablement visualiser/éditer un document ou même écrire un script. Bien sûr, cela ne fonctionnera pas avec les IDE lourds, mais personne n’exige cela du RPi.

De plus, en utilisant RPi3, vous pouvez « surfer » sur Internet ou discuter dans des messageries instantanées ou sur les réseaux sociaux.

Serveur pour tous les besoins de Raspberry Pi 3

Une autre option pour utiliser le Raspberry Pi 3 consiste à en faire un serveur. Il suffit donc d'y installer LAMP ou simplement Apache et Myphpadmin, après quoi vous pourrez développer et tester des projets Web dans des conditions de ressources assez limitées.

La deuxième option consiste à télécharger et à distribuer depuis le torrent Raspberry Pi 3. Pour cela, bien sûr, vous aurez besoin d'un disque dur externe, car les cartes mémoire et les lecteurs flash ne sont pas très adaptés à ces fins, à la fois en raison des limitations de vitesse et du petit volume, et parce qu'ils s'usent rapidement sous des charges intenses.

Application de Raspberry en robotique et IoT

Dans l’IoT et la robotique, les applications du RPi sont presque illimitées. A partir de cet appareil, vous pouvez réaliser, par exemple, une caméra de vidéosurveillance, une petite station météo, une voiture avec télécommande et bien plus encore. Ainsi, le Raspberry Pi 3 est utilisé dans une voiture comme DVR. Si vous le souhaitez, vous pouvez même créer un téléphone mobile ou un smartphone à partir de cette carte monocarte. Mais cela vaut la peine de le faire, soit pour expérimenter, soit pour le montrer à vos amis/communauté. Le fait est que l'appareil correspondant s'avérera au moins assez volumineux.

Bien entendu, des modules seront nécessaires à ces fins. Mais il ne devrait y avoir aucun problème pour les acheter. Il existe de nombreux magasins sur Internet qui vendent des composants supplémentaires pour Raspberry à des prix abordables.

Combiner plusieurs RPi 3 dans un cluster

Une autre façon d'utiliser Raspberry Pi 3 consiste à combiner plusieurs de ces appareils dans un cluster. Il s’agit d’un mode d’utilisation assez spécifique qui ne convient pas à tout le monde.

Pour commencer, nous devons donner une explication brève et claire de ce qu’est un cluster. De manière générale, ce terme fait référence à un complexe d'équipements homogènes (en l'occurrence, un ensemble de RPi), sur lesquels certaines tâches sont exécutées en parallèle.

Il n'y a aucun sens pratique à créer un cluster à partir de Raspberry pour implémenter quelque chose de sérieux, car il existe des solutions moins chères et plus pratiques. Combiner un Raspberry Pi 3 dans un cluster est conseillé principalement pour la formation. En disposant de plusieurs appareils monocarte, vous pouvez comprendre les fonctionnalités de l'informatique parallèle ou montrer comment ils fonctionnent à un enfant (en fait, RPi a été créé pour enseigner aux enfants).

Comme vous pouvez le constater, vous pouvez faire beaucoup de choses intéressantes avec le RPi 3. Il est principalement utile pour se familiariser avec les ordinateurs. Mais cela permet également de mettre en œuvre un très grand nombre de projets pouvant être utilisés pour le travail ou les loisirs.

Le module BitScope Cluster contient 150 mini-ordinateurs Raspberry Pi avec commutateurs réseau intégrés. Photo : BitScope

Les programmeurs et les scientifiques n’ont pas toujours facilement accès à un véritable supercalculateur performant pour tester leurs programmes. De plus, les supercalculateurs sont généralement déjà occupés 24 heures sur 24 avec d’autres logiciels. Il est difficile de trouver la fenêtre. Vous devez rédiger une candidature à l'avance et faire la queue. Comment le nouveau programme fonctionnera-t-il dans un environnement multiprocesseur réel, dans quelle mesure la tâche est-elle parallélisée ?

Pour aider les développeurs, mandatée par la Division de calcul haute performance du Laboratoire national de Los Alamos, la société australienne BitScope a développé des modules informatiques « de test » BitScope Cluster de 150 mini-ordinateurs Raspberry Pi pouvant être combinés en un cluster et testé leurs programmes sur eux.

Le Laboratoire national de Los Alamos exploite l'un des dix supercalculateurs les plus puissants au monde : Trinity.



Supercalculateur Trinity au Laboratoire national de Los Alamos

La direction du laboratoire a cherché un moyen de permettre aux développeurs d'accéder à un calcul parallèle hautes performances sans avoir réellement accès au supercalculateur lui-même, afin qu'ils puissent tester leurs programmes.

« Les modules Raspberry Pi permettent aux développeurs de comprendre comment écrire de tels logiciels et de les faire fonctionner de manière fiable, sans avoir besoin d'un banc de test de la même taille qui coûte un quart de milliard de dollars et consomme 25 mégawatts d'électricité », explique Gary Glider de Los Angeles, Laboratoire national Alamosa.

En fait, 25 mégawatts d'électricité pour tester votre programme, c'est trop (les coûts énergétiques du refroidissement, qui sont plusieurs fois supérieurs à la consommation énergétique du système informatique lui-même, ne sont pas pris en compte ici).



Installation d'un système de refroidissement par eau pour le supercalculateur Trinity, qui utilise efficacement le système de récupération des eaux usées sanitaires

Chaque module dispose de 144 nœuds actifs, six nœuds de rechange et un nœud de contrôle. Le module est au format 6U lorsqu'il est installé dans un rack de serveur de centre de données. Comme indiqué sur le site officiel, un cluster de 1 000 nœuds occupant un rack 42U coûtera environ 120 à 150 $ par nœud. Il s'agit d'une majoration assez importante par rapport au prix standard du Raspberry Pi, connu pour être de 35 $.

Chaque module BitScope Cluster se compose de blocs de construction appelés « Cluster Packs ». L'installation d'une unité dans des racks se fait précisément sous la forme de ces « packages ».



Pack de clusters

Un nœud (mini-ordinateur Raspberry Pi 3) contient un processeur ARMv8 quadricœur 64 bits à 1,2 MHz. Ainsi, si l'on imagine un cluster, par exemple, de cinq modules, il y aura alors 720 nœuds actifs, soit 2880 cœurs de processeur actifs. C'est largement suffisant pour tester la qualité du parallélisme du programme.



Voici à quoi ressemble de près une rangée de mini-ordinateurs du Cluster Pack.

Bien qu'une telle solution soit effectivement beaucoup moins chère qu'un supercalculateur, elle ne peut toujours pas être qualifiée de budgétaire. Seule une grande organisation de recherche peut se permettre un mini-cluster pour 100 000 ou 150 000 dollars uniquement pour des programmes de test. En fait, de tels modules sont probablement conçus pour ces riches organismes de recherche- les propriétaires de supercalculateurs. Cependant, les créateurs du mini-supercalculateur affirment qu'il s'agit de « la solution la plus rentable et la plus évolutive au monde : peu coûteuse à construire, à exploiter et à entretenir ».

Les modules BitScope Cluster permettent également des économies significatives en matière de consommation d'énergie. Vous pouvez calculer vous-même la consommation électrique de chacun d'eux, en comptant 5 W par nœud. Si nous supposons que les nœuds de rechange ont une consommation d'énergie minimale, alors les modules restent avec 144 nœuds actifs et un nœud de contrôle. Total 145×5=725 W.

BitScope a l'intention de commercialiser ces modules gratuitement au début de 2018.

Selon l'entreprise, outre le développement de logiciels, ces clusters peuvent être utiles comme simulateurs de réseaux de capteurs, dans la recherche sur les réseaux hautes performances et l'Internet des objets.

Un cluster Raspberry Pi à 4 nœuds. La carte supérieure est un modèle B original, tandis que les trois cartes ci-dessous sont de toutes nouvelles cartes Raspberry Pi 2.

Mis à jour: Ce projet a été initialement publié le 26 août 2015 et a ensuite été mis à jour le 5 septembre 2015 avec des instructions supplémentaires sur la façon d'ajouter un deuxième adaptateur Ethernet au nœud principal et de le faire servir de serveur DHCP pour les autres nœuds du cluster. .

Au cours du week-end, je me suis assis et j'ai construit un petit cluster Raspberry Pi composé de 4 nœuds. J'ai utilisé trois cartes pour les nœuds de calcul et une pour le nœud principal. Je voulais que le cluster - plus communément appelé « ronce » - soit aussi compact que possible, avec seulement deux câbles sortant, un pour l'alimentation et l'autre pour le réseau. J'ai utilisé un hub USB pour alimenter les cartes et un petit commutateur Ethernet que je pouvais pirater pour qu'il soit également alimenté depuis le hub USB plutôt que depuis une verrue murale séparée.

Ce n'est pas le plus gros cluster construit à partir de cartes Raspberry Pi, autant que je sache, le cluster 120 Pi construit par les gens de Resin.io est toujours le plus gros construit, même si comme il s'agit en fait de 5 clusters indépendants de 24 nœuds, il est possible qu'il prenne encore le dessus. titre.

Cependant, même avec seulement 4 nœuds, mon cluster de poche est suffisamment grand pour ce que je veux, c'est-à-dire comme banc d'essai pour certains travaux d'informatique distribuée que j'effectue. Le petit cluster posé sur mon bureau me permet de tester le code avant de déployer des tâches sur le cluster beaucoup plus étendu et coûteux que j'utilise pour le travail fastidieux sur le projet.

L'enceinte 4 planches "dogbone"

Le boîtier sur lequel j'ai finalement opté était un boîtier « os de chien » empilable à quatre cartes que j'ai acheté sur Amazon, bien que si vous êtes prêt à attendre un peu, il existe de nombreux boîtiers similaires sur AliExpress qui peuvent être achetés pour beaucoup moins cher. Il a été expédié du jour au lendemain et je l'ai eu le lendemain ; c'était la seule chose que j'ai achetée pour construire le cluster car j'avais tout le reste sur l'étagère.

Le hub USB à 5 ports

Le hub USB que j’ai utilisé est ce qui m’a inspiré à faire la construction en premier lieu : il s’agit d’un hub à 5 ports d’Anker et, par coïncidence, il a à peu près la même empreinte que le Raspberry Pi lui-même. Avec cinq ports, il y a un port pour chacune de mes quatre cartes Raspberry Pi et un dernier port restant pour alimenter un commutateur Ethernet pour le cluster.

L'alimentation 5V et un câble USB de rechange

La première étape consiste à couper soigneusement l'extrémité du câble d'alimentation 5 V, en veillant à étiqueter lequel des deux fils correspondait aux deux fils laissés attachés au bloc d'alimentation. En dénudant les extrémités des fils, vous pouvez brancher la brique dans le mur et utiliser un voltmètre pour mesurer lequel des deux fils est +5V et lequel est GND.

Le câble d'alimentation 5V (en haut) et l'extrémité du câble USB (en bas)

Coupez ensuite l'extrémité du câble USB et, avec précaution, comme les fils à l'intérieur du câble sont petits et délicats, retirez le couvercle pour révéler les fils. Vous cherchez les fils rouge et noir, les autres transportent des données. Vous pouvez simplement les couper, vous n’en aurez pas besoin.

Le câblage interne d'un câble USB

Souder les deux extrémités des câbles ensemble - en joignant le +5V au +5V et le GND au GND - puis en recouvrant chaque fil individuel, ainsi que la jonction elle-même, avec un film rétractable me donne le câble Frankenstein dont j'ai besoin pour alimenter. le switch Ethernet du dernier port disponible de mon hub USB.

Le câble Frankenstein

Après avoir parcouru ma pile de câbles de rechange pour trouver les câbles USB et Ethernet les plus courts possibles, coller le cluster ensemble à ce stade se résumait à des attaches de câble et du velcro.

Le cluster Raspberry Pi terminé

% sudo apt-get install autofs

puis éditez le fichier /etc/auto.master en ajoutant

/mnt/nfs /etc/auto.nfs

à la fin. Créez ensuite le fichier /etc/auto.nfs en ajoutant,

Rpi0 rpi0:/mnt/usb

et redémarrez le service autofs,

% sudo /etc/init.d/autofs restart.

si tout se passe bien à ce stade, si vous accédez au répertoire /mnt/nfs/rpi0/ et que le disque connecté au nœud principal devrait automatiquement se monter. Tu peux vérifier

% df-h Système de fichiers 1 000 blocsutilisés disponibles utilisation % montés surrootfs14984668 25132281181235618% //dev/root 14984668 25132281181235618% /devtmpfs470416 0470416 0% /dev tmpfs94944 232 94712 1% /exécuter tmpfs 5120 05120 0% /exécuter/verrouiller tmpfs 189880 0189880 0% /run/shm/dev/mmcblk0p1 57288 19448 3784034% /bootrpi0:/mnt/usb 604670086460466944 1% /mnt/nfs/rpi0

pour voir s'il a été monté automatiquement.

Lumières clignotantes

A côté de la clé USB (puisque j'en avais une qui traînait) j'ai installé un Blinkstick. Une seule LED RVB contrôlée par logiciel, la clé est en fait plutôt pratique pour l'éclairage d'état du serveur. Il est difficile d'ignorer une lumière clignotante. Après avoir inséré la clé dans le dernier port USB restant du nœud principal, vous pouvez configurer le logiciel en :

% sudo apt-get install -y python-pip python2.7-dev % sudo pip install clignotant % sudo clignotant --add-udev-rule

à partir de là, il est en fait assez facile de manipuler la LED RVB à partir de la ligne de commande.

Ou lorsque vous souhaitez utiliser le Blinkstick par programme pour indiquer l'état, vous pouvez utiliser l'API et le langage de programmation de votre choix.

Prochaines étapes

Je voyage beaucoup. Cela signifie que je passe beaucoup de temps loin de mon bureau à domicile. Bien que je puisse laisser le cluster opérationnel et simplement y accéder pendant mon absence, j'aimerais en fait pouvoir l'emporter avec moi sur la route pour les spectacles. Donc, à l’avenir, j’aimerais vraiment pouvoir récupérer le cluster et le déposer sur n’importe quel réseau.

Cela signifie que je vais devoir reconfigurer un peu le réseau.

Au lieu de connecter directement le commutateur Ethernet au réseau externe et de demander à mon routeur domestique d'attribuer des adresses IP à chacun des nœuds, je vais ensuite ajouter un adaptateur Ethernet USB au nœud principal. Cela donnera au nœud principal deux connexions Ethernet.

Le premier se connectera au réseau externe, donnant au nœud principal – et donc au cluster – une adresse IP « externe ». Le second se connectera au switch Ethernet du cluster. Nous pouvons ensuite configurer le nœud principal en tant que serveur DHCP pour trois autres nœuds « internes » connectés au commutateur, créant ainsi un deuxième réseau visible uniquement par le cluster.

Dans cette configuration, je pourrai toujours me connecter au nœud principal, mais je ne pourrai atteindre les trois nœuds de calcul qu'à partir du nœud principal. Il y a cependant un problème : comment connaître l'adresse IP externe du nœud principal ?

Ajout d'un écran LCD

Le Blinkstick est idéal pour la messagerie simple, vous pouvez en fait faire beaucoup de choses avec une LED RVB pour vous faire savoir ce qui ne va pas. Mais il est en fait assez simple d’ajouter un simple écran LCD au nœud principal.

Après avoir connecté le panneau, vous devrez installer les outils I2C et les bibliothèques Python associées

% sudo apt-get install python-smbus % sudo apt-get install i2c-tools

et pour activer I2C sur le nœud principal en ajoutant ce qui suit au bas du fichier /boot/config :

device_tree= dtparam=spi=on dtparam=i2c1=on dtoverlay=w1-gpio-pullup,gpiopin=3,pullup=3dtoverlay=w1-gpio-pullup,gpiopin=5,pullup=5

et en ajoutant les modules suivants au fichier /etc/modules,

I2c_dev i2c_bcm2708

Après avoir redémarré le nœud principal, vous devriez pouvoir voir le panneau avec un ID I2C de 27,

% sudo i2cdetect -y 1 0123456789abcdef 00:-- -- -- -- -- -- -- -- -- -- -- -- -- 10 : -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30 : -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --

Vous pouvez voir que eth0 a l'adresse IP interne statique que nous lui avons attribuée, tandis que eth1 a une nouvelle adresse IP attribuée par notre routeur domestique. Si tout se passe comme prévu, vous devriez pouvoir vous connecter au nœud principal en utilisant sa nouvelle adresse IP externe et voir quelque chose comme ceci :

%ifconfig eth0Link encap: EthernetHWaddr b8:27:eb:22:60:fbadresse inet : 192.168.50.1Bcast :192.168.50.255Masque :255.255.255.0Paquets RX : 2470 erreurs : 0 abandonnés : 0 dépassements : 0 trame : 0Paquets TX : 2267 erreurs : 0 abandonnés : 0 dépassements : 0 transporteur : 0 collisions : 0 txqueuelen : 1000 Octets RX : 215 730 (210,6 Ko) octets TX : 237032 (231,4 Kio)eth1Link encap: EthernetHWaddr ac:29:3a:da:74:37adresse inet : 192.168.1.194Bcast : 192.168.1.255Masque : 255.255.255.0UP BROADCAST RUNNING MULTICASTTMTU : 1 500 Métrique : 1Paquets RX : 15 245 erreurs : 0 abandonnés : 1 dépassements : 0 trame : 0Paquets TX :0 erreurs :0 abandonnés :0 dépassements :0 transporteur :0 collisions : 0 txqueuelen : 1000 Octets RX : 1787746 (1,7 Mio) octets TX : 283761 (277,1 Ko) Encapsulation loLink : bouclage local adresse inet : 127.0.0.1Masque : 255.0.0.0UP LOOPBACK RUNNINGMTU: 65536 Métrique: 1Paquets RX : 4 erreurs : 0 abandonnés : 0 dépassements : 0 trame : 0Paquets TX : 4 erreurs : 0 abandonnés : 0 dépassements : 0 transporteur : 0 collisions : 0 txqueuelen : 0 Octets RX : 260 (260,0 B) octets TX : 260 (260,0 B)

% route -n Table de routage IP du noyau Destination Gateway Genmask Flags Metric RefUse Iface0.0.0.0 192.168.1.254 0.0.0.0 UG000 eth1192.168.1.0 0.0.0.0 255.255.255.0 U 000 eth1192.168.50.00.0.0.0 255.255.255.0U 000 eth0

Si tout ne se passe pas comme prévu et que vous ne parvenez pas à atteindre le nœud principal via le réseau, il est possible que vous deviez extraire un moniteur HDMI et un clavier USB et les connecter directement au nœud principal - vous pouvez temporairement retirer le disque USB à vous donner et un port USB libre pour le clavier - afin que vous puissiez diagnostiquer et résoudre tout problème de réseau.

cependant, j'espère que vous pourrez atteindre le nœud principal à partir du réseau externe. Vous devriez pouvoir envoyer une requête ping aux hôtes externes sur le réseau 192.168.1.* et aux hôtes internes sur le réseau 192.168.50.*.

Cependant, au moins pour le moment, si nous nous connectons à l’un des nœuds de calcul, alors qu’ils peuvent voir le nœud principal – et les uns les autres – ils ne peuvent pas encore voir le monde extérieur. Nous allons devoir transférer les paquets des réseaux internes vers les réseaux externes avant que cela ne soit possible.

Sur le nœud principal, continuez et,

% sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

puis éditez le fichier /etc/sysctl.conf en décommentant la ligne disant :

Net.ipv4.ip_forward=1

Après avoir activé le transfert, nous devrons configurer iptables,

% sudo iptables - t nat - A POSTROUTING - o eth1 - j MASQUERADE % sudo iptables - A FORWARD - i eth1 - o eth0 - m state -- state LIÉ, ÉTABLI - j ACCEPTER % sudo iptables - A FORWARD - i eth0 - o eth1 - j ACCEPTER % sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

puis ajoutez en bas du fichier /etc/network/interfaces une ligne pour charger les tables au démarrage,

Up iptables-restauration< /etc/iptables.ipv4.nat

En redémarrant le nœud principal à ce stade, vous devriez maintenant pouvoir vous connecter à n'importe lequel des nœuds de calcul à partir du nœud principal et pouvoir envoyer une requête ping au monde extérieur,

%ssh rpi1 Linux rpi2 3.18.11-v7+ #781 SMP PREEMPT mar. 21 avril 18:07:59 BST 2015 armv7lLes programmes inclus avec le système Debian GNU/Linux sont des logiciels libres ;les modalités exactes de distribution de chaque programme sont décrites dans lefichiers individuels dans /usr/share/doc/*/copyright.Debian GNU/Linux n'offre ABSOLUMENT AUCUNE GARANTIE, dans la mesure où permis par la loi applicable. Dernière connexion : samedi 5 septembre 2015 à 20:49:07 depuis rpi0% ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) octets de données.64 octets de 8.8.8.8 : icmp_req=1 ttl=54 time=23,8 ms64 octets de 8.8.8.8 : icmp_req=2 ttl=54 time=21,4 ms64 octets de 8.8.8.8 : icmp_req=3 ttl=54 time=23,2 ms^C --- 8.8.8.8 Statistiques ping ---3 paquets transmis, 3 reçus, 0% de perte de paquets, temps 2003 mstrt min/moy/max/mdev = 21,470/22,838/23,829/1,014 ms%

C'est ça. Nous avons un cluster fonctionnel.

En conclusion

À ce stade, nous avons un cluster avec deux câbles qui y pénètrent, un pour l'alimentation et l'autre pour le réseau. Vous pouvez vous connecter à n'importe quel réseau et le nœud principal signalera son adresse IP externe sur un panneau LCD, vous permettant de vous y connecter, et à partir de là, vous pourrez vous connecter à - et entre - n'importe lequel des nœuds du cluster sans avoir besoin d'un mot de passe. . Tous les nœuds partagent également un disque.

En d’autres termes, tout fonctionne à peu près à ce stade. En fait, je l'utilise actuellement comme cluster Hadoop de bureau.

À partir de là, nous pourrions faire plusieurs choses, la prochaine étape la plus évidente serait de ajoutez une surveillance SNMP et un tableau de bord externe « d'état » sur le nœud principal pour surveiller l'état du cluster. Cependant, à plus long terme, le port Ethernet libre sur le switch nous permet d'étendre le cluster assez facilement en ajoutant un autre rack de quatre nœuds de calcul sans trop d'effort supplémentaire.

Utilisé par les passionnés à diverses fins. Par exemple, le passionné David Guill a décidé de l'utiliser pour construire un cluster - un groupe d'ordinateurs connectés les uns aux autres et représentant, du point de vue de l'utilisateur, une seule ressource matérielle. Il a été décidé d'appeler le projet 40-Node Raspi Cluster. Il est à noter que David avait besoin du cluster pour acquérir de l'expérience en programmation sur des systèmes distribués, le cluster Raspberry Pi remplacera donc un véritable super-ordinateur lors de sa formation.

Simplement, il serait possible d'assembler un cluster à partir d'un Raspberry Pi, en utilisant une étagère ou une armoire peu coûteuse au lieu d'un boîtier (comme dans le cas de ), mais comme David s'intéresse au modding, il a décidé de créer un cluster élégant. , aussi proche que possible dans son apparence et sa commodité des solutions série. Et je dois dire que David a réussi, car son projet est bien plus réfléchi que de nombreux cas en série. D'ailleurs, le corps du projet 40-Node Raspi Cluster est constitué de panneaux acryliques, découpés sur mesure au laser et collés à la main.

Les principales caractéristiques distinctives du projet Raspi Cluster à 40 nœuds étaient : une apparence cool, une taille assez compacte (comme une grande tour), un accès pratique à tous les composants et la possibilité de les remplacer sans avoir à démonter le boîtier, une fixation sans vis des pièces principales et de nombreux composants, ainsi que l'ordre des fils (et il y en a pas mal dans ce projet). Ce projet comprend 40 ordinateurs Raspberry Pi compacts (40 cœurs Broadcom BCM2835 avec une fréquence de 700 MHz, 20 Go de RAM distribuée), deux commutateurs 24 ports, une alimentation ATX, cinq disques durs de 1 To (avec extension jusqu'à 12 pièces ), 440 Go de mémoire flash, ainsi qu'un routeur avec connectivité sans fil.


Les ordinateurs Raspberry Pi de ce projet sont regroupés par groupes de quatre sur des supports acryliques personnalisés, au nombre de dix dans ce projet. Grâce à ce montage (comme dans les serveurs lames), un accès pratique et un remplacement facile des ordinateurs compacts sont assurés. Chaque lame Raspberry Pi possède son propre convertisseur DC-DC compact, alimenté par une alimentation ATX commune. Le refroidissement du cluster est réalisé à l'aide de quatre ventilateurs de 140 mm, derrière lesquels sont installés des filtres.

L'abondance de LED ajoute un "modding" supplémentaire au projet Raspi Cluster à 40 nœuds - il y en a plus de trois cents dans le projet (sur des mini-ordinateurs, des commutateurs, des routeurs et des ventilateurs), et pendant le fonctionnement, elles clignoteront conformément avec la charge. Les dimensions de ce projet sont de 25 x 39 x 55 cm et le coût approximatif de construction est de 3 000 $.

Vous pouvez voir l'apparence externe et interne, ainsi que les fonctionnalités, du projet 40-Node Raspi Cluster à partir des photos et vidéos ci-jointes. Si ce projet vous intéresse, alors vous pouvez vous en familiariser plus en détail, et David a décrit la construction de ce monstre de manière très détaillée, vous pouvez visiter la note correspondante sur son site personnel.