Le Labo #3 | Cluster Zookeeper Dockerisé
29/Oct 2015
1 - Introduction
Dans un précédent tutoriel, nous avions abordé la création d’un cluster Hadoop multinode réalisé à l’aide de deux conteneurs Docker utilisant les fonctionnalités de Weave pour la partie réseau. Dans ce tutoriel, nous allons créer un cluster Zookeeper à l’aide de plusieurs conteneurs Docker, le tout orchestré par Swarm.
2 - Avant d’aller plus loin…
Nous allons avoir besoin des éléments suivants :
- 2 serveurs linux (CentOS/Ubuntu) 64bits : mida-clm1 (IP 81.2.240.198) et mida-clm2 (IP 81.2.248.101)
- Docker : Gestion de conteneur
- Swarm : Gestion de cluster de conteneurs Docker
- Weave : Gestion du réseau Docker
- Zookeeper : Gestionnaire de cluster de l’écosystème Hadoop/Mesos
3 - Configuration des deux serveurs hôtes
Installation des outils nécessaires sur les deux serveurs
Installation de Docker
Dans le premier document relatif à Docker, nous avions observé l’installation de ce logiciel.
Si vous souhaitez installer la toute dernière version, lancez la commande suivante :
curl -sSL https://get.docker.com/ | sh
Installation de Weave
Weave ne fait pas partie des dépôts des distributions, pour l’installer il faudra taper les commandes suivantes :
curl -L git.io/weave -o /usr/local/bin/weave
chmod a+x /usr/local/bin/weave
Installation de Swarm
docker pull swarm:latest
Configuration des outils sur les deux serveurs
Configuration de Docker
Afin de pouvoir monter notre cluster Swarm et Weave, nous allons devoir ouvrir plusieurs ports d’écoute sur les deux serveurs à l’aide de la commande suivante :
docker -H tcp://0.0.0.0:<port> -H unix:///var/run/docker.sock -d
Il est d’ailleurs possible d’ouvrir plusieurs ports en même temps, pour utiliser plusieurs outils Docker (Swarm et Weave, ainsi que pour l’utilisation de l’API).
Exemple, sur les deux hôtes :
docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -d
Le port 2375 serait utilisé pour le cluster Swarm.
Le port 4243 serait utilisé pour l’API Docker (Que nous présenterons dans un prochain tutoriel).
Les ports 53, 6783 et 6784 sont utilisés par Weave.
Configuration de Weave
Puisque nous allons créer un cluster Zookeeper dockerisé, nous allons avoir besoin de deux conteneurs (c’est le minimum).
Grâce à weave, nous allons pouvoir les créer sur deux hôtes différents.
Dans notre cas, nous allons avoir besoin d’ouvrir des ports spécifique à zookeeper (2181, 3888, 2888 - relatif à une configuration classique de Zookeeper), et pour cela nous allons lancer les commandes suivantes sur les hôtes Docker :
Sur mida-clm1 :
weave launch
weave run 10.0.0.1/24 --name namenode1 -d -P -p 32181:2181 -p 33888:3888 -p 22888:2888 -it rastasheep/ubuntu-sshd:14.04
Sur mida-clm2 :
weave launch mida-clm1
weave run 10.0.0.2/24 --name namenode2 -d -P -p 32181:2181 -p 33888:3888 -p 22888:2888 -it rastasheep/ubuntu-sshd:14.04
Configuration de Swarm
A cette étape, nous allons monter le cluster Swarm. Swarm peut être utilisé aussi bien monter un cluster de conteneur ou un cluster d’hôtes Docker. Dans ce tutoriel, nous allons créer un cluster d’Hôtes. Pour cela, il faudra lancer les commandes suivantes :
- Pour générer le token :
docker run swarm create
- Docker ayant déjà été redémarré avec un port d’écoute nécessaire à Swarm, nous allons adjoindre chaque hôte au cluster Swarm à l’aide de la commande suivante :
docker run swarm join --addr=[@IP du node]:[port] token://[token]
[@IP du node] se réfère à l’addresse IP publique du node.
Exemple :
- Sur mida-clm1 : docker run swarm join --addr=81.2.240.198:2375 token://eff2e1fb0660f82dd4d69ca639d514ca
- Sur mida-clm2 : docker run swarm join --addr=81.2.248.101:2375 token://eff2e1fb0660f82dd4d69ca639d514ca
Et démarrer le swarm manager sur mida-clm1 :
docker run -d -p 22375:2375 swarm manager token://eff2e1fb0660f82dd4d69ca639d514ca
Une fois les deux hôtes inclus dans le cluster Swarm, nous allons pouvoir configurer les conteneurs.
4 - Configuration des conteneurs
Les conteneurs ayant été créés sur deux hôtes différents, il faut qu’il puissent communiquer ensemble afin de pouvoir monter un cluster Zookeeper dessus. Cependant, nous avons utilisé les fonctionnalités réseau de Weave afin qu’ils soient sur le même réseau.
Afin de vérifier que Weave fonctionne bien, nous allons effectuer une requête ICMP de namenode1 vers namenode2 :
ping -c 4 -q namenode2
--- namenode2.weave.local ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/mdev = 0.156/0.889/2.248/0.811 ms
Maintenant que nous savons que tout fonctionne correctement, nous allons pouvoir installer les paquets nécessaires sur les deux conteneurs
Création d’une clé SSH sur namenode1
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@namenode2
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
Installation des paquets
Installation des outils nécessaires : wget, curl, tar, vim, java à l’aide de la commande suivante :
apt-get install -y wget curl tar vim default-jre default-jdk
Une fois tous les paquets installé, tapez la commande java -version
afin de vérifier que l’installation se soit bien passée.
Installation et configuration de Zookeeper
Installation de Zookeeper
Pour télécharger, décompresser l’archive et renommer le dossier, tapez les commandes suivantes :
wget http://mirror.cc.columbia.edu/pub/software/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar xzf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
Pour configurer l’environnement afin qu’il prenne en compte l’installation de Zookeeper, tapez les lignes suivantes dans le fichier .bashrc :
export ZOOKEEPER_HOME=[/chemin/vers/zookeeper]
export PATH=$PATH:[chemin/vers/zookeeper]/bin
Puis lancez la commande suivante : exec bash
Configurer Zookeeper
Pour configurer Zookeeper, il faut commencer par lancer la commande permettant d’inquer l’ID du serveur :
sur namenode1 :
echo 1 > [chemin/vers/zookeeper/DataDir]/myid
sur namenode2 :
echo 2 > [chemin/vers/zookeeper/DataDir]/myid
Ensuite, il faut ajouter les serveurs sur les deux conteneurs en ajoutant les lignes suivantes dans le fichier zoo.conf se trouvant dans /etc/zookeeper/conf:
server.1=namenode1:2888:3888
server.2=namenode2:2888:3888
Enfin, démarrez zookeeper via la commande suivante sur les deux conteneurs :
zkServer.sh start
zkServer.sh status
permet de savoir si zookeeper est bien actif et quel rôle a été attribué au serveur : “Leader” ou “Follower”.
5 - Conclusion
Voici un cas de cluster Zookeeper Dockerisé à l’aide de conteneurs créés sur deux hôtes différents et réliés à l’aide de Weave (pour la partie réseau) et de Swarm (pour la partie cluster). Il est possible d’aller plus loin au niveau du cluster Swarm en ajoutant les fonctions de réplication et de haute disponibilité, expliquées dans le lien suivant : https://docs.docker.com/swarm/multi-manager-setup/