ApacheZooKeeperと戯れてみる(Eclipseプラグイン紹介のオマケ付き)

その昔、VCS(Veritas Cluster Server)のエンジンログと戯れたりしてたのですが、
ZooKeeperをウマイこと使いこなせれば、あんな事やこんな事できるのかな?と。
 
ドキュメントとかみるとシンプルで使いやすい的な事が書いてあるけど、
自分で手動かしてみないと何とも言えないなぁと。
 
って事で早速試してみます。
 
■ Getting Started
↓さーて、また英語読まなきゃなのねーって思ってたら、、
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
 
↓なんと、日本語のページあるじゃねーすか!
http://oss.infoscience.co.jp/hadoop/zookeeper/docs/current/zookeeperStarted.html
 
が、ちょっと読んでみると、そもそもの事をもうちょっと知っといた方がイイかな、、と。
 
■ 概要
Overviewのページもちゃんと日本語訳が存在します↓
http://oss.infoscience.co.jp/hadoop/zookeeper/docs/current/zookeeperOver.html
 
大体分かったのですが、ZooKeeperそのものがどうやって一貫性を保証してるのかは
なんかちょっと良くわかりませんでした。。
 
↓を読むと、
Observers と ZooKeeper _1 « Agile Cat — in the cloud
たぶんポイントは以下の部分になるのだと思うのですが、

ZooKeeper makes sure that all reads and all writes are
observed by every client of the system in exactly the same order,
so that there’s no confusion about which operation happened first.
--
ZooKeeperは、すべてのreadとwriteがシステム上の全てのクライアントから、
完全に同じ順序で観察されることを保障するので、
どのオペレーションが最初に行われたのか、混乱が起こることが無くなる。

それがノードまたいだ時にどういう実装になるのかよくわかりまシェン。
ってか、逆にその辺を自分で実装思いつけちゃうくらいだったら、
もっと違う立場で仕事してるか、とか思いますけどww
 
んま、ググっていくとZAB(ZooKeeper Atomic Broadcast)と呼ばれる
ZooKeeper独自なプロトコルになってて↓なような感じになってるそです。

・ZooKeeperクラスタはリーダーと呼ばれるエロいエラいノードにコントロールされる
・各ノードの更新は一旦リーダーに通知されホゲホゲされた後に各ノードに返す
 各ノードの過半数がOKよんって事だったら、その更新は成功としてクライアントに通知される
・でもって、リーダーノードが落ちたら別のノードにフェールオーバーするよになってるよ、と。

俺も某@nishiokameganeみたいにこの辺を実装みて
ニヤニヤ出来るようになりたいなー…。
 
■ ZooKeeperをダウンロード
何か日本語のページから遷移したらリンク切れになっちゃってたのですが、
↓から安定版をダウンロードします。
http://ftp.meisei-u.ac.jp/mirror/apache/dist/zookeeper/stable/
落としてきて解凍します。ディレクトリ構造とかJavaだと親近感あるなー。

$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/zookeeper/stable/zookeeper-3.4.4.tar.gz
2012-11-02 19:49:24 (5.09 MB/s) – `zookeeper-3.4.4.tar.gz’ saved [16347805/16347805]
 
$ tar xvf zookeeper-3.4.4.tar.gz
zookeeper-3.4.4/
zookeeper-3.4.4/bin/
zookeeper-3.4.4/build.xml
~略~

 
■ ZooKeeperをReplicated Modeで起動
スタートガイドだとスタンドアロンモードなんだけど、それだとあんまり意味ないというか。
で、見てくと、ガイドの下の方に Running Replicated ZooKeeper って感じの所があります。
ほんとは複数台マシンでやれたらイイのですが、仕方ないので1台のマシンで。
 
bin/zkServer.sh を見ていくと、
第2引数でファイル名を指定出来る感じなのかな、と。

61 if [ “x$2” != “x” ]
62 then
63 ZOOCFG=”$ZOOCFGDIR/$2″
64 fi

 
って事で、設定ファイルを3つ用意します。
zoo1.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper1
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

zoo2.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper2
clientPort=2182
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

zoo3.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper3
clientPort=2183
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

ディレクトリも作っておきやす。

$ mkdir /tmp/zookeeper3
$ mkdir /tmp/zookeeper2
$ mkdir /tmp/zookeeper1

んで、それぞれ起動します。

$ ./zkServer.sh start zoo1.cfg
JMX enabled by default
Using config: /tmp/zookeeper-3.4.4/bin/../conf/zoo1.cfg
Starting zookeeper … STARTED
 
$ ./zkServer.sh start zoo2.cfg
JMX enabled by default
Using config: /tmp/zookeeper-3.4.4/bin/../conf/zoo2.cfg
Starting zookeeper … STARTED
 
$ ./zkServer.sh start zoo3.cfg
JMX enabled by default
Using config: /tmp/zookeeper-3.4.4/bin/../conf/zoo3.cfg
Starting zookeeper … STARTED

 
が、とかいってちゃんと上がってねー。。

Caused by: java.lang.IllegalArgumentException: /tmp/zookeeper3/myid file is missing

 
んで、myidってファイルをtouchしてもっかい起動したら、、、
このmyidファイルにはserver.1とかserver.2に対応する数字が入ってないとダメだそうで。。

Caused by: java.lang.IllegalArgumentException: serverid is not a number

 
そんなこんなでようやくサーバーを起動出来ました。。
 
■ クライアントから繋いでみます。

$ ./zkCli.sh -server localhost:2181
Connecting to localhost:2181
2012-11-02 20:42:03,473 [myid:] – INFO [main:Environment@100] – Client environment:zookeeper.version=3.4.4-1386507, built on 09/17/2012 08:33 GMT
~略~

 
ここからお楽しみーって感じなのですが、時間がないので、
また次回…。
 

[追記 2012 Nov 7]
 
ボケーっとTwitterみてたら、友人の @tocci3 が、
↓気になる事を呟いてたのでEclipse(ってかSTS)ユーザーとしては
見逃せねぇって事で絡んでみたら、

 
Help > Install New Softwareで、
↓の更新サイトで、
http://www.massedynamic.org/eclipse/updates/
↓こんな感じで Plug-in for ZooKeeperを突っ込んでやると、、

 
↓これまた直感的でナイスございます、と。

 
このEclipseプラグインは↓のHadoop Hacksに載ってたらしいす。

Hadoop Hacks ―プロフェッショナルが使う実践テクニック
中野 猛 山下 真一 猿田 浩輔 上新 卓也 小林 隆
オライリージャパン
売り上げランキング: 227088

 

Hadoop 第2版
Hadoop 第2版

posted with amazlet at 12.11.02
Tom White
オライリージャパン
売り上げランキング: 12904

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中