Zabの概要
ZooKeeperは同意アルゴリズムにPaxos派生のZabを用いている。 簡易資料は以下が良さそうなので後で読みます。
- http://d.hatena.ne.jp/minghai/20110315/p1
- http://d.hatena.ne.jp/minghai/20110308
- http://open-groove.net/all-things-technology/paxos/
構成要素
アンサンブルを構成する各ノードは以下に分類される。
- Leader(L)
-
- リーダーは、マスタデータを持つ
- リーダー選出・変更投票に参加する(PARTICIPANTサーバ)
- リーダーから外れたらフォロワーとなる
- Follower(F)
-
- フォロワーはリーダーの状態を持つ(Learner)
- リーダー選出・変更投票に参加する(PARTICIPANTサーバ)
- Observer(O)
-
- オブザーバーはリーダーの状態を持つ(Learner)
- リーダー選出・変更投票に参加しない
プロトコル
Zabでは過半数のアンサンブル(Quorum)に支持されているLeaderが存在している前提で動く。 リーダーは多数決で行う。Zabでは、この状態で以下のように行う。
- L->F: PROPOSAL(トランザクションログを同期書き込み)
- F->L: ACK(書き込み成功したら返信を行う)
- L->F: COMMIT(変更操作を有効にする), L->O: INFOM(Observerに通知)
オブザーバは更新合意の投票に参加せずリーダーに選出されることもない。 これは更新のオーバヘッドを抑えつつ読み込みスケールさせるため。
トランザクションログ書き込み
- 事前に大きめなファイルを確保して、読み込みアクセスをシーケンシャルにする
-
- 変更保証のために同期書き込みがクリティカルパス上で発生する
- 専用デバイスにする事が推奨される