ZooKeeperオープンソースによる運用管理と運用自動化

Apache ZooKeeper(アパッチ・ズーキーパー)は、分散環境の運用支援サービスを提供するコーディネーションエンジンである。各ノード、つまりシステム全体を中央集権的に保守管理する機能を提供する。「設定管理」「名前解決」「同期」「グループサービス」など、利用頻度の高いさまざまなサービスを提供する。

概要

Apache ZooKeeper(アパッチ・ズーキーパー)は、分散環境の運用支援サービスを提供するコーディネーションエンジンである。各ノード、つまりシステム全体を中央集権的に保守管理する機能を提供する。

基本説明

分散アプリケーションを実装する場合、各分散ノードの設定などに大量の作業が発生する。ZooKeeperは構成作業のような本質的な部分を取り出し、中央集権的なコーディネーションサービスとして簡単なインターフェースを提供する。

ZooKeeperは「設定管理」「名前解決」「同期」「グループサービス」など、利用頻度の高いさまざまなサービスを提供する。

標準機能として「合意プロトコル」「グループ管理プロトコル」「リーダー選出プロトコル」「プレゼンスプロトコル」などを利用できる。独自の要件に対応したサービスの構築も可能である。

Apacheソフトウェア財団のオープンソースプロジェクトであり、Hadoopのサブプロジェクトの一つである。Javaで実装され、JVM上で動作する。Java/C言語向けのAPIが提供されている。

主な特徴

高スループット/低レイテンシ

ZooKeeperが管理するさまざまなデータはストレージではなくメモリに保持されるため、高いスループットと低い遅延を提供する。
高い性能を発揮できるため、大規模分散システムに対応できる。クライアントからのアクセスが読み取り中心の場合は、特に高速に動作できる。

高可用性(マスター冗長化)

ZooKeeperは複数のサーバーにインストールして利用できる。可用性を高め、性能向上も期待できる。ZooKeeperを複数起動すると、マスターが自動的に選択され、各種の統括管理を実行する。
ZooKeeperのマスターノードが何らかの理由で停止すると、各ノード間で選挙が行われ、新しいマスターノードが選択される。

原子性

ZooKeeperが管理するデータは原子的に読み書きできる。クライアントの更新は順番に一つずつ適用される。各ノードごとにアクセス制限を設定することもできる。

階層的な名前空間

ZooKeeperはデータを階層的な名前空間に保存する。複数のサーバーに分散している各プロセスは、この名前空間を共有することで、互いに協調しながら分散処理を進める。

ノード間の不一致を排除

データ更新はマスターノードだけが実行するため、ノード間でデータ内容が矛盾しない構造になっている。

主な機能

共有設定機能

構成ファイルをZooKeeperサーバーに保存し、各インスタンスがZooKeeperに保存された構成ファイルを取得すれば、各インスタンスの構成ファイルが同一であることを確認できる。

分散ロック機能

複数のインスタンスが同時に共有リソースを書き換えないようにするロック機能がある。

メンバー取得機能

分散システムの各インスタンスがZooKeeperの一時ノードを登録すると、分散システム内で利用可能なインスタンス一覧を取得できる。各クライアントは稼働中のサーバーに接続できる。

ウォッチ機能

特定のプロセスが特定のZooKeeperノードを監視している場合、そのZooKeeperノードに変更があると、プロセスに変更が通知される。設定ファイルの再読み込みトリガーなどに利用できる。

導入事例

分散キーバリューデータベース「HBase」、検索エンジン「SolrCloud」、分散リアルタイムストリーム処理エンジン「Jubatus」などで導入されている。
主な適用分野には「ディレクトリサービス」「構成管理サービス」「同期サービス」「リーダー選出サービス」「メッセージキューサービス」「エンタープライズ検索システム」などがある。

ライセンス情報

Apache ZooKeeperのライセンスは「Apache License 2.0」である。このライセンスに従って、ソースコードを修正して公開できる。

ダウンロード