Apache ZooKeeper installeren op Debian 10

Apache Zookeeper is een gratis en open-source dienst voor gedistribueerde systemen die je helpt om een grote verzameling hosts te beheren. Het is een gecentraliseerde dienst die gebruikt wordt voor het bijhouden van configuratie-informatie, naamgeving en groepsdiensten. Het is geschreven in Java en stelt ontwikkelaars in staat zich te concentreren op het bouwen van softwarefuncties zonder zich zorgen te maken over het gedistribueerde karakter van de toepassing. Apache ZooKeeper wordt het meest gebruikt in “lees-dominante” werklasten waar veel vaker gelezen wordt dan geschreven. Het heeft een rijke verzameling mogelijkheden, waaronder, Synchronisatie, Geordende berichten, Serialisatie, Betrouwbaarheid, Atomiciteit, Snelle verwerking en nog veel meer. Het heeft een locking en synchronisatie mechanisme dat je helpt bij automatisch faalherstel terwijl je andere verdeelde toepassingen verbindt. Het Zookeeper project is een van de meest succesvolle projecten van de Apache stichting. Veel bedrijven hebben Zookeeper geadopteerd om op grote schaal hoog beschikbare verdeelde systemen te maken.

In deze handleiding laten we je zien hoe je een single-node Apache Zookeeper cluster opzet op Debian 10 server.

Vereisten

  • Een server met Debian 10 en 2 GB RAM.
  • Een root wachtwoord is op je server ingesteld.

Aan de slag

Alvorens te beginnen is het aan te raden je server met de nieuwste versie te updaten. Je kunt hem bijwerken met het volgende commando:

apt-get update -y
apt-get upgrade -y

Zodra je server bijgewerkt is, herstart je hem om de veranderingen door te voeren.

Installeer Java

Apache Zookeeper is geschreven in de Java taal. Je zult dus Java in je systeem moeten installeren. Standaard is de nieuwste versie van Java beschikbaar in de standaard repository van Debian 10. Je kunt het installeren door het volgende commando uit te voeren:

apt-get install default-jdk -y

Controleer na de installatie van Java de geïnstalleerde versie van Java met het volgende commando:

java --version

Je zou de volgende uitvoer moeten krijgen:

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)

Als je klaar bent, kun je verder gaan met het aanmaken van een systeemgebruiker voor Zookeeper.

Maak een systeemgebruiker voor Zookeeper

Het is een goed idee om een speciale gebruiker aan te maken om de Zookeeper dienst te draaien. Dit verbetert je beveiliging en beheerbaarheid.

Voer eerst het volgende commando uit om een zookeeper gebruiker met home directory aan te maken:

useradd zookeeper -m

Stel vervolgens de standaard shell voor de zookeeper gebruiker in met het volgende commando:

usermod --shell /bin/bash zookeeper

Stel vervolgens een wachtwoord in voor de zookeeper gebruiker met het volgende commando:

passwd zookeeper

Voeg vervolgens de zookeeper gebruiker toe aan de sudo groep:

usermod -aG sudo zookeeper

Op dit punt heb je de zookeeper gebruiker gemaakt en ingesteld. Je kunt nu verder gaan met het downloaden van de Zookeeper.

Zookeeper downloaden

Eerst moet je de nieuwste versie van de Apache Zookeeper downloaden van zijn officiële website. Op het moment van schrijven van dit artikel is de nieuwste versie van Apache Zookeeper 3.5.6.

Om het te downloaden verander je de directory in de /opt en voer je het volgende commando uit:

cd /opt
wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.6-bin.tar.gz

Als de download voltooid is, pak je het gedownloade bestand uit met het volgende commando:

tar -xvzf apache-zookeeper-3.5.6-bin.tar.gz

Hernoem vervolgens de uitgepakte directory tot zookeeper en geef de juiste permissies:

mv apache-zookeeper-3.5.6-bin zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper

