Java実行環境の準備
まず、システムを更新してOpenJDKをインストールします。
sudo apt update
sudo apt install openjdk-11-jre-headless
ZooKeeperの導入と起動
公式ミラーからアーカイブを取得し、展開します。
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar xzf zookeeper-3.4.14.tar.gz
設定ファイルを作成してサービスを開始します。
cd zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg
cd ../bin
./zkServer.sh start
単一マシン上での擬似クラスタ構成
同一ホスト上で複数ノードを動作させるために、ディレクトリを複製します。
cp -r zookeeper-3.4.14 zk-node1
cp -r zookeeper-3.4.14 zk-node2
cp -r zookeeper-3.4.14 zk-node3
各ノードのconf/zoo.cfgを個別に調整します。例としてzk-node1の設定:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zk-node1/data
dataLogDir=/var/log/zk-node1
clientPort=21811
server.1=localhost:28881:38881
server.2=localhost:28882:38882
server.3=localhost:28883:38883
データディレクトリと識別子ファイルを生成します。
mkdir -p /var/lib/zk-node{1,2,3}/data /var/log/zk-node{1,2,3}
echo 1 > /var/lib/zk-node1/data/myid
echo 2 > /var/lib/zk-node2/data/myid
echo 3 > /var/lib/zk-node3/data/myid
全ノードを起動し、状態を確認します。
for i in {1..3}; do ./zk-node$i/bin/zkServer.sh start; done
for i in {1..3}; do ./zk-node$i/bin/zkServer.sh status; done
分散クラスタ構成
複数サーバーに跨る本格的なクラスタは、各ノードを別マシンに配置し、IPアドレスを明示的に指定することで構築可能です。
クライアント操作とノード管理
カスタムポートで接続し、基本的なznode操作を行います。
./bin/zkCli.sh -server localhost:21811
[zk: localhost:21811(CONNECTED) 0] create /demo "Hello"
Created /demo
[zk: localhost:21811(CONNECTED) 1] ls /
[zookeeper, demo]
[zk: localhost:21811(CONNECTED) 2] get /demo
Hello
cZxid = 0x100000002
ctime = Mon Apr 06 22:01:48 CST 2020
mZxid = 0x100000002
mtime = Mon Apr 06 22:01:48 CST 2020
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:21811(CONNECTED) 3] delete /demo
メタデータフィールドの解説
- cZxid:ノード作成時のトランザクションID
- ctime:作成時刻
- mZxid:最終更新時のトランザクションID
- mtime:最終更新時刻
- pZxid:子ノード変更時の最新トランザクションID
- cversion:直下の子ノード追加/削除回数
- dataVersion:データ内容の変更回数
- aclVersion:アクセス制御リストの変更回数
- ephemeralOwner:一時ノードの場合の所有セッションID(永続ノードなら0)
- dataLength:データバイト長
- numChildren:直下の子ノード数