ZooKeeper アンサンブル接続、リーダー選出、データ同期
Zookeeper は分散システム管理を行うためのツールです。
http://oss.infoscience.co.jp/hadoop/zookeeper/docs/r3.3.1/index.html
http://open-groove.net/zookeeper/zookeepr-config/
難しい分散アプリケーションを構築するにあたって、便利な仕組みを提供してくれるようです。
Zookeeper について調べていた内に、上の記事でなるほどと思ったことについて列挙します。(より基本的な内容は割愛しています。すみません)
複数のサーバで ZooKeeper アンサンブルを構成することで、高い可用性を実現することが出来るようなので、出来れば近い内に、簡単なアプリを作って動作確認をしてみたいところです。
ZooKeeperサーバ間の接続について
- リーダーとメンバー間のみで接続される。
- 基本的にメンバー間での接続は発生しない。(リーダー選出時と、リーダーを捜す時は、メンバー間での通信が発生する)
リーダーの選出について
- ZooKeeper サーバの起動時(アンサンブル形成時)に、リーダーが選出される。
- 過半数のサーバからの承認を得た上で、リーダーとしての活動を開始する。
- リーダーのサーバが停止した場合、稼働中のサーバ間で改めてリーダーの選出を行う。
- リーダー選出のアルゴリズムは3らしい。(electionAlg=3)
データの同期について
- 全てのデータ同期処理は、リーダーを通して行われる。
- リーダーは各ZooKeeper サーバからの更新要求を順次受け付け、全ての ZooKeeper サーバに対して、更新要求を送信する。
- 過半数以上のサーバから承認を得た上で、その変更内容を COMMIT する。(全ての ZooKeeper サーバへ通知する)
- メモリ内にデータが保持されるため、スループット(特に読み込み)が速い。