内容紹介
人気の分散型ストレージ、OpenStack Swiftの使い方を解説!
オープンソースのクラウド環境構築用のソフトウェア群であるOpenStackのストレージ機能を担うモジュールSwiftについての解説書です。OpenStack Swiftは、柔軟性が高くスケールアップが容易ということで、特に新たなサービスを開始する際に利用されることが増えています。本書はOpenStack Swiftの開発者自身によるもので、Swiftの基礎、Swiftを使ったアプリケーション、Swiftのインストール、Swiftの運用設定、 デバッグとトラブルシュートについて、開発者の視点からのtipsも豊富に交え、わかりやすく解説しています。
このような方におすすめ
クラウド開発者、ストレージ担当者
目次
詳細目次
はじめに
Ⅰ部 基礎とアーキテクチャ
1章 ストレージの進化
1.1 今日のデータにおけるストレージのニーズ
1.1.1 データの増加:エクサバイト、ヘラバイト、それ以上
1.1.2 非構造化データを格納するための要件
1.2 すべてに適合するストレージシステムはない
1.3 オブジェクトストレージと他の種類のストレージの比較
1.4 新たなストレージアーキテクチャ:ソフトウェア定義型ストレージ
1.5 ソフトウェア定義型ストレージのコンポーネント
1.5.1 ソフトウェア定義型ストレージの利点
1.6 なぜOpenStack Swiftなのか
1.7 まとめ
2章 Swiftの紹介
2.1 SwiftStackの紹介
3章 Swiftのデータモデルとアーキテクチャ
3.1 Swiftデータモデル
3.2 Swiftアーキテクチャ
3.3 サーバプロセス
3.4 一貫性プロセス
3.5 データの配置
3.5.1 リングの基礎:ハッシュ関数
3.5.2 リングの基礎:コンシステントハッシュリング
3.5.3 リング:修正コンシステントハッシュリング
3.5.4 データの配布
3.6 リングの作成と更新
3.6.1 ビルダファイルの作成と更新
3.6.2 リングのリバランス
3.6.3 リングの内部
3.7 まとめ
4章 Swiftの基本
4.1 クラスタとのやり取り: Swift API
4.2 リクエストの送信
4.2.1 ストレージ URL
4.2.2 認証
4.2.3 HTTPメソッド
4.3 認可と動作
4.4 レスポンスの取得
4.5 コミュニケーションツール
4.5.1 コマンドラインインターフェイス
4.5.2 カスタムクライアントアプリケーション
4.6 シナリオ例
4.7 まとめ
Ⅱ部 Swiftでのアプリケーション設計
5章 Swift APIの概要
5.1 APIとは
5.2 CAP定理
5.3 Swiftの核心:高い可用性、冗長性、スループット
5.4 Swift API:背景
5.4.1 HTTP(Hypertext Transfer Protocol:ハイパーテキスト転送プロトコル)の復習
5.4.2 REST(Representational State Transfer)
5.4.3 Swift、HTTP、REST
5.5 Swift APIの使用
5.5.1 Swiftクラスタについて
5.5.2 認証
5.5.3 データの取得
5.5.4 データの格納
5.5.5 データの削除
5.5.6 メタデータの更新
5.6 まとめ
6章 Swiftクライアントライブラリ
6.1 クライアントライブラリ
6.2 認証交換
6.3 ストレージリクエスト:基本的な使用法
6.4 他言語のクライアントライブラリ
6.4.1 Ruby
6.4.2 PHP
6.4.3 Java
6.5 ストレージリクエスト:高度な使用法
6.6 Pythonを使う際の他の考慮事項
6.7 まとめ
7章 高度なAPI機能
7.1 ラージオブジェクト
7.2 オブジェクトバージョニング
7.3 オブジェクトエクスパイア
7.4 一時 URLミドルウェア( TempURL)
7.5 フォームポストミドルウェア
7.6 カスタムメタデータ
7.7 メタデータのPUTとPOST
7.8 クロスオリジンリソースシェアリング( CORS)
7.9 Swiftクラスタ情報
7.10 範囲リクエスト
7.11 ドメインリマッピングミドルウェア
7.12 静的 Webホスティング
7.13 Content-Typeヘッダ
7.14 一括操作ミドルウェア
7.15 コード例
7.15.1 静的ラージオブジェクト
7.15.2 動的ラージオブジェクト
7.15.3 オブジェクトバージョニング
7.15.4 TempURL(期限付きURL)
7.15.5 フォームポスト
7.15.6 クロスオリジンリソースシェアリング
7.15.7 カスタムメタデータ
7.15.8 Swiftクラスタ情報
7.15.9 範囲リクエスト
7.15.10 ドメインリマッピング
7.15.11 静的 Webホスティング
7.15.12 Content-Type
7.15.13 一括アップロード
7.15.14 一括削除
7.16 まとめ
8章 Swiftミドルウェアの開発
8.1 WSGIの概要
8.2 WSGIのプログラミング
8.3 データのストリーミングと修正
8.4 Pasteによるミドルウェアの設定
8.5 Swiftミドルウェアの記述方法
8.6 内側から外側へ
8.7 簡単な例
8.8 ミドルウェアでのさらなる機能
8.9 おさらいと今後の展望
8.10 まとめ
Ⅲ部 Swiftのインストール
9章 ソースからのOpenStack Swiftのインストール
9.1 OpenStack Swiftのダウンロード
9.1.1 依存関係
9.1.2 Swift CLI(python-swiftclient)のインストール
9.1.3 Swiftのインストール
9.1.4 Swift設定ファイルのコピー
9.2 Swiftの設定
9.2.1 Swiftへのドライブの追加
9.2.2 ストレージポリシー
9.2.3 リングビルダファイルの作成
9.2.4 ビルダファイルへのデバイスの追加
9.2.5 ドライブの追加
9.2.6 リングの作成
9.3 Swiftのログ設定
9.3.1 ログ設定ファイルの作成
9.3.2 Rsyslogを再起動してSwiftのログ出力を開始する
9.4 プロキシサーバの設定
9.4.1 ハッシュパス接頭辞と接尾辞の設定
9.4.2 プロキシサーバの起動
9.5 SwiftでのTempAuth認証および認可の設定
9.5.1 memcachedの起動
9.5.2 proxy-server.confへのユーザの追加
9.5.3 サーバの起動とプロキシの再起動
9.5.4 アカウント認証
9.6 アカウントアクセスの検証
9.7 コンテナの作成
9.8 オブジェクトのアップロード
9.9 一貫性プロセスの起動
9.9.1 rsyncの設定
9.9.2 残りの一貫性プロセスの起動
9.10 まとめ
10章 SwiftStackのインストール
10.1 SwiftStackコントローラとノードの概要
10.1.1 SwiftStackコントローラ
10.1.2 SwiftStackノード
10.2 SwiftStackを利用したSwiftクラスタの作成
10.2.1 SwiftStackコントローラユーザの作成
10.2.2 SwiftStackノードソフトウェアのインストール
10.2.3 新しいノードの申請
10.2.4 クラスタの作成
10.2.5 ノードの取り込み
10.2.6 SwiftStackノードの有効化
10.2.7 SwiftStackノードのプロビジョニング
10.2.8 Swiftユーザの追加
10.2.9 SwiftStackミドルウェア
10.2.10 Clusterへのデプロイ
10.2.11 コンテナの作成とWebコンソールからのオブジェクトアップロード
10.3 まとめ
Ⅳ部 Swiftの導入計画
11章 Swiftのハードウェア
11.1 ノードのハードウェアスペック
11.1.1 CPU
11.1.2 RAM
11.1.3 ドライブ
11.2 クラスタネットワークの構成
11.2.1 ネットワークカード
11.2.2 外向きネットワーク
11.2.3 クラスタ向きネットワーク
11.2.4 レプリケーションネットワーク
11.2.5 専用管理ネットワーク
11.2.6 その他のネットワーク接続
11.3 まとめ
12章 Swiftの導入計画
12.1 読者のユースケース
12.2 システム設計
12.2.1 何台ノードが必要か?
12.2.2 階層化ノードサービス
12.2.3 クラスタ空間の定義
12.2.4 ノードの命名規則
12.2.5 認証と認可
12.3 ネットワーク構成
12.3.1 外向きネットワーク
12.3.2 クラスタ向きネットワーク
12.4 導入例
12.4.1 小規模クラスタ:数ノード
12.4.2 中規模クラスタ:複数ラック
12.4.3 大規模クラスタ:マルチリージョン
12.5 まとめ
13章 認証と認可
13.1 認証
13.1.1 認証の仕組み
13.1.2 認証リクエスト
13.1.3 認証手続き
13.1.4 認証の応答
13.2 ストレージリクエスト中でのauthトークンの利用
13.3 認可
13.3.1 認可の例
13.3.2 認可の仕組み
13.3.3 ストレージリクエストの処理
13.3.4 トークンの検証と認可情報の検索
13.3.5 認可のコールバックと応答
13.4 認可とアクセスレベル
13.5 アカウントレベルのアクセス制御
13.5.1 read-only権限
13.5.2 read-write権限
13.5.3 admin権限
13.5.4 アカウントアクセス制御のためのJSON
13.6 コンテナレベルのアクセス制御
13.6.1 コンテナ ACLの例
13.7 Swift認証システム
13.7.1 Keystone
13.7.2 TempAuth
13.7.3 SWAuth
13.8 SwiftStack認証システム
13.8.1 SwiftStack Auth
13.8.2 SwiftStack LDAP
13.8.3 SwiftStack Active Directory
13.9 まとめ
14章 クラスタのチューニングと最適化
14.1 Swiftの設定
14.1.1 ワーカー
14.1.2 チャンクサイズ
14.1.3 バックグラウンドデーモンの設定
14.2 Swift外にある設定
14.3 Swiftミドルウェア
14.3.1 ミドルウェアパイプライン
14.3.2 基本的なミドルウェア
14.3.3 特に役立つミドルウェア
14.3.4 その他のミドルウェア
14.4 SwiftStackのアプローチ
14.5 まとめ
15章 Swiftクラスタの運用
15.1 運用の考慮事項
15.1.1 Swiftのデータ配布方法
15.1.2 リングとビルダファイルの管理
15.2 容量管理
15.2.1 避けるべき事項
15.2.2 容量追加
15.2.3 既存クラスタ :最初のリングが配布された状態
15.2.4 ノード追加
15.3 容量削除
15.3.1 ノード削除
15.3.2 ディスク削除
15.4 SwiftStackでの容量追加の管理
15.4.1 容量追加
15.4.2 ドライブ追加
15.4.3 ノード追加
15.4.4 容量削除
15.4.5 ノード削除
15.4.6 ディスク削除
15.5 クラスタ監視
15.5.1 Swift固有のメトリック:監視対象
15.5.2 監視ツール、ログ出力ツール
15.5.3 SwiftStackツール
15.6 SwiftStackでの運用
15.7 まとめ
Ⅴ部 デバッグとトラブルシューティング
16章 ハードウェア障害と復旧
16.1 ドライブ障害への対応
16.2 フルドライブへの対応
16.3 セクター故障、または部分的なドライブ障害(ビット崩壊)への対応
16.4 到達できないノードへの対応
16.5 ノード障害への対応
16.6 ノード障害のケーススタディ
16.7 まとめ
17章 ベンチマーク
17.1 性能評価
17.2 性能メトリック、ベンチマーク、テスト
17.2.1 ベンチマーク対象クラスタの準備
17.2.2 避けるべき落とし穴と間違い
17.2.3 ベンチマークの目的とツール
17.2.4 欲張りすぎないように
17.2.5 ボトルネック
17.3 ssbenchによるベンチマーク
17.3.1 ssbenchのインストール
17.3.2 基本的なssbenchの実行
17.3.3 ユースケースの定義
17.3.4 ssbenchの動作
17.3.5 基本性能の測定
17.3.6 ssbenchを使いこなす
17.3.7 シナリオファイルを定義する
17.3.8 ssbench-worker
17.3.9 ssbench-workerの開始
17.4 swift-benchによるベンチマーク
17.4.1 準備
17.4.2 swift-benchの動作
17.4.3 コンテナの数
17.4.4 高い並列度のテスト( -c, -b)
17.4.5 遅延のテスト
17.4.6 オブジェクトサイズ( -s, -l)
17.4.7 オブジェクトの数( -n)
17.4.8 GETの数( -g)
17.4.9 削除しないオプション( -x)
17.4.10 設定ファイルの作成
17.4.11 swift-benchの実行例
17.4.12 分散 swift-benchの実行
17.4.13 swift-benchの設定サンプル
17.4.14 統計ツール
17.5 まとめ
あとがき
オブジェクトストレージへの移行
オープンであることが重要な理由
オブジェクトストレージの標準
みなさんの出番
索引
続きを見る