MacでZooKeeperアンサンブル

表題の通り。

■ 環境

  • Apache ZooKeeper 3.4.6
  • Mac OSX (10.10.5)
  • Homebrew

■ アンサンブル構成

1台のMac上に、3つのZooKeeperプロセスを稼働させアンサンブルを構築する。

■ 設定ファイル

ZooKeeperの設定ファイルは”zoo.cfg“であるが、今回は1台のMac上に3つのZooKeeperプロセスを稼働させるため、設定ファイルは3つ用意する。

$ cd /usr/local/etc/zookeeper/
$ ls
defaults         log4j.properties zoo.cfg          zoo_sample.cfg
$

デフォルトで使用される設定ファイルのディレクトリは上記の通りなので、ここに既存の”zoo.cfg“を元に作成する。それぞれ”zoo1.cfg“, “zoo2.cfg“, “zoo3.cfg“とした。”clientPort“, “dataDir“は設定ファイル毎に変更する必要があるので、それぞれ変更している。またアンサンブル構成用に下記も追記した。

server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2390:3890

clientPort“, アンサンブル設定時に必要な同期に使用されるポート、LeaderElectionのポートはそれぞれ1ずつ増やしただけにしている。

また”dataDir“もそれぞれ変更をしているので作成した。

$ cd /usr/local/var/run/zookeeper/
$ ls
data
$
$ mkdir data{1,2,3}
$
$ ls
data  data1 data2 data3
$

この作成したディレクトリにそれぞれ”myid“ファイルを作成しておく。

$ echo 1 > data1/myid
$ echo 2 > data2/myid
$ echo 3 > data3/myid

以上で準備は終了である。

■ 起動

それぞれ起動する。

$ zkServer start zoo1.cfg
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Starting zookeeper ... STARTED
$
$ zkServer start zoo2.cfg
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo2.cfg
Starting zookeeper ... STARTED
$
$ zkServer start zoo3.cfg
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo3.cfg
Starting zookeeper ... STARTED
$

ZooKeeperのプロセス(QuorumPeerMain)が3つ稼働していれば問題ないであろう。

それぞれの”clientPort“に4文字コマンドでアクセスしてみる。

$ echo srvr | nc localhost 2181
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Latency min/avg/max: 0/0/0
Received: 3
Sent: 2
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
$
$ echo srvr | nc localhost 2182
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x200000000
Mode: leader
Node count: 4
$
$ echo srvr | nc localhost 2183
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x200000000
Mode: follower
Node count: 4
$

これらから、”zoo2.cfg“で起動しているZooKeeperがリーダーとなりアンサンブルを構成していることがわかる。

■ 動作確認

zoo1.cfg“で起動しているZooKeeperにアクセスしznodeを作成する。その値が”zoo3.cfg“で起動しているZooKeeperにアクセスし同じ値が取得できれば問題なくアンサンブルが稼働しているとわかるであろう。

$ zkCli -server localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create /test zoo1.cfg
Created /test
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper, test]
[zk: localhost:2181(CONNECTED) 3] get /test
zoo1.cfg
cZxid = 0x200000002
ctime = Wed Oct 28 19:14:12 JST 2015
mZxid = 0x200000002
mtime = Wed Oct 28 19:14:12 JST 2015
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: localhost:2181(CONNECTED) 4] quit
Quitting...
$
$ zkCli -server localhost:2183
Connecting to localhost:2183
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2183(CONNECTED) 0] ls /
[zookeeper, test]
[zk: localhost:2183(CONNECTED) 1] get /test
zoo1.cfg
cZxid = 0x200000002
ctime = Wed Oct 28 19:14:12 JST 2015
mZxid = 0x200000002
mtime = Wed Oct 28 19:14:12 JST 2015
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: localhost:2183(CONNECTED) 2] quit
Quitting...
$

思い通りの結果が得られた。

以上。

■ 関連

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください