ZooKeeper Setup

✨ Feature

ZooKeeper is a centralized service that plays a critical role in maintaining configuration information, providing distributed synchronization, managing naming services, and offering group services. Germain relies on ZooKeeper as an essential component of its infrastructure.

⬇️ Download

ZooKeeper 3.6.3 or later is supported.

Download Apache ZooKeeper

🚀 Deploy

Step

Action / Details

Extract archive

Extract the archive to a directory of your choice. In this example, we will use /opt/zookeeper.

Create config clone

Create a clone of the sample config:

bashCopy codecp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

Update dataDir

Update the dataDir setting in zoo.cfg to match the data directory:

javascriptCopy codedataDir=/opt/zookeeper/data

Disable admin server

Add the following entries to the end of zoo.cfg to disable the ZooKeeper admin server:

arduinoCopy codeadmin.enableServer=false
admin.serverPort=9080

⏯️ Start ZooKeeper

This startup method is sufficient for a development or test environment. For a production environment, it is recommended to run ZooKeeper instances as a service.

Method

Command / Details

Run via shell (Linux)

Run ZooKeeper via the shell (on Linux):

bashCopy code/opt/zookeeper/bin/zkServer.sh start

Run via command (Windows)

Run ZooKeeper via command (on Windows):

makefileCopy codec:\opt\zookeeper\bin\zkServer.cmd

⚙️ Run ZooKeeper as a service on Windows

Step

Action / Details

Copy service files

Copy ZooKeeperService.exe and ZooKeeperService.xml from {serviceDistroDirectory}\install\zookeeper\ to your ZooKeeper bin directory.

Install service

From an administrative command line, run:

Copy codeZooKeeperService.exe install

Start service

Start the Apache ZooKeeper Windows Service using your preferred method.

🌱 Bootstrap a ZooKeeper deployment

Step

Action / Details

Start command line

Start the ZK command line via:

bashCopy code/opt/zookeeper/bin/zkCli.sh

Execute bootstrap commands

Execute the following commands from within zkCli to populate the required bootstrap entries.

Note: The name of the environment in this case will be "germain". Change this value only if you plan to host multiple APM environments on the same ZooKeeper cluster, such as "prod" and "stage".

luaCopy codecreate /config ""
create /config/germain ""
create /config/germain/rest-services ""
create /config/germain/rest-services/logging.config "${catalina.base}/conf/rest-logback.xml"
create /config/germain/ingestion-services ""
create /config/germain/ingestion-services/logging.config "${catalina.base}/conf/ingestion-logback.xml"

To import existing settings from common.properties, build and run the germain-apm\Util\ZkConfig module. The utility requires three arguments:

Argument

Description

ZooKeeper target

ZooKeeper target IP and port.

Config root

Config root to store the setting under.

Path to properties

Path to common.properties file to import.

📝 Example

Example:

arduinoCopy codejava com.germainsoftware.apm.zkconfig.ZKConfig 127.0.0.1:2181 /config/germain/application common.properties

Alternatively, you can use the commands found in {serviceDistroDirectory}\install\zookeeper\bootstrap.zk to populate common bootstrap settings.