Installation d'Apache ZooKeeper sur Ubuntu 18.04 — guide pas à pas

Ce guide explique comment installer et configurer un cluster Apache ZooKeeper à nœud unique sur Ubuntu 18.04. Il couvre la préparation du système, l’installation de Java, la création d’un utilisateur dédié, l’installation et la configuration de ZooKeeper, la création d’un service systemd, les vérifications de fonctionnement, des conseils de sécurité et une mini-méthodologie pour passer à un cluster multi-nœud en production.
Aperçu et cas d’usage
Apache ZooKeeper est un service centralisé open source pour gérer la configuration, la nomination, la synchronisation distribuée et la coordination de services de groupe. Il expose un espace de noms hiérarchique pour stocker des données légères (Znodes) et garantit un accès strictement contrôlé, une faible latence et une haute disponibilité lorsqu’il est déployé en cluster. On l’utilise couramment pour :
- La coordination de services distribués (verrous, élections de leader).
- Le stockage de configurations et d’informations d’état (adresses, topologie).
- La découverte de services et la gestion de verrous répartis.
Important : pour la production, préférez toujours un cluster impair (3, 5, …) pour assurer la tolérance aux pannes.
Variantes de recherche liées
- installer zookeeper ubuntu 18.04
- zookeeper single node tutoriel
- configurer zookeeper systemd
- zookeeper java openjdk oracle
- déployer cluster zookeeper
Pré-requis
- Un serveur exécutant Ubuntu 18.04.
- Un mot de passe root ou accès sudo depuis un compte administrateur.
- Accès réseau pour télécharger les paquets et les binaires.
Mise à jour du système
Commencez par mettre à jour le système :
apt-get update -y
apt-get upgrade -y
Redémarrez si le noyau ou des paquets système critiques ont été mis à jour.
Installer Java
ZooKeeper est écrit en Java. Deux approches principales sont possibles : OpenJDK (libre) ou Oracle Java (propriétaire). OpenJDK est généralement suffisant et plus simple à maintenir.
Option recommandée (OpenJDK) :
apt-get install -y openjdk-11-jre-headless
Si vous choisissez Oracle Java (comme dans l’exemple original), ajoutez le PPA et installez :
add-apt-repository ppa:linuxuprising/java
apt-get update -y
apt-get install oracle-java11-set-default
Vérifiez l’installation :
java --version
Exemple attendu :
java 11.0.2 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+7-LTS, mixed mode)
Note : évitez d’installer plusieurs JVM sur un même hôte si vous ne les gérez pas explicitement. Privilégiez Java 11 ou plus récent pour des raisons de sécurité et de compatibilité.
Créer l’utilisateur ZooKeeper
Créez un compte système dédié pour exécuter ZooKeeper, ce qui limite les risques :
useradd zookeeper -m
usermod --shell /bin/bash zookeeper
Définissez un mot de passe (ou utilisez une clé SSH pour l’accès) :
passwd zookeeper
Ajoutez l’utilisateur au groupe sudo si nécessaire :
usermod -aG sudo zookeeper
Sécurité recommandée : évitez l’usage direct d’un compte sudo pour l’exécution de ZooKeeper en production ; utilisez systemd pour contrôler le service et appliquez des permissions strictes sur les répertoires.
Installer ZooKeeper
ZooKeeper stocke sa configuration et son état sur disque. Créez d’abord la hiérarchie de répertoires :
mkdir -p /data/zookeeper
Donnez la propriété au compte zookeeper :
chown -R zookeeper:zookeeper /data/zookeeper
Téléchargez et installez ZooKeeper (exemple avec la version archivée 3.4.9) :
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
Extrayez et renommez :
tar -xvzf zookeeper-3.4.9.tar.gz
mv zookeeper-3.4.9 zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper
Remarque : vous pouvez choisir une version plus récente si nécessaire. Vérifiez la compatibilité entre clients et serveurs avant mise à jour.
Configurer ZooKeeper
Créez le fichier de configuration :
nano /opt/zookeeper/conf/zoo.cfg
Ajoutez les lignes minimales suivantes :
tickTime=2500
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=80
Explications rapides :
- tickTime : unité de base de temporisation en ms utilisée pour le heartbeat et l’élection.
- dataDir : répertoire local pour les snapshots et le transaction log.
- clientPort : port client par défaut (2181).
- maxClientCnxns : nombre maximal de connexions client par adresse IP.
Pour un cluster multi-nœud, ajoutez des directives server.N=host:peerPort:leaderPort et créez un fichier myid dans dataDir contenant l’ID numérique de chaque nœud.
Démarrer ZooKeeper manuellement
Démarrez le serveur pour un test :
cd /opt/zookeeper
bin/zkServer.sh start
Sortie attendue :
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
Connectez-vous au client local :
bin/zkCli.sh -server 127.0.0.1:2181
Vous devriez voir une invite similaire à :
[zk: 127.0.0.1:2181(CONNECTED) 1]
Tapez help pour lister les commandes disponibles, puis quit pour sortir.
Arrêter le serveur :
bin/zkServer.sh stop
Sortie attendue :
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
Créer un service systemd pour ZooKeeper
Pour gérer ZooKeeper de façon fiable, créez une unité systemd :
nano /etc/systemd/system/zookeeper.service
Collez :
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=default.target
Rechargez systemd, démarrez et activez au démarrage :
systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper
Vérifiez le statut :
systemctl status zookeeper
Exemple de sortie : le service doit être actif (running).
Vérifications et tests de base
- Connexion client : bin/zkCli.sh -server 127.0.0.1:2181
- Créer un znode test : create /my-node “hello”
- Lire un znode : get /my-node
- Lister : ls /
Test d’arrêt : systemctl stop zookeeper puis vérifiez qu’aucun processus Java lié n’est resté.
Critères d’acceptation
- Le service systemd démarre sans erreur et reste actif.
- Le client se connecte sur 127.0.0.1:2181 et exécute create/get/ls.
- Les fichiers de données sont présents dans /data/zookeeper et appartiennent à zookeeper.
- Aucune erreur dans les logs de ZooKeeper après 5 minutes d’opération normale.
Mini-méthodologie pour migrer vers un cluster multi-nœud
- Planification : identifiez 3 ou 5 nœuds (impair) sur des machines indépendantes et fiables.
- Synchronisation des horloges : NTP ou chrony sur tous les nœuds.
- Configurer zoo.cfg sur chaque nœud avec server.1=host1:2888:3888 etc.
- Placer un fichier myid dans dataDir contenant l’ID (1,2,3…).
- Démarrer les nœuds l’un après l’autre et vérifier la formation du quorum.
- Tests : écrire un znode puis lire depuis d’autres nœuds.
Notes : évitez d’utiliser des disques partagés pour dataDir ; chaque nœud doit stocker ses propres journaux et snapshots.
Checklist par rôle
Administrateur système
- Vérifier versions Java et ZooKeeper.
- Configurer firewall (autoriser 2181 pour clients, 2888/3888 pour peer/leader).
- Mettre en place sauvegardes régulières des snapshots.
Développeur d’application
- S’assurer que les clients utilisent les bons timeouts et retraits.
- Ne pas stocker de données volumineuses dans ZooKeeper (uniquement petites données de configuration/coordination).
Opérations / SRE
- Configurer la supervision (Prometheus/JMX exporter) et les alertes sur latence et perte de quorum.
- Tester les procédures d’ajout/retrait de nœud et de rollback.
Sécurité et conformité (GDPR)
- Ne stockez pas de données personnelles identifiables (DPI) dans ZooKeeper sans chiffrement et justification métier.
- Restreignez l’accès réseau aux ports et habilitez l’authentification (SASL) et le contrôle d’accès (ACL) si nécessaire.
- Assurez-vous que les sauvegardes sont chiffrées et que la durée de rétention respecte la politique de confidentialité.
Dépannage courant
Problème : client ne se connecte pas sur 127.0.0.1:2181
- Vérifiez que ZooKeeper écoute : netstat -plnt | grep 2181
- Consultez les logs dans /opt/zookeeper/logs ou le répertoire de logs configuré.
Problème : node ne rejoint pas le quorum
- Vérifiez les résolutions DNS et la connectivité sur les ports peers (2888/3888).
- Assurez-vous que myid correspond à la configuration server.X.
Problème : permissions de fichiers
- Vérifiez ownership : ls -la /data/zookeeper
- Fixez avec chown -R zookeeper:zookeeper /data/zookeeper
Alternatives et quand ne pas utiliser ZooKeeper
- Si vous avez besoin d’un stockage de configuration simple et centralisé mais sans tolérance de panne, une base de données relationnelle ou un service de configuration géré peut suffire.
- Pour des besoins stricts de stockage clé-valeur distribué avec API HTTP, considérez etcd ou Consul.
- ZooKeeper n’est pas optimisé pour stocker de gros blobs ou des flux de données.
Bonnes pratiques et durées de conservation
- Utilisez un cluster impair en production (3 ou 5 nœuds).
- Sauvegardez régulièrement les snapshots et traitez les journaux transactionnels.
- Testez la montée et la descente en charge avec des clients représentatifs.
Cas de test et critères d’acceptation
- CT1 : Démarrage clean — le service systemd démarre et réponde aux commandes client.
- CT2 : Persistance — créer /node, redémarrer le serveur, lire la clé après redémarrage.
- CT3 : Tolérance — sur cluster, simulatez la perte d’un nœud et vérifiez que le quorum tient.
Récapitulatif
- Vous avez installé ZooKeeper sur Ubuntu 18.04, créé l’utilisateur zookeeper, configuré le service et ajouté une unité systemd.
- Pour la production, migrez vers un cluster multi-nœud impair, activez les mécanismes d’authentification et surveillez la santé du cluster.
Notes
- Ce guide suit une approche pragmatique pour un environnement de test ou de développement. Les environnements de production nécessitent durcissement, surveillance et procédures d’exploitation formelles.
FAQ
Q : Puis-je utiliser OpenJDK au lieu d’Oracle Java ?
R : Oui. OpenJDK 11 est une solution recommandée et compatible.
Q : Où placer les snapshots pour les sauvegardes ?
R : Sauvegardez régulièrement le dossier dataDir (/data/zookeeper) vers un stockage sécurisé et chiffré.
Q : Combien de nœuds pour la production ?
R : Trois est le minimum recommandé pour la tolérance aux pannes, cinq pour plus de résilience.
Fin du guide. N’hésitez pas à poser des questions si vous souhaitez la procédure pour créer un cluster multi-nœud complet, l’automatisation Ansible, ou des exemples de configuration TLS/SASL.
Matériaux similaires

Corriger l’erreur Field 'browser' — alias invalide

Récupérer données clé USB gratuitement

Ajouter 2FA à OpenVPN AS avec WiKID

Listes de contrôle dans Notes iOS 9, OS X et iCloud

Easter eggs du Stade — Warzone Saison 5
