ZooKeeper を使ってみる(2)
1年半ぶりにZooKeeperネタ。複数サーバを立てるには、というお話。まずは同一ホストに複数のZooKeeperノードを立ててみる。
設定ファイル
設定ファイルをノードごとに用意する必要がある。最小限の設定ファイルは、下記のようになる。
tickTime=2000 dataDir=/tmp/zookeeper/1 clientPort=2181 initLimit=5 syncLimit=2 server.1=localhost:2881:3881 server.2=localhost:2882:3882 server.3=localhost:2883:3883
initLimit はフォロワー(リーダ以外のノード)がリーダに接続して同期する際の時間の(チック数での)上限。initLimitが5でtickTimeが2000msなのでこの場合は10秒が上限になる。
SyncLimit はfフォロワーがリーダに対して同期遅れになっていても許される時間の上限(チック数)、だそうだ。よくわからないけど。
同一ノードなので dataDir はそれぞれ異なるようにしないといけない。clientPortも同様。
server エントリでノードを指定する。番号はノード番号、後ろの2つはポート番号。これも同一ホスト上なので一つづつずらしてある。
myid
ちょっとハマったのはmyidというファイルを用意しないといけないということ。$(dataDir)/myid として、1とか2とか書かれたファイルが必要。こんなスクリプトを書いて生成してやる。
mkdir /tmp/zookeeper mkdir /tmp/zookeeper/1 mkdir /tmp/zookeeper/2 mkdir /tmp/zookeeper/3 echo '1' > /tmp/zookeeper/1/myid echo '2' > /tmp/zookeeper/2/myid echo '3' > /tmp/zookeeper/3/myid
起動
コンナスクリプトで一括して起動してやる。
export CLASSPATH=zookeeper-3.4.3.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf java -cp $CLASSPATH org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.1.cfg & java -cp $CLASSPATH org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.2.cfg & java -cp $CLASSPATH org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.3.cfg &