鱒身(Masu_mi)のブログ

知った事をメモする場所。

ZooKeeper 起動

ZooKeeper を試してみた。

試してみる(スタンドアロン)

OSXで試すだけ試すには以下を実行する。

インストールして、フォアグラウンドで動かす。別ターミナルからクライアントとしてアクセスもしてみる。

brew install zoookeeper
brew link zookeeper
zkServer
# 特に指定せずに実行すればサブコマンド・デフォルト設定ファイルが確認出来る
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

zkServer start-foreground # フォアグラウンドで実行
zkServer start            # 通常の実行(tmux上だと無理め)
# 別ターミナル
zkCli
> ls /
[zookeeper]
> help # zkCliで使用可能なコマンドを確認する

クォラムモードで動かす

以下を実行して設定ファイルなどを整えて実行する。 3.5系から動的構成が出来るようなので試したいけど、インストールが上手く行かないから後回し。

ZooKeeperの静的構成は設定ファイルにアンサンブルを構成するホスト全体の情報を記述する。 フォーマットは server.x=host:quorum_port:leader_selection_port[:observer] になる。

for d in `echo `1 2 3`
do
  mkdir -p host$d/data
  cat /usr/local/etc/zookeeper/zoo.cfg | \
  perl -e '$_ =~ s/^dataDir=.*$/dataDir=\.\/data/' -np > ./host$d/zoo.cfg
  echo $1 > ./host$d/
  # 設定ファイル末尾にZooKeeperのクォラムを構成するhostsの設定を追記する
  echo """
  server.1=127.0.0.1:2222:2223
  server.2=127.0.0.1:3332:3333
  server.3=127.0.0.1:4442:4443
  """ >> ./host$d/zoo.cfg
done
# 同hostで実行するのでportが衝突しないように clientPort を書き換える
vim ./host1/zoo.cfg ./host2/zoo.cfg ./host3/zoo.cfg

# 実行する
for dir in ls ./host*
do
  (cd $dir && \
  /usr/local/Cellar/zookeeper/3.4.6/libexec/bin/zkServer.sh start ./zoo.cfg)
done

# clientを実行する
zkCli -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
Connecting to 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 0] quit
Quitting...