ZooKeeperは、Apacheソフトウェア財団のオープンソースプロジェクトの1つで、大規模分散システムの協調動作を実現するツール。分散システムが協調動作するために必要なコア機能を提供することで、開発者の負荷を大幅に低減します。HiveやHadoopの新しいスケジューラであるYARNなど、多くのプロジェクト、企業、組織で利用されつつあります。分散システムの協調動作に頭を悩ませていた多くの開発者にとって福音となる、ZooKeeperを使った効果的な分散システムの管理手法、スマートな問題解決法を提示します。
ZooKeeperによる分散システム管理
Flavio Junqueira、Benjamin Reed 著、中田 秀基 訳
目次
まえがき I部 ZooKeeperのコンセプトと基本 1章 はじめに 1.1 ZooKeeperの使命 1.1.1 これまでZooKeeperなしでどうやってきたのか? 1.1.2 ZooKeeperがしてくれないこと 1.1.3 Apacheプロジェクト 1.1.4 ZooKeeperを用いた分散システムの構築 1.2 例:マスタ・ワーカアプリケーション 1.2.1 マスタの障害 1.2.2 ワーカの障害 1.2.3 通信の障害 1.2.4 タスクのまとめ 1.3 分散コーディネーションはなぜ難しいのか 1.4 ZooKeeperは成功した。但し書きつきで 2章 ZooKeeperを制御する 2.1 ZooKeeperの基本 2.1.1 APIの概要 2.1.2 znodeのモード 2.1.3 監視と通知 2.1.4 バージョン 2.2 ZooKeeperのアーキテクチャ 2.2.1 ZooKeeperのクォラム 2.2.2 セッション 2.3 ZooKeeperを試してみよう 2.3.1 最初のZooKeeperセッション 2.3.2 セッションの状態とライフタイム 2.3.3 クォラムを用いたZooKeeper 2.3.4 基本機能要素の実装:ZooKeeperによるロック 2.4 マスタ・ワーカアプリケーションサンプルの実装 2.4.1 マスタの役割 2.4.2 ワーカ、タスク、割り当て 2.4.3 ワーカの役割 2.4.4 クライアントの役割 2.5 これだけは覚えよう II部 ZooKeeperを用いたプログラミング 3章 ZooKeeper API入門 3.1 ZooKeeper CLASSPATHの設定 3.2 ZooKeeperセッションの作成 3.2.1 Watcherの実装 3.2.2 Watcherサンプルプログラムの実行 3.3 マスタ権限の取得 3.3.1 非同期でマスタ権限を取得 3.3.2 メタデータの設定 3.4 ワーカの登録 3.5 タスクのキューイング 3.6 管理クライアント 3.7 これだけは覚えよう 4章 状態変化の取り扱い 4.1 一度きりのトリガ 4.1.1 ちょっと待てよ、一度限りのトリガだとイベントを取りこぼすのでは? 4.2 具体的に:監視の設定 4.3 一般的なパターン 4.4 マスタ・ワーカサンプル 4.4.1 マスタ権限の変化 4.4.2 マスタはワーカのリストが変化するのを待つ 4.4.3 マスタは新しいタスクを待って割り当てを行う 4.4.4 ワーカは新しいタスク割り当てを待つ 4.4.5 クライアントはタスクの実行結果を待つ 4.5 別のやり方:Multiop 4.6 明示的なキャッシュ管理の代わりとしての監視機構 4.7 順序の保証 4.7.1 書き込みの順序 4.7.2 読み出しの順序 4.7.3 通知の順序 4.8 集団効果と監視のスケーラビリティ 4.9 これだけは覚えよう 5章 障害の取り扱い 5.1 障害からの回復 5.1.1 存在の監視と接続断イベント 5.2 回復不能な障害 5.3 リーダーの選出と外部資源 5.4 これだけは覚えよう 6章 ZooKeeper使用上の注意 6.1 ACLの利用 6.1.1 組み込みの認証スキーム 6.1.2 SASLとKerberos 6.1.3 新しいスキームの追加 6.2 セッションの復旧 6.3 znodeが再作成されるとバージョンがリセットされる 6.4 sync 6.5 順序の保証 6.5.1 接続断があった場合の順序の保証 6.5.2 複数スレッドが同期APIを用いた場合の順序 6.5.3 同期呼び出しと非同期呼び出しを混在させた場合の順序 6.6 データと子ノードの制限 6.7 ZooKeeperサーバをアプリケーションに埋め込む 6.8 これだけは覚えよう 7章 Cクライアント 7.1 開発環境の設定 7.2 セッションの開始 7.3 マスタのブートストラップ 7.4 リーダー権限の取得 7.5 タスクの割り当て 7.6 シングルスレッド版とマルチスレッド版 7.7 これだけは覚えよう 8章 Curator:ZooKeeperの高レベルAPI 8.1 Curatorクライアント 8.2 フルーエントAPI 8.3 リスナ 8.4 Curatorでの状態変化 8.5 エッジケース 8.6 レシピ 8.6.1 リーダーラッチ 8.6.2 リーダーセレクタ 8.6.3 子ノードのキャッシュ 8.7 これだけは覚えよう III部 ZooKeeperの管理 9章 ZooKeeperの内部構造 9.1 リクエスト、トランザクション、識別子 9.2 リーダーの選出 9.3 Zab:状態更新のブロードキャスト 9.4 オブザーバー 9.5 サーバの骨組み 9.5.1 スタンドアロンサーバ 9.5.2 リーダーサーバ 9.5.3 フォロワーとオブザーバー 9.6 ローカルストレージ 9.6.1 ログとディスクの使い方 9.6.2 スナップショット 9.7 サーバとセッション 9.8 サーバと監視 9.9 クライアント 9.10 シリアライズ 9.11 これだけは覚えよう 10章 ZooKeeperの実行 10.1 ZooKeeperサーバの設定 10.1.1 基本設定 10.1.2 ストレージの設定 10.1.3 ネットワークの設定 10.1.4 クラスタの設定 10.1.5 認証と認可の設定 10.1.6 安全でない設定 10.1.7 ロギング 10.1.8 専用リソース 10.2 ZooKeeperアンサンブルの設定 10.2.1 多数決ルール 10.2.2 クォラムの設定 10.2.3 オブザーバー 10.3 再構成 10.3.1 クライアント接続文字列の管理 10.4 クォータ(割り当て制限) 10.5 マルチテナント 10.6 ファイルシステムレイアウトとフォーマット 10.6.1 トランザクションログ 10.6.2 スナップショット 10.6.3 エポックファイル 10.6.4 ZooKeeperデータの利用 10.7 4文字コマンド 10.8 JMXによるモニタリング 10.8.1 リモートからの接続 10.9 ツール 10.10 これだけは覚えよう 索引