ZooKeeper is an Apache Software Foundation project designed to simplify monitoring and managing group services. It uses a simple interface for its centralized coordination service that manages configuration, information, naming, distributed synchronization, and provisioning.
In this tutorial, learn how to install and set up Apache ZooKeeper on Ubuntu 18.04 or 20.04.
- A Linux system running Ubuntu 20.04 or 18.04
- Access to a terminal window/command line (Search > Terminal)
- A user account with sudo or root privileges
Installing Apache ZooKeeper on Ubuntu
Step 1: Installing Java
ZooKeeper is written in Java and requires this programming language to work. To check whether Java is already installed, run the command:
If the output displays a running Java version, you can move on to the next step. If the system says there is
<strong>no such file or directory</strong>, you need to install Java before moving on to ZooKeeper.
There are different open-source Java packages available for Ubuntu. Find which one is best for you and its installation guide in How to Install Java on Ubuntu. The instructions apply to Ubuntu 18.04 and Ubuntu 20.04.
Step 2: Creating a User for ZooKeeper
1. Create a separate user for the ZooKeeper service by typing:
useradd zookeeper -m
<strong>-m</strong> flag creates a home directory for the user. In this case, it will be
/home/zookeeper. To name the user differently, replace
zookeeper with the name of your choice.
2. Next, set
bash as the default shell for the new user with the command:
usermod --shell /bin/bash zookeeper
3. Set a password for the user:
Type and retype a strong password for the ZooKeeper user.
4. Then, add the user to the sudoers group for it to have sudo privileges:
usermod -aG sudo zookeeper
5. Check to verify that the user is now a superuser by listing the accounts in the sudoers group:
sudo getent group sudo
The output should display the user you created.
Step 3: Creating a ZooKeeper Data Directory
Before installing ZooKeeper, create a directory structure where it can store configuration and state data (on a local disk or remote storage).
To store the data on the local machine, first create a new ZooKeeper directory by running:
sudo mkdir -p /data/zookeeper
Then, give the ZooKeeper user ownership to that directory:
chown -R zookeeper:zookeeper /data/zookeeper
Step 4: Downloading and Installing ZooKeeper
1. Open a web browser of your choice and navigate to the Apache ZooKeeper Download Page. The latest stable release appears at the top of the page. Click on the version you want to install to open the Apache download mirrors.
2. Copy the HTTP address for the suggested mirror site.
3. Go back to the command line and move to the
4. Use the
<strong>wget</strong> command to download the .tar file. Paste the link copied from the official Apache web page:
sudo wget https://downloads.apache.org/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
5. Extract the file by running:
sudo tar -xvf apache-zookeeper-3.6.1-bin.tar.gz
Note: When extracting the file, the name of the ZooKeeper binary package will vary. Make sure it matches the file you downloaded.
6. Rename the extracted file to
<strong>zookeeper</strong> with the command:
mv apache-zookeeper-3.6.1-bin zookeeper
7. Give the zookeeper user ownership of that file by running:
chown -R zookeeper:zookeeper /opt/zookeeper
Step 5: Configuring ZooKeeper in Standalone Mode
The next step is creating a configuration file for ZooKeeper. The configuration below sets up ZooKeeper in standalone mode (used for developing and testing). For production environments, you need to run ZooKeeper in replication mode.
To configure ZooKeeper in standalone mode, create a new zoo.cfg file in the zookeeper directory:
sudo nano /opt/zookeeper/conf/zoo.cfg
Add the following lines:
tickTime = 2000 dataDir = /data/zookeeper clientPort = 2181 initLimit = 5 syncLimit = 2
Save and exit the text editor.
Bear in mind this is a basic configuration setting for a single node cluster. The file can differ according to your needs. The lines above consist of the following:
<strong>tickTime</strong>: The number of milliseconds of each tick.
<strong>dataDir</strong>: The directory where snapshots of the in-memory database and transaction log for updates are stored.
<strong>clientPort</strong>: The port listening for client connections.
<strong>initLimit</strong>: The number of ticks that the initial synchronization phase can take.
<strong>syncLimit</strong>: The number of ticks that can pass between sending a request and getting an acknowledgement.
Step 6: Starting the ZooKeeper Service
Now, you can start the ZooKeeper service. Run the following command inside the /opt directory. If you exited out of the directory, navigate in it with
To start the ZooKeeper service use the command:
sudo bin/zkServer.sh start
The output should display that ZooKeeper has STARTED.
Step 7: Connecting to the ZooKeeper Server
Once you have started the service, you can connect to the ZooKeeper server. In this guide, it is the local server.
Connect to ZooKeeper with the command:
bin/zkCli.sh -server 127.0.0.1:2181
Wait for the output to open a new
<strong>zk</strong> prompt, which should confirm you are CONNECTED.
To see a list of available commands, run the following command in the new command prompt:
To close the session, type:
To stop the ZooKeeper service, run the command:
Step 8: Creating a System Service File
Finally, you need to create a service file to manage ZooKeeper.
1. Create a new zookeeper.service file in a text editor of your choice:
sudo nano /etc/systemd/system/zookeeper.service
2. Paste the following content into the file:
[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
3. Save and exit the file.
4. Reload the systemd service by running:
5. Then, start the ZooKeeper service and enable it to start on boot:
systemctl start zookeeper
systemctl enable zookeeper
6. Verify the service is up and running with the command:
systemctl status zookeeper
You should see ZooKeeper is active (running).
Configuring Replicated ZooKeeper
A production environment requires setting up a replicated cluster of ZooKeeper nodes.
Once you have installed Java, created a ZooKeeper user, and downloaded the binary package, you need to create a configuration file. Unlike the basic configuration for standalone mode, replicated mode includes a few more lines.
All the servers in the same application need to have copies of the configuration file.
Create each file with the command:
sudo nano /opt/zookeeper/conf/zoo.cfg
Then, paste the following content into the file:
tickTime=2000 dataDir=/var/zookeeper clientPort=2181 initLimit=5 syncLimit=2 server.1=[server_ip]:2888:3888 server.2=[server_ip]:2888:3888 server.3=[server_ip]:2888:3888
Save and exit the file. Repeat the process on each server in the group.
With this, you have successfully installed Apache ZooKeeper on Ubuntu! As mentioned above, this installation works on Ubuntu 18.04 and on the latest 20.04 release.