「Swift」は、Ethernet上でストレージ機能を提供する可用性の高い分散オブジェクトストレージで、大量なデータの保管先として使用される。またイメージサービス「Glance」と連携して、仮想インスタンスを起動する元となるイメージの保存先として使うことができる。

OpenStackの初期から存在するコンポーネントのSwiftは、商用サービスであるRackspace Cloud Filesをベースとしてオープンソース化されたもので、大規模環境下での実績があり、高い完成度を持っている。RackSpaceでは、Glanceのバックエンドストレージとして、またアプリケーションデータやバックアップ用のストレージとして使用されている。

Swiftの長所と短所

Swiftは、Ethernet上でREST API経由でストレージ機能を提供するオブジェクトストレージである。従来のストレージでは、NFS/CIFS/iSCSIなどのファイルシステムを介して「ファイル」を読み書きするが、Swiftはファイルシステムを介さずにHTTPを経由して直接「オブジェクト」の格納やアクセスを行う。

この「オブジェクト」とは、ファイルシステムを介するか介さないかの違いはあるが、「ファイル」と同義と考えてよい。具体的なオブジェクトの操作としては、アップロード/ダウンロード/削除/リスト表示などとなり、オブジェクトを開いて編集するような使い方はできない。

Swiftの主な特徴は、「低コスト」「高い可用性」「スケールアウト型で容量と性能を増加可能なこと」だ。

従来のストレージシステムはエンタープライズ向けとして発展したため、高価で高信頼性なシステムとなっており、近年爆発的に増加しているインターネット上の動画や写真などのデータの保存には向いていなかった。一方、Swiftはそれらのデータと相性が良く、汎用x86サーバを使用するため、安価・簡単にスケールアウトしてデータの増大に追従できる。

しかも、自動的にオブジェクトを3台のストレージノードに分散して複製するため、高い可用性も有している。さらに、ノードをまたいで複製されるため、各ノードでディスクをRAID構成にする必要もなくなり、コストをより安価に抑えることができる。

また自己修復機能も持っており、障害時はオブジェクトの破損を自動検知して修復する。そのため、ストレージノードが故障した場合でも、他のシステムを考慮することなく、新規ノードを構築して故障ノードと交換するだけで復旧するため、運用負荷の軽減を図ることができる。

このようにさまざまな長所を持つSwiftであるが、短所がないわけではない。データを更新する際にそれが複製オブジェクトに反映されるまでに遅延が生じる「結果整合性モデル」を採用している。この仕組みでは、時間が経過すると更新情報がすべての複製オブジェクトに伝わって更新されるのだが、取り出されるデータが最新である保証がない。そのため、それが許容できない用途や更新が頻繁に行われる用途には向いていないので注意が必要である。

このような特徴を考慮すると、Swiftに向いている用途が見えてくる。具体的にはイメージやログの保存や、写真や動画などのWebオンラインストレージなどである。

Swiftを構成する2種類のノード

Swiftはプロキシノードとストレージノードの2種類のノードから構成される。プロキシノードはユーザやアプリケーションからの要求を受ける役割を持っており、ストレージノードはオブジェクトの実体を格納する役割を持っている。プロキシノードは最少1台、ストレージノードは最少3台で構成できる。ストレージノードを増加させることにより容量と性能が向上し、プロキシノードを増加させることによりアプリケーション要求に対する性能が向上する。プロキシノードを複数台使用する場合は、DNSラウンドロビンを利用する、もしくはロードバランサーを配置して分配させる。

Swiftの構成例

オブジェクトの配置は、静的ハッシュに基づいてデータの保存先があらかじめ決められたRingというテーブルによって決定される。Ringは全プロキシノードと全ストレージノードに配布する。ノードの追加時にはRingを再作成して配布する。

各サービスが提供する主な機能

オブジェクトストレージサービスSwiftに関わる各サービスが提供する主な機能は以下の表のとおりだ。

サービス名称 サービスが提供する機能
openstack-swift-proxy ユーザやアプリケーションのアクセス窓口、配下のストレージノードへ振り分けて転送
openstack-swift-account アカウントとコンテナのマッピング、アカウントの統計情報を管理
openstack-swift-container コンテナに保存されたオブジェクトとACLを管理
openstack-swift-object オブジェクト≒ファイルの実体を保存

これらのサービスがそれぞれのノードで配置される例を以下の図に示す。

Swiftサービスの配置例

今回はOpenStackコンポーネントの1つとして、オブジェクトストレージサービスのSwiftを紹介した。次回は、メータリングサービス「Ceilometer」を紹介する。

知念 紀昭
ネットワンシステムズ株式会社 ビジネス推進本部 第2応用技術部 クラウドソフトウェアチーム
仮想化ハードウェア・ソフトウェアの評価・検証業務を経て、現在クラウドソフトウェアを担当している。