Part 1: ZooKeeper servers and terminal znodes
Open Docker Desktop, then open a terminal beside compose.yaml.
docker compose up -d
docker compose ps
docker compose exec zoo1 zkCli.sh -server zoo1:2181

At the ZooKeeper prompt, run one line at a time:
create /zoo
create /zoo/water-limit "1000 L"
get /zoo/water-limit
set /zoo/water-limit "800 L"
create -e /zoo/zebra-status "available"
ls /zoo
quit

Existing paths do not need to be created again. Persistent data is retained.
To stop the servers from the normal terminal: docker compose down
Part 2 adds the animal-service containers in a separate download.

TTL znodes are enabled on all servers with JVMFLAGS=-Dzookeeper.extendedTypesEnabled=true.

Optional quorum/ZAB monitoring:
Watch logs: docker compose logs -f --tail=100 zoo1 zoo2 zoo3
Keep compose-monitoring.yaml and logback-zab.xml beside compose.yaml.
Enable details: docker compose -f compose.yaml -f compose-monitoring.yaml up -d
Disable details: docker compose -f compose.yaml up -d --force-recreate
These changes recreate servers while keeping named data volumes.