Vervolgens moet je een gegevensmap maken voor Zookeeper om alle configuratie- en toestandsgegevens in op te slaan. Je kunt er een aanmaken op het lokale bestandssysteem of op het externe bestandssysteem, afhankelijk van je behoefte.

Je kunt een gegevensmap aanmaken met het volgende commando:

mkdir -p /data/zookeeper

Verander vervolgens het eigendom van de gegevensmap in zookeeper gebruiker:

chown -R zookeeper:zookeeper /data/zookeeper

Op dit punt heb je Zookeeper gedownload en er een gegevensmap voor gemaakt. Je kunt nu verder gaan met het instellen van de Zookeeper.

Zookeeper configureren

Alle configuratiebestanden van Zookeeper staan in de map /opt/zookeeper/conf/. Je kunt een Zookeeper configuratiebestand binnen de map /opt/zookeeper/conf/ maken met het volgende commando:

nano /opt/zookeeper/conf/zoo.cfg

Voeg de volgende regels toe:

tickTime=2500
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=80

Sla het bestand op en sluit het als je klaar bent.

Waar:

  • tickTime: Deze optie stelt de lengte van een tick in milliseconden in.
  • dataDir: Specificeer de gegevensdirectory om Zookeeper gegevens op te slaan.
  • clientPort: Specificeer de poort die gebruikt wordt om te luisteren naar clientverbindingen.
  • maxClientCnxns: Wordt gebruikt om het maximum aantal cliëntverbindingen te beperken.

Opmerking: Bovenstaande parameters zijn voor ontwikkeling en testen. Je kunt ze naar eigen behoefte veranderen.

Op dit punt heb je Zookeeper ingesteld. Je kunt nu de Zookeeper server starten.

Start en test de Zookeeper server

Je kunt de Zookeeper server starten met het volgende commando:

/opt/zookeeper/bin/zkServer.sh start

Je zou de volgende uitvoer moeten krijgen:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

Vervolgens kun je verbinding maken met de Zookeeper server op poort 2181 met het volgende commando:

/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

Eenmaal verbonden zou je de volgende uitvoer moeten zien:

[zk: 127.0.0.1:2181(CONNECTED) 0]

Voer vervolgens het help commando uit om een lijst te krijgen van commando’s die je vanuit de client kunt uitvoeren.

[zk: 127.0.0.1:2181(CONNECTED) 0] help

Je zou de volgende uitvoer moeten zien:

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

Verlaat na het testen de clientsessie met het commando quit:

[zk: 127.0.0.1:2181(CONNECTED) 0] quit

Je kunt nu de Zookeeper dienst stoppen met het volgende commando:

/opt/zookeeper/bin/zkServer.sh stop

Je zou het volgende commando moeten zien:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

Op dit punt heb je de Zookeeper server met succes gestart en getest.

Maak een Systemd Service Bestand voor Zookeeper

Vervolgens moet je een systemd service bestand maken om de Zookeeper dienst met systemd te beheren.

Je kunt het aanmaken met het volgende commando:

nano /etc/systemd/system/zookeeper.service

Voeg de volgende regels toe:

[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

Sla het bestand op en sluit het als je klaar bent. Herlaad dan de systemd daemon met het volgende commando:

systemctl daemon-reload

Start vervolgens de Zookeeper service en zet hem aan om te starten na het herstarten van het systeem met het volgende commando:

systemctl start zookeeper
systemctl enable zookeeper

Je kunt nu de status van Zookeeper controleren met het volgende commando:

systemctl status zookeeper

Je zou de volgende uitvoer moeten zien:

? 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.

Nu kun je de Zookeeper dienst gemakkelijk beheren met systemd.

Conclusie

Gefeliciteerd! Je hebt met succes een single node Zookeeper cluster op Debian 10 server geïnstalleerd en geconfigureerd. Deze opstelling is erg nuttig voor ontwikkelings- en testomgevingen. Ik hoop dat je nu genoeg kennis hebt om een single node Zookeeper cluster op te zetten. Voel je vrij me te vragen als je vragen hebt.