仮想化されたストレージってどういうことだろう?(1)

サーバの仮想化に続いて、ストレージの仮想化を具現化する製品が色々と登場し、そして今後、ネットワークの仮想化に関する技術が、具体的に製品化されようとしています。どの技術も興味深いのですが、今回のエントリーではストレージの仮想化について書いてみたいと思います。

ストレージを仮想化する方法や実装される階層は色々とあります。物理ディスクを抽象化し可用性を実現するRAID技術も一種のストレージ仮想化技術ですし、最近ではサーバが認識するボリュームがRAIDにより構成される論理ボリュームとも結びつかず、物理的ではない論理的なRAIDを実装しているストレージ製品も多く登場しています。サーバとストレージの間に入って実際のストレージを隠蔽する形態であったり、ストレージ自身の機能であったり、さらには汎用OSに導入して使用するソフトウェアタイプもあります。

いわゆるスケールアウト型のストレージ製品の多くでは、各ストレージ筐体にディスクだけでなくコントローラも搭載され、それぞれの筐体が自律的に動作しながらも協調的に動作する、いわば自律分散型のストレージモデルがよく使われています。これにより、ストレージは動的な拡張・縮退・変更に対応し、いわゆる仮想化されたストレージといわれる機能を実現しています。

さて、では動的に拡張できて、サーバから認識される領域が抽象化されたかたちで実装されていればそれで十分仮想化されているかといえば、そうではないでしょう。スケールアウトとは、単に容量が拡張されるだけではなく、それに合わせてパフォーマンスも最適化される必要があります。サーバからの接続も、ボリュームの配置も、さらにはボリュームを構成するサブボリューム単位*1についてまでもが自律的に最適化されることによって、ストレージはパフォーマンスの面でも仮想化されたとえいるかと思います。

たとえば、Dell EqualLogicは、スケールアウト型のストレージとして、3つのロードバランス機能を有しています。

  1. ネットワークロードバランス機能 (Network Load Balancer / NLB)
  2. 容量ロードバランス機能 (Capacity Load Balancer / CLB)
  3. 自動パフォーマンスロードバランス機能 (Auto Performance Load Balancer / APLB)

1つ目のNLBについては、ストレージとサーバとの間でのパフォーマンス最適化機能なので、残りの2つとは異なるレイヤーにおける機能といえます。EqualLogicは統合的に管理される複数の筐体でGroup IPをシェアしており、個々のインターフェイスもそれぞれ個別のIPアドレスが構成されています。iSCSIプロトコルの仕様としてリダイレクトの仕組みがあるため、EqualLogicはGroup IPに対して接続を求めてきたサーバからのリクエストに対して、最も余裕のあるインターフェイスIPアドレスに対してセッションをリダイレクトすることにより、サーバからの通信が最適となるようにふりわけます*2

もちろん、単にセッションを振り分けるだけではストレージとして機能しません。EqualLogicでは一般的に、複数の筐体にまたがってボリュームが構成されるので、ボリュームに対するアクセス=筐体に対するアクセスとはなりません。同じボリュームに対するアクセスであっても、あるサブボリュームは筐体Aに、別のサブボリュームは筐体Bに配置されているということになります。そのため、EqualLogicによってセッションが割り振られた先の筐体にアクセスしたいサブボリュームが存在するとは限らないわけです。サーバが要求してきたサブボリュームを自身が所有していなかった場合、EqualLogic筐体はそのサブボリュームを持つ筐体から当該のサブボリュームのデータを受け取り、サーバに対してデータを返す動作を自動的に処理しています*3

これでも良いのですがさらに、サーバ側が自身が割り当てられているボリュームについて、事前にどの筐体から構成されてるのか、さらには各サブボリュームをどの筐体が所有しているかを把握していれば、より最適化された接続を行うことが可能になります。これを実現しているのが各OSごとに提供されているEqualLogicに最適化された専用のマルチパスドライバです。マルチパスドライバが導入されたサーバは、それぞれのボリュームについて、どの筐体がどのサブボリュームを所有しているのかについての情報をEqualLogicと連携しながら同期管理し、必要とするサブボリュームのデータを各筐体に直接セッションを構成して取得することが可能となります。この仕組みにより、EqualLogic筐体間でのサブボリュームデータの受け渡しのための通信を不要とし、さらにはボリュームに対するアクセスを並列的に、ボリュームを構成する筐体それぞれと行うことにより、通信パフォーマンスを最適化することができます。

2つ目のCLBと、3つ目のAPLBについては一連の処理となりますので、次へ続くということで、続きのエントリーにてまとめてご説明したいと思います。

*1:製品によって、ページといったり、ブロックといったり、チャンクレットといったり、いろいろですね。

*2:EqualLogicはどの筐体にどのボリュームを構成するサブボリュームが存在するかどうかについては把握していますので、サブボリュームを持つ筐体の中から、最適な接続先ポートを選択します。

*3:この仕組みを実現するために、同じボリュームを構成している筐体間では、どの筐体がどのサブボリュームを所有しているかについての管理テーブルを同期管理しています。