Apache Zookeeper est un service gratuit et open source pour les systèmes distribués qui vous aide à gérer un grand nombre d'hôtes. Il s'agit d'un service centralisé utilisé pour maintenir les informations de configuration, les noms et les services de groupe. Il est écrit en Java et permet aux développeurs de se concentrer sur la création de fonctionnalités logicielles sans se soucier de la nature distribuée de l'application. Apache ZooKeeper est le plus couramment utilisé dans les charges de travail "à lecture dominante" où les lectures sont beaucoup plus courantes que les écritures. Il est livré avec un riche ensemble de fonctionnalités, notamment la synchronisation, les messages ordonnés, la sérialisation, la fiabilité, l'atomicité, le traitement rapide et bien d'autres. Il dispose d'un mécanisme de verrouillage et de synchronisation qui vous aide dans la récupération automatique en cas d'échec tout en connectant d'autres applications distribuées. Le projet Zookeeper est l'un des projets les plus réussis de la fondation Apache. De nombreuses entreprises ont adopté Zookeeper pour créer des systèmes distribués hautement disponibles à grande échelle.
Dans ce didacticiel, nous allons vous montrer comment configurer un cluster Apache Zookeeper à nœud unique sur le serveur Debian 10.
Prérequis
- Un serveur exécutant Debian 10 avec 2 Go de RAM.
- Un mot de passe root est configuré sur votre serveur.
Mise en route
Avant de commencer, il est recommandé de mettre à jour votre serveur avec la dernière version. Vous pouvez le mettre à jour à l'aide de la commande suivante :
apt-get update -y
apt-get upgrade -y
Une fois votre serveur mis à jour, redémarrez-le pour appliquer les modifications.
Installer Java
Apache Zookeeper est écrit en langage Java. Vous devrez donc installer Java sur votre système. Par défaut, la dernière version de Java est disponible dans le référentiel par défaut de Debian 10. Vous pouvez l'installer en exécutant la commande suivante :
apt-get install default-jdk -y
Après avoir installé Java, vérifiez la version installée de Java à l'aide de la commande suivante :
java --version
Vous devriez obtenir le résultat suivant :
openjdk 11.0.5 2019-10-15 OpenJDK Runtime Environment (build 11.0.5+10-post-Debian-1deb10u1) OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Debian-1deb10u1, mixed mode, sharing)
Une fois que vous avez terminé, vous pouvez procéder à la création d'un utilisateur système pour Zookeeper.
Créer un utilisateur système pour Zookeeper
C'est une bonne idée de créer un utilisateur dédié pour exécuter le service Zookeeper. Cela améliorera votre sécurité et votre gérabilité.
Tout d'abord, exécutez la commande suivante pour créer un utilisateur zookeeper avec le répertoire personnel :
useradd zookeeper -m
Ensuite, définissez le shell par défaut pour l'utilisateur zookeeper à l'aide de la commande suivante :
usermod --shell /bin/bash zookeeper
Ensuite, définissez un mot de passe pour l'utilisateur zookeeper à l'aide de la commande suivante :
passwd zookeeper
Ensuite, ajoutez l'utilisateur zookeeper au groupe sudo :
usermod -aG sudo zookeeper
À ce stade, vous avez créé et configuré l'utilisateur Zookeeper. Vous pouvez maintenant procéder au téléchargement de Zookeeper.
Télécharger Zookeeper
Tout d'abord, vous devrez télécharger la dernière version d'Apache Zookeeper à partir de son site officiel. Au moment de la rédaction de cet article, la dernière version d'Apache Zookeeper est la 3.5.6.
Pour le télécharger, changez le répertoire en /opt et exécutez la commande suivante :
cd /opt
wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.6-bin.tar.gz
Une fois le téléchargement terminé, extrayez le fichier téléchargé avec la commande suivante :
tar -xvzf apache-zookeeper-3.5.6-bin.tar.gz
Ensuite, renommez le répertoire extrait en zookeeper et donnez les autorisations appropriées :
mv apache-zookeeper-3.5.6-bin zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper
Ensuite, vous devrez créer un répertoire de données pour que Zookeeper stocke toutes les données de configuration et d'état. Vous pouvez créer sur le système de fichiers local ou sur le système de fichiers distant selon vos besoins.
Vous pouvez créer un répertoire de données à l'aide de la commande suivante :
mkdir -p /data/zookeeper
Ensuite, changez la propriété du répertoire de données en utilisateur zookeeper :
chown -R zookeeper:zookeeper /data/zookeeper
À ce stade, vous avez téléchargé Zookeeper et créé un répertoire de données pour celui-ci. Vous pouvez maintenant procéder à la configuration du Zookeeper.
Configurer Zookeeper
Zookeeper tous les fichiers de configuration sont situés dans le répertoire /opt/zookeeper/conf/. Vous pouvez créer un fichier de configuration Zookeeper dans le répertoire /opt/zookeeper/conf/ à l'aide de la commande suivante :
nano /opt/zookeeper/conf/zoo.cfg
Ajoutez les lignes suivantes :
tickTime=2500 dataDir=/data/zookeeper clientPort=2181 maxClientCnxns=80
Enregistrez et fermez le fichier lorsque vous avez terminé.
Où :
- tickTime :Cette option définit la longueur d'un tick en millisecondes.
- répertoiredonnées :Spécifiez le répertoire de données pour stocker les données Zookeeper.
- clientPort :spécifiez le port utilisé pour écouter les connexions client.
- maxClientCnxns :Utilisé pour limiter le nombre maximum de connexions client.
Remarque :Les paramètres ci-dessus sont destinés au développement et aux tests. Vous pouvez les modifier selon vos besoins.
À ce stade, vous avez configuré Zookeeper. Vous pouvez maintenant être prêt à démarrer le serveur Zookeeper.
Démarrer et tester le serveur Zookeeper
Vous pouvez démarrer le serveur Zookeeper à l'aide de la commande suivante :
/opt/zookeeper/bin/zkServer.sh start
Vous devriez obtenir le résultat suivant :
/usr/bin/java ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
Ensuite, vous pouvez vous connecter au serveur Zookeeper sur le port 2181 en utilisant la commande suivante :
/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
Une fois connecté, vous devriez voir la sortie suivante :
[zk: 127.0.0.1:2181(CONNECTED) 0]
Ensuite, exécutez la commande help pour obtenir une liste des commandes que vous pouvez exécuter à partir du client.
[zk: 127.0.0.1:2181(CONNECTED) 0] help
Vous devriez voir le résultat suivant :
ZooKeeper -server host:port cmd args addauth scheme auth close config [-c] [-w] [-s] connect host:port create [-s] [-e] [-c] [-t ttl] path [data] [acl] delete [-v version] path deleteall path delquota [-n|-b] path get [-s] [-w] path getAcl [-s] path history listquota path ls [-s] [-w] [-R] path ls2 path [watch] printwatches on|off quit reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*] redo cmdno removewatches path [-c|-d|-a] [-l] rmr path set [-s] [-v version] path data setAcl [-s] [-v version] [-R] path acl setquota -n|-b val path stat [-w] path sync path
Après le test, quittez la session client à l'aide de la commande quit :
[zk: 127.0.0.1:2181(CONNECTED) 0] quit
Vous pouvez maintenant arrêter le service Zookeeper avec la commande suivante :
/opt/zookeeper/bin/zkServer.sh stop
Vous devriez voir la commande suivante :
/usr/bin/java ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED
À ce stade, vous avez démarré et testé avec succès le serveur Zookeeper.
Créer un fichier de service Systemd pour Zookeeper
Ensuite, vous devrez créer un fichier de service systemd pour gérer le service Zookeeper à l'aide de systemd.
Vous pouvez le créer avec la commande suivante :
nano /etc/systemd/system/zookeeper.service
Ajoutez les lignes suivantes :
[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
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, rechargez le démon systemd avec la commande suivante :
systemctl daemon-reload
Ensuite, démarrez le service Zookeeper et activez-le après le redémarrage du système à l'aide de la commande suivante :
systemctl start zookeeper
systemctl enable zookeeper
Vous pouvez maintenant vérifier le statut de Zookeeper à l'aide de la commande suivante :
systemctl status zookeeper
Vous devriez voir le résultat suivant :
? zookeeper.service - Zookeeper Daemon Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2019-12-29 15:12:39 UTC; 8min ago Docs: http://zookeeper.apache.org Process: 9229 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS) Main PID: 9245 (java) Tasks: 29 (limit: 2359) Memory: 49.7M CGroup: /system.slice/zookeeper.service ??9245 java -Dzookeeper.log.dir=/opt/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-zookeeper-server-debian10.log -Dzookeeper. Dec 29 15:12:38 debian10 systemd[1]: Starting Zookeeper Daemon... Dec 29 15:12:38 debian10 zkServer.sh[9229]: /usr/bin/java Dec 29 15:12:38 debian10 zkServer.sh[9229]: ZooKeeper JMX enabled by default Dec 29 15:12:38 debian10 zkServer.sh[9229]: Using config: /opt/zookeeper/conf/zoo.cfg Dec 29 15:12:39 debian10 zkServer.sh[9229]: Starting zookeeper ... STARTED Dec 29 15:12:39 debian10 systemd[1]: Started Zookeeper Daemon.
Désormais, vous pouvez facilement gérer le service Zookeeper avec systemd.
Conclusion
Toutes nos félicitations! vous avez installé et configuré avec succès un cluster Zookeeper à nœud unique sur le serveur Debian 10. Cette configuration est très utile pour les environnements de développement et de test. J'espère que vous avez maintenant suffisamment de connaissances pour configurer un cluster Zookeeper à nœud unique. N'hésitez pas à me demander si vous avez des questions.