Apache ZooKeeper
ZooKeeper est un service de coordination distribuée : configuration partagée, élection de leader, verrous distribués, découverte de service. Longtemps utilisé comme dépendance obligatoire de Kafka (avant le mode KRaft) et d'autres systèmes distribués (HBase, Solr).
Installation
# Souvent distribué en archive, ou embarqué avec Kafka (bin/zookeeper-server-start.sh)
wget https://downloads.apache.org/zookeeper/<version>/apache-zookeeper-<version>-bin.tar.gz
tar -xzf apache-zookeeper-*-bin.tar.gz -C /opt/
cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
Unit file systemd personnalisé nécessaire (comme pour Kafka) :
[Unit]
Description=Apache ZooKeeper
After=network.target
[Service]
Type=simple
User=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start-foreground
Restart=on-failure
[Install]
WantedBy=multi-user.target
Fichiers de configuration
| Fichier | Rôle |
|---|---|
conf/zoo.cfg | Configuration principale (port client, répertoire de données, membres du cluster) |
data/myid | Identifiant unique du nœud dans un cluster (ensemble) ZooKeeper |
Commandes utiles
systemctl status zookeeper
bin/zkServer.sh status
bin/zkCli.sh -server localhost:2181 # client interactif
echo ruok | nc localhost 2181 # "are you ok" — répond "imok" si sain
Exemple de configuration
# zoo.cfg
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
# Membres du cluster (mode ensemble, 3 nœuds minimum recommandé pour la tolérance de panne)
server.1=zk1.local:2888:3888
server.2=zk2.local:2888:3888
server.3=zk3.local:2888:3888
Sécurisation
- Activer l'authentification SASL (Kerberos ou digest) — ZooKeeper n'authentifie rien par défaut.
- Restreindre l'accès réseau au port 2181 (client) et 2888/3888 (communication inter-nœuds) aux seuls services légitimes.
- Utiliser des ACL de znode (
setAcl) pour restreindre qui peut lire/écrire quels chemins. - Un cluster ZooKeeper nécessite un nombre impair de nœuds (quorum majoritaire) — dimensionner en conséquence pour la tolérance de panne.
Logs & dépannage
journalctl -u zookeeper -f
tail -f /opt/zookeeper/logs/zookeeper.out
bin/zkServer.sh status # rôle du nœud : leader/follower/standalone