OpenStack Swift
――Swiftオブジェクトストレージの管理と開発

[cover photo]
  • 2015年11月 発行
  • 364ページ
  • ISBN978-4-87311-737-9
  • フォーマット Print PDF
  • 原書: OpenStack Swift

オライリー・ジャパンで書籍を購入:
定価3,672円

Ebook Storeで電子版を購入:
価格2,938円

本書は、オープンソースでクラウド環境を構築するソフトウェア群であるOpenStackのストレージ機能を担うSwiftについての解説書です。OpenStack Swiftは、柔軟性が高くスケールアウトが容易であり、またHTTPサービスとの親和性が高いことから、Webシステムのバックエンドストレージとして積極的に採用されています。OpenStack Swiftの開発に貢献するSwift Stack社のメンバーによって執筆された本書では、動作原理や構成モジュールといったSwiftの基礎から、設計、インストール、運用、トラブルシューティング、性能評価までを理論と実践の両面から解説しています。開発者視点からのベストプラクティスとTipsも豊富に交えた貴重な一冊です。

関連書籍

SAN & NAS ストレージネットワーク管理
ウェブオペレーション
キャパシティプランニング

目次
はじめに

Ⅰ部 基礎とアーキテクチャ

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 まとめ

あとがき
オブジェクトストレージへの移行
オープンであることが重要な理由
オブジェクトストレージの標準
みなさんの出番
索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]