How to Setup Apache ZooKeeper Cluster on Ubuntu 18.04 LTS
How to Setup Apache ZooKeeper Cluster on Ubuntu 18.04 LTS
Zookeeper is a centralized service for managing configuration information, naming, distributed synchronization, and provisioning of group services that is published as open source software. It is written in a Java language that allows you to focus on the core application logic without worrying about the distributed nature of the application. ZooKeeper’s architecture supports high availability through redundant services. Zookeeper enables distributed processes to coordinate with each other via a common hierarchical namespace of data registers. Zookeeper also offers its customers high throughput, high availability, low latency and strictly controlled access to the Znodes. Zookeeper is specifically designed to store status information, configurations, location information, and more. ZooKeeper offers many features like reliable system, simple architecture, fast processing, scalability and much more.
In this tutorial, we will learn how to set up a single node Apache ZooKeeper Cluster on Ubuntu 18.04.eval(ez_write_tag([[580,400],’howtoforge_com-medrectangle-3′,’ezslot_2′,121,’0′,’0′]));
Requirements
- A server running Ubuntu 18.04.
- A root password is setup on your server.
Getting Started
First, you will need to update your system with the latest version. You can do this by running the following command:
apt-get update -y
apt-get upgrade -y
Once the system is updated, restart your system to apply all the changes.
Install Java
Zookeeper is written in Java. So, you will need to install Java to your system. By default, the latest version of Java is not available in the Ubuntu 18.04 default repository. So, add the Java repository with the following command:
add-apt-repository ppa:linuxuprising/java
Next, update the repository and install Java with the following command:
apt-get update -y
apt-get install oracle-java11-set-default
Once the Java has been installed, you can check the Java version with the following command:
java --version
You should see the following output:
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)
Once you have finished, you can proceed to the next step.
Create a ZooKeeper User
Next, you will need to create a zookeeper user to run zookeeper service.eval(ez_write_tag([[580,400],’howtoforge_com-medrectangle-4′,’ezslot_1′,108,’0′,’0′]));
First, create a zookeeper user with the following command:
useradd zookeeper -m
usermod --shell /bin/bash zookeeper
Next, set a password with the following command:
passwd zookeeper
Next, add the zookeeper user to the sudo group so it can run commands in a privileged mode:
usermod -aG sudo zookeeper
After creating user, you can procced to install ZooKeeper.
Install ZooKeeper
ZooKeeper stores all configuration and state data to disk. So, you will need to create a directory structure for ZooKeeper with the following command:
mkdir -p /data/zookeeper
Next, give proper ownership to the /data directory with the following command:
chown -R zookeeper:zookeeper /data/zookeeper
Next, change the directory to the /opt and download the latest version of ZooKeeper with the following command:
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
Next, extract the downloaded file with the following command:
tar -xvzf zookeeper-3.4.9.tar.gz
Next, rename the extracted binary with the following command:
mv zookeeper-3.4.9 zookeeper
Next, give ownership to the ZooKeeper user with the following command:
chown -R zookeeper:zookeeper /opt/zookeeper
Configure ZooKeeper
Next, you will need to create a configuration file for ZooKeeper. You can do it with the following command:
nano /opt/zookeeper/conf/zoo.cfg
Add the following lines:
tickTime=2500 dataDir=/data/zookeeper clientPort=2181 maxClientCnxns=80
Save and close the file, when you are finished.
Next, start the ZooKeeper service with the following command:
cd /opt/zookeeper
bin/zkServer.sh start
You should see the following output:
ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
You can connect to the local ZooKeeper server with the following command:
bin/zkCli.sh -server 127.0.0.1:2181
Once you have connected successfully, you should see the following output:
[zk: 127.0.0.1:2181(CONNECTED) 1]
Now, type help on the prompt, you should see the a list of commands that you can execute from the client.
help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
Now, type quit to exit from the connected session.
You can stop the ZooKeeper with the following command:
bin/zkServer.sh stop
You should see the following output:
ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED
Create a Systemd Service file for ZooKeeper
Next, you will need to create a systemd service file to manage ZooKeeper service. You can do it with the following command:
nano /etc/systemd/system/zookeeper.service
Add the following lines:
[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
Save and close the file, when you are finished.
Next, reload the systemd daemon, start the ZooKeeper service and enable it to start on boot time with the following command:
systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper
You can check the status of ZooKeeper service with the following command:
systemctl status zookeeper
You should see the following output:
? zookeeper.service - Zookeeper Daemon Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2019-03-06 15:03:01 UTC; 5s ago Docs: http://zookeeper.apache.org Process: 3909 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS) Main PID: 3926 (java) Tasks: 17 (limit: 1113) CGroup: /system.slice/zookeeper.service ??3926 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /opt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/.. Mar 06 15:03:00 ubuntu1804 systemd[1]: Starting Zookeeper Daemon... Mar 06 15:03:00 ubuntu1804 zkServer.sh[3909]: ZooKeeper JMX enabled by default Mar 06 15:03:00 ubuntu1804 zkServer.sh[3909]: Using config: /opt/zookeeper/conf/zoo.cfg Mar 06 15:03:01 ubuntu1804 zkServer.sh[3909]: Starting zookeeper ... STARTED Mar 06 15:03:01 ubuntu1804 systemd[1]: Started Zookeeper Daemon.
Congratulations! you have successfully installed and configured ZooKeeper single node cluster on Ubuntu 18.04 server. You can now deploy multi-node ZooKeeper cluster for production. Feel free to ask me if you have any questions.