以下、図面を参照して、本発明の一実施の形態を詳述する。以下の記載及び図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略及び簡略化がなされている。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。本発明が実施形態に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明の技術的範囲に含まれる。本発明は、当業者であれば本発明の範囲内で様々な追加や変更等を行うことができる。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は複数でも単数でも構わない。
以下の説明では、「テーブル」、「表」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「XXテーブル」、「XXリスト」等を「XX情報」と呼ぶことがある。各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「ID」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたIDを使用することがある。
また、以下の説明では、プログラムを実行して行う処理を説明する場合があるが、プログラムは、少なくとも1以上のプロセッサ(例えばCPU)によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又はインターフェースデバイス(例えば通信ポート)等を用いながら行うため、処理の主体がプロセッサとされてもよい。同様に、プログラムを実行して行う処理の主体が、プロセッサを有するコントローラ、装置、システム、計算機、ノード、ストレージシステム、ストレージ装置、サーバ、管理計算機、クライアント、又は、ホストであってもよい。プログラムを実行して行う処理の主体(例えばプロセッサ)は、処理の一部又は全部を行うハードウェア回路を含んでもよい。例えば、プログラムを実行して行う処理の主体は、暗号化及び復号化、又は圧縮及び伸張を実行するハードウェア回路を含んでもよい。プロセッサは、プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。プロセッサを含む装置及びシステムは、これらの機能部を含む装置及びシステムである。
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ(例えばCPU)と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
(1)本実施の形態による情報処理システムの構成
図1は、本実施の形態による情報処理システム1の構成を示す図である。この情報処理システム1は、複数のコンピュートノード2と、複数のストレージノード3とを備えて構成される。
各コンピュートノード2及び各ストレージノード3間は、例えばファイバーチャネル(Fibre Channel)、イーサネット(登録商標)、InfiniBand又は無線LAN(Local Area Network)などから構成されるストレージサービスネットワーク4を介して接続されると共に、各ストレージノード3間は、LAN、イーサネット(登録商標)、InfiniBand又は無線LANなどから構成されるバックエンドネットワーク5を介して接続されている。
ただし、ストレージサービスネットワーク4及びバックエンドネットワーク5が同一のネットワークにより構成されていてもよく、また各コンピュートノード2及び各ストレージノード3がストレージサービスネットワーク4やバックエンドネットワーク5以外の管理用ネットワークに接続されていてもよい。
コンピュートノード2は、ストレージノード3に対してホスト(上位装置)として機能する汎用のコンピュータ装置である。なお、コンピュートノード2は仮想マシンのような仮想的なコンピュータ装置であってもよい。コンピュートノード2は、ユーザ操作や実装されたアプリケーションプログラムからの要求に応じて、ストレージサービスネットワーク4を介してストレージノード3にデータを読み書きする。
ストレージノード3は、コンピュートノード2に対してデータを読み書きするための記憶領域を提供するサーバ装置である。ストレージノード3は、仮想マシンであってもよい。またストレージノード3がコンピュートノード2と同一の物理ノードに同居する構成であってもよい。本実施の形態の場合、各ストレージノード3は、図1に示すように、他の1又は複数のストレージノード3と共にクラスタ6と呼ぶグループにまとめられて管理される。図1の例では、クラスタ6が1つのみ設定された場合について例示しているが、情報処理システム1内に複数のクラスタ6を設けるようにしてもよい。クラスタ6は、分散ストレージシステムと呼ばれてもよい。
このストレージノード3は、図2に示すように、1以上のCPU(Central Processing Unit)10、1以上のメモリ11及び複数の記憶装置12と、それぞれ1又は複数の第1及び第2の通信装置13,14とを備える。ストレージノード3は、CPU10及び記憶装置12と、第1及び第2の通信装置13,14とが内部ネットワーク15を介して接続された汎用の物理サーバ装置から構成される。
CPU10は、ストレージノード3全体の動作制御を司るプロセッサである。またメモリ11は、SRAM(Static RAM(Random Access Memory))やDRAM(Dynamic RAM)などの揮発性の半導体メモリや、不揮発性の半導体メモリから構成され、CPU10のワークメモリとして各種プログラムや必要なデータを一時的に保持するために利用される。メモリ11に格納されたプログラムを、少なくとも1以上のCPU10が実行することにより、後述のようなストレージノード3全体としての各種処理が実行される。
記憶装置12は、HDD(Hard Disk Drive)、SSD(Solid State Drive)又はSCM(Storage Class Memory)などの大容量の不揮発性の記憶装置から構成され、NVMe(Non-Volatile Memory Express)やSAS(Serial Attached SCSI(Small Computer System Interface))、SATA(Serial ATA(Advanced Technology Attachment))などのインタフェースで接続され、コンピュートノード2からのリード要求やライト要求に応じてデータを読み書きするための記憶領域を提供する。
第1の通信装置13は、ストレージノード3がストレージサービスネットワーク4を介してコンピュートノード2と通信を行うためのインタフェースであり、例えばファイバーチャネルカードやイーサネット(登録商標)カード、InfiniBandカード、無線LANカードなどから構成される。第1の通信装置13は、コンピュートノード2との通信時におけるプロトコル制御を行う。
第2の通信装置14は、ストレージノード3がバックエンドネットワーク5を介して他のストレージノード3と通信を行うためのインタフェースであり、例えばファイバーチャネルカードやイーサネット(登録商標)カード、InfiniBandカード、無線LANカード、PCIeホストアダプタなどから構成される。第2の通信装置14は、他のストレージノード3との通信時におけるプロトコル制御を行う。
なお本実施の形態の場合、各ストレージノード3は、図1に示すように、他の1又は複数のストレージノード3と共にクラスタ6と呼ぶグループにまとめられて管理される。図1の例では、クラスタ6が1つのみ設定された場合について例示しているが、情報処理システム1内に複数のクラスタ6を設けるようにしてもよい。
(2)本情報処理システムにおける各種処理の流れ
(2-1)各ストレージノードのメモリに格納されたプログラム及び情報
次に、本情報処理システム1における各種処理の流れについて説明する。これに際して、まず、かかる各種機能に関連して各ストレージノード3のメモリ11(図2)に格納されるプログラム及び情報について、図3~図6を参照して説明する。
図3に示すように、各ストレージノード3のメモリ11には、複数の制御ソフトウェア(以下、これを制御ソフトと呼ぶ)20及びこれら制御ソフト20にそれぞれ対応させて用意された複数の構成情報21と、冗長化部22、クラスタ制御部23、ストレージノード管理表24及び制御ソフト管理表25とがそれぞれ格納される。
制御ソフト20は、SDS(Software Defined Storage)のストレージコントローラとして機能するソフトウェアである。制御ソフト20は、コンピュートノード2からのリード要求やライト要求を受け付け、対応する記憶装置12(図2)にデータを読み書きする機能を有する。制御ソフト20は、ストレージ制御部や、ストレージ制御プログラムと呼ばれてもよい。
本実施の形態の場合、図7に示すように、ストレージノード3に実装された各制御ソフト20は、それぞれ互いに異なる他のストレージノード3にそれぞれ実装された1又は複数の他の制御ソフト20と共に冗長化のための1つのグループ(以下、これを冗長化グループと呼ぶ)26として管理される。
なお図7は、2つの制御ソフト20により冗長化グループ26が構成される場合を示しており、以下においても、2つの制御ソフト20により冗長化グループ26が構成されるものとして説明を進めるが、3つ以上の制御ソフト20により冗長化グループ26が構成されるものとしてもよい。
冗長化グループ26では、少なくとも1つの制御ソフト20がコンピュートノード2からのリード要求やライト要求を受け付けることができる状態(現用系の状態であり、以下、これをアクティブモードと呼ぶ)に設定され、残りの制御ソフト20がコンピュートノード2からのリード要求やライト要求を受け付けない状態(待機系の状態であり、以下、これをパッシブモードと呼ぶ)に設定される。
従って、2つの制御ソフト20から構成される冗長化グループ26は、これら2つの制御ソフト20の双方がアクティブモードに設定された構成(以下、これをアクティブ-アクティブ構成と呼ぶ)と、一方の制御ソフト20がアクティブモードに設定され、他方の制御ソフト20がそのバックアップとしてパッシブモードに設定された構成(以下、これをアクティブ-パッシブ構成と呼ぶ)とのうちのいずれかの構成をとることになる。
そしてアクティブ-パッシブ構成が採用された冗長化グループ26では、アクティブモードに設定された制御ソフト20又はその制御ソフト20が稼働するストレージノード3に障害が発生した場合や、そのようなストレージノード3がクラスタ6から撤去(ストレージノード3が減設)された場合に、それまでパッシブモードに設定されていた制御ソフト20の状態がアクティブモードに切り替えられる。これにより、アクティブモードに設定された制御ソフト20が稼働し得なくなった場合に、当該制御ソフト20が実行していたI/O(Input/Output)処理をそれまでパッシブモードに設定されていた制御ソフト20により引き継ぐことができる(フェールオーバ機能)。
このようなフェールオーバ機能を実現するため、同じ冗長化グループ26に属する制御ソフト20は、常に同一内容の構成情報21を保持している。構成情報21は、上述の容量仮想化機能や、アクセス頻度の多いデータをより応答速度が速い記憶領域に移動させる階層記憶制御機能、格納されたデータの中から重複するデータを削除する重複排除機能、データを圧縮して記憶する圧縮機能、ある時点でのデータの状態を保持するSnapshot(スナップショット)機能、及び、災害対策のために同期あるいは非同期で遠隔地にデータをコピーするリモートコピー機能などの各種機能に関する処理を制御ソフト20が実行するために必要な情報である。
そして、冗長化グループ26を構成するアクティブモードの制御ソフト20の構成情報21が更新された場合、更新前後のその構成情報21の差分が差分データとしてその冗長化グループ26を構成する他方の制御ソフト20に転送され、この差分データに基づいて当該他方の制御ソフト20によりその制御ソフト20が保持する構成情報21が更新される。これにより冗長化グループ26を構成する各制御ソフト20がそれぞれ保持する構成情報21が常に同期した状態に維持される。
このように冗長化グループ26を構成する2つの制御ソフト20同士が常に同じ内容の構成情報21を保持することにより、アクティブモードに設定された制御ソフト20や、当該制御ソフト20が配置されたストレージノード3に障害が発生し又は当該ストレージノード3が撤去された場合にも、それまでその制御ソフト20が実行していた処理を、その制御ソフト20と同じ冗長化グループ26内の他の制御ソフト20が直ちに引き継ぐことが可能となる。
冗長化部22は、このように同じ冗長化グループ26内の各制御ソフト20がそれぞれ保持する構成情報21を常に同期させる機能を有するプログラムである。実際上、冗長化部22は、自ストレージノード3内のいずれかの制御ソフト20が自己の構成情報21を更新した場合、更新前後のその構成情報21の差分を差分データとして、バックエンドネットワーク5を介して、その制御ソフト20と同じ冗長化グループ26に属する他の制御ソフト20が実装されたストレージノード3に送信する。この際、冗長化部22は、その差分データに基づいて構成情報21を更新すべき制御ソフト20を指定する。そして、この差分データを受信したストレージノード3の冗長化部22は、当該差分データに基づいて、指定された制御ソフト20が保持する構成情報21を更新する。冗長化部22は、冗長化ソフトウェアや、冗長化プログラムと呼ばれてもよい。
クラスタ制御部23は、コンピュートノード2から与えられたライト要求又はリード要求からなるI/O(Input/Output)要求を、バックエンドネットワーク5を介して、対応するストレージノード3のクラスタ制御部23に転送したり、他のクラスタ制御部23から転送されてきたかかるI/O要求を、対応する冗長化グループ26の制御ソフト20に引き渡す機能を有するプログラムである。クラスタ制御部23は、クラスタ制御ソフトウェアや、クラスタ制御プログラムと呼ばれてもよい。
実際上、本実施の形態の場合、冗長化グループ26ごとに、その冗長化グループ26に対応させて1又は複数の仮想的な論理ボリューム(以下、これを仮想ボリュームと呼ぶ)が定義され、これらの仮想ボリュームがデータをリード/ライトする記憶領域としてコンピュートノード2に提供される。
この場合、仮想ボリューム内の記憶領域は所定の大きさの小領域(以下、これを論理ページと呼ぶ)に区分して管理される。またストレージノード3に搭載された各記憶装置12が提供する記憶領域は論理ページと同じ大きさの小領域(以下、これを物理ページと呼ぶ)に区分されて管理される。ただし、論理ページ及び物理ページは同じサイズでなくてもよい。
そしてコンピュートノード2は、所望する仮想ボリュームにデータをリード/ライトする場合、そのデータのリード/ライト先の仮想ボリュームの識別子(LUN:Logical Unit Number)と、その仮想ボリュームにおけるそのデータのリード/ライト先の先頭の論理ページと、そのデータのデータ長とを指定したI/O要求を対応するクラスタ6内のいずれかのストレージノード3に送信する。
かくして、このI/O要求を受信したストレージノード3のクラスタ制御部23は、バックエンドネットワーク5を介して、受信したI/O要求において指定されたリード/ライト対象の仮想ボリュームに対応付けられた冗長化グループ26の制御ソフト20が配置されている各ストレージノード3のクラスタ制御部23にそのI/O要求を転送する。
また、このI/O要求を受領したクラスタ制御部23は、このI/O要求を、当該I/O要求においてリード/ライト先として指定された仮想ボリュームに対応付けられた冗長化グループ26の制御ソフト20に引き渡す。そして、このI/O要求が引き渡された制御ソフト20のうち、アクティブモードに設定された制御ソフト20は、このI/O要求に応じて、当該I/O要求がライト要求である場合には当該I/O要求においてデータのライト先として指定された論理ページにいずれかの物理ページを動的に割り当てた上で、当該論理ページに割り当てた物理ページにデータをリード/ライトする。
このような一連の処理を実行するための手段として、クラスタ制御部23は、クラスタ6内に存在する各制御ソフト20がそれぞれどのストレージノード3に配置され、どの冗長化グループ26に所属し、アクティブモード及びパッシブモードのいずれの状態に設定されているかといった情報を共有しており、これらの情報を後述する制御ソフト管理表25に格納して管理している。
一方、構成情報21は、上述のように制御ソフト20が容量仮想化機能や、階層記憶制御機能、Snapshot機能、リモートコピー機能、重複排除機能、及び、圧縮機能などの各種機能を実現するために必要な情報から構成される。
図4は、このような構成情報21の一部を構成する論-物変換テーブル27を示す。論-物変換テーブル27は、容量仮想化機能に関連して、上述の論理ページと、物理ページとの対応関係を管理するために利用されるテーブルであり、図4に示すように、LUN欄27A、論理ページ欄27B及び物理ページ欄27Cを備えて構成される。論-物変換テーブル27では、1つの行が1つの論理ページに対応する。
そしてLUN欄27Aには、かかるクラスタ6がコンピュートノード2に提供する各仮想ボリュームにそれぞれ付与されたその仮想ボリュームのLUNが格納され、論理ページ欄27Bには、対応する仮想ボリューム内の各論理ページにそれぞれ付与された識別子(論理ページ番号)が格納される。
また物理ページ欄27Cは、ノードID欄27CA、ドライブ番号欄27CB及びセクタ番号欄27CCに区分されている。そしてノードID欄27CAには、対応する論理ページに割り当てた物理ページを提供するストレージノード3に付与されたそのストレージノード3に固有の識別子(ノードID)が格納され、ドライブ番号欄27CBには、その物理ページPPを提供する記憶装置12(図2)に付与されたその記憶装置12に固有の識別子(ドライブ番号)が格納される。さらにセクタ番号欄27CCには、対応する記憶装置12内のその物理ページPPに該当する記憶領域(セクタ)に付与されたそのセクタに固有の識別子(セクタ番号)が格納される。
従って、図4の例の場合、例えば、「1」というLUNが付与された仮想ボリュームの論理ページ番号が「0」の論理ページには、「0」というノードIDが付与されたストレージノード3におけるドライブ番号が「1」の記憶装置12内の「0x00010000」というセクタ番号の記憶領域(セクタ)が物理ページとして割り当てられていることが示されている。
またストレージノード管理表24は、同じクラスタ6内の各ストレージノード3の負荷状況等を管理するために利用されるテーブルであり、図5に示すように、ノードID欄24A、状態欄24B、容量欄24C、使用容量欄24D、CPU負荷欄24E、メモリ量欄24F、使用メモリ量欄24G、通信帯域欄24H、使用通信帯域欄24I及び障害グループID欄24Jを備えて構成される。ストレージノード管理表24では、1つの行が1つのストレージノード3に対応する。
そしてノードID欄24Aには、そのクラスタ6を構成する各ストレージノード3のノードIDがそれぞれ格納され、状態欄24Bには、対応するストレージノード3の現在の状態(「正常」又は「異常」)が格納される。また、容量欄24Cには、対応するストレージノード3の全ての記憶装置の容量が格納され、使用容量欄24Dには、対応するストレージノード3における現在の記憶装置の使用容量が格納される。
さらにCPU負荷欄24Eには、対応するストレージノード3におけるCPU10(図2)の現在の使用率が格納され、メモリ量欄24Fには、そのストレージノード3におけるメモリ11(図2)の容量が格納され、使用メモリ量欄24Gには、対応するストレージノード3における現在のメモリ11の使用量が格納される。
さらに通信帯域欄24Hには、対応するストレージノード3が使用可能なバックエンドネットワーク5の通信帯域の大きさが格納され、使用通信帯域欄24Iには、そのストレージノード3が他のストレージノード3との通信のために現在使用しているバックエンドネットワーク5の帯域量が格納される。
さらに障害グループID欄24Jには、対応するストレージノード3が属する障害グループのグループIDが格納される。ここで、障害グループとは、同一の電源等を共用するなど、その電源等に障害が発生した場合に、これに起因する同様の障害が発生するストレージノード3のグループをいう。
このストレージノード管理表24に格納される情報は、同一クラスタ6を構成するすべてのストレージノード3のクラスタ制御部23により共有される情報である。このように同一クラスタ6内で各ストレージノード3のクラスタ制御部23により同一の情報を共有するための手段として、クラスタ6を構成する各ストレージノード3にそれぞれ搭載されたクラスタ制御部23の中から所定の方法により1つのクラスタ制御部23が代表クラスタ制御部23として選定される。
そして代表クラスタ制御部23は、定期的に他のストレージノード3のクラスタ制御部23から必要な情報を収集し、収集した情報に基づいて自己が管理するストレージノード管理表24を更新する。また代表クラスタ制御部23は、これら収集した情報をそのクラスタ6内の各ストレージノード3のクラスタ制御部23に転送することにより、これらクラスタ制御部23にそのクラスタ制御部23がそれぞれ管理するストレージノード管理表24を最新の状態に更新させる。
ただし、各ストレージノード3のクラスタ制御部23が定期的に必要な情報を同じクラスタ6内の他のすべてのストレージノード3のクラスタ制御部23にそれぞれ送信し、この情報に基づいて各ストレージノード3のクラスタ制御部23がそれぞれ自ノード内のストレージノード管理表24を更新するようにしてもよい。
制御ソフト管理表25は、クラスタ制御部23がクラスタ6内に存在するすべての制御ソフト20を管理するために使用するテーブルであり、図6に示すように、制御ソフトID欄25A、状態欄25B、グループID欄25C、稼働ノードID欄25D、使用容量欄25E、CPU負荷欄25F、使用メモリ量欄25G、使用通信帯域欄25H及びLUN欄25Iを備えて構成される。制御ソフト管理表25では、1つの行が1つの制御ソフト20に対応する。
そして制御ソフトID欄25Aには、対応するクラスタ6内に存在する現在稼働中の制御ソフト20にそれぞれ付与されたその制御ソフト20に固有の識別子(制御ソフトID)が格納され、状態欄25Bには、対応する制御ソフト20の現在の状態が格納される。なお制御ソフト20の状態としては、上述したアクティブモード(「Active」)及びパッシブモード(「Passive」)のほか、障害等により稼働し得ない状態であるデッド(「Dead」)、保守などでI/O処理を停止している状態であるストップ(「Stop」)などがある。
またグループID欄25Cには、対応する制御ソフト20が構成する冗長化グループ26(図7)に対して付与されたその冗長化グループ26に固有の識別子(グループID)が格納され、稼働ノードID欄25Dには、対応する制御ソフト20が稼働するストレージノード3のノードIDが格納される。また使用容量欄25Eには、対応する制御ソフト20が現在使用している記憶領域の合計容量が格納される。
またCPU負荷欄25Fには、対応する制御ソフト20を稼働するためのCPU10(図2)の現在の使用率が格納され、使用メモリ量欄25Gには、対応する制御ソフト20のために現在使用されているメモリ11(図2)の容量が格納される。さらに使用通信帯域欄25Hには、対応する制御ソフト20が他のストレージノード3との通信のために現在使用しているバックエンドネットワーク5の帯域量が格納される。
LUN欄25Iは、コンピュートノード2に提供される仮想ボリュームを識別する識別情報のLUN(Logical Unit Number:ボリューム番号)が格納され、当該LUNで識別される仮想ボリュームを管理する制御ソフトの制御ソフトID25Aと対応付けて管理される。
各ストレージノード3のクラスタ制御部23は、コンピュートノード2からI/O要求(リード要求又はライト要求)を受領した際、I/O要求に含まれるLUNを取得し、制御ソフト管理表25を用いて当該LUNに対応付けられた制御ソフトID25A、稼働ノードIDを特定する。これにより、各ストレージノード3のクラスタ制御部23は、I/O要求先となる仮想ボリュームを管理する制御ソフトとその制御ソフトの配置先ノードを特定できる。なお、LUN欄25IのLUNは、当該LUNで識別される仮想ボリュームに対応する冗長化グループのグループID25Cに対応付けられて管理されてもよい。制御ソフト管理表25により、I/O要求に含まれるLUNから、グループIDを特定できれば、グループIDで識別される冗長化グループに含まれる制御ソフトID及び当該制御ソフトIDで識別される制御ソフトも特定できる。
この制御ソフト管理表25に格納される情報も、同一クラスタ6を構成するすべてのストレージノード3のクラスタ制御部23により共有される情報である。このため代表クラスタ制御部23は、定期的に他のストレージノード3のクラスタ制御部23から必要な情報を収集し、収集した情報に基づいて自己が管理する制御ソフト管理表25を更新する。また代表クラスタ制御部23は、これら収集した情報をそのクラスタ6内の各ストレージノード3のクラスタ制御部23に転送することにより、これらクラスタ制御部23にそのクラスタ制御部23がそれぞれ管理する制御ソフト管理表25を最新の状態に更新させる。
(2-2)各種処理の流れ
(2-2-1)ライト処理の流れ
図7は、本情報処理システム1において、平常時にコンピュートノード2からクラスタ6内のいずれかのストレージノード3にライト要求が与えられた場合の処理の流れを示す。
この図7では、「ストレージノードA」~「ストレージノードD」はそれぞれストレージノード3を示し、「制御ソフトA」~「制御ソフトH」はそれぞれ制御ソフト20を示している。そして図7では、「ストレージノードA」上で稼働する「制御ソフトA」と、「ストレージノードB」上で稼働する「制御ソフトB」とが冗長化グループ26を構成し、「ストレージノードB」上で稼働する「制御ソフトC」と、「ストレージノードC」上で稼働する「制御ソフトD」とが冗長化グループ26を構成し、「ストレージノードC」上で稼働する「制御ソフトE」と、「ストレージノードD」上で稼働する「制御ソフトF」とが冗長化グループ26を構成し、「ストレージノードD」上で稼働する「制御ソフトG」と、「ストレージノードA」上で稼働する「制御ソフトH」とが同じ冗長化グループ26を構成している例を示している。また、ここでは、制御ソフト20の冗長化により作成される各冗長化グループ26の構成がアクティブ-パッシブ構成であるものとする。
この場合、各ストレージノード3のクラスタ制御部23は、平常時、上述のように各ストレージノード3のCPU10(図2)の負荷状態及びメモリ11(図2)の使用量等の情報を共有し、これらの情報をストレージノード管理表24や制御ソフト管理表25に格納して管理する(S1)。
そして、コンピュートノード2からライト要求がクラスタ6内のいずれかのストレージノード3に与えられると、当該ストレージノード3のクラスタ制御部23は、制御ソフト管理表25を用いて、上述のようにこのライト要求に含まれるLUNに基づいて、対応するストレージノード3のクラスタ制御部23を介して対応する冗長化グループ26の各制御ソフト20にそれぞれライト要求を転送する。ライト要求を転送された制御ソフト20のうち、アクティブモードに設定された制御ソフト20によりライト処理が実行される。なお、クラスタ制御部23は、アクティブモードに設定された制御ソフト20にのみライト要求を転送してもよい。
ここでは、かかるライト要求が、「制御ソフトA」及び「制御ソフトB」から構成される冗長化グループ26と対応付けられた仮想ボリュームをライト先とするものであるものとする。また、かかる冗長化グループ26では、「制御ソフトA」がアクティブモードに設定され、「制御ソフトB」がパッシブモードに設定されているものとする。従って、この場合、アクティブモードに設定された「制御ソフトA」がかかるライト要求に応じたライト処理を実行することになる。
そして、このようなライト処理が実行されると、当該ライト処理を実行した「制御ソフトA」が配置された「ストレージノードA」の冗長化部22は、同じストレージノード3(「ストレージノードA」)内のクラスタ制御部23から、そのときライト処理を実行した「制御ソフトA」と共に冗長化グループ26を構成する制御ソフト20(「制御ソフトB」)の制御ソフトID及び当該制御ソフト20が配置されたストレージノード3(「ストレージノードB」)のバックエンドネットワーク5上のIPアドレスを取得する(S2)。
また、「ストレージノードA」の冗長化部22は、かかるライト処理の処理内容に応じて「制御ソフトA」が保持する構成情報21を更新し(S3)、当該構成情報21の更新前後の差分を表す差分データを、バックエンドネットワーク5を介して、ステップS2で取得したIPアドレスのストレージノード3(「ストレージノードB」)に送信する(S4)。この際、かかる冗長化部22は、その差分データにより構成情報21を更新すべき制御ソフト20として、「制御ソフトA」と共に冗長化グループ26を構成する「制御ソフトB」を指定する。
かくして、この差分データが与えられた「ストレージノードB」の冗長化部22は、この差分データに基づいて、「制御ソフトB」が保持する構成情報21を、「制御ソフトA」が保持する構成情報21と同様に更新する。
以上により、同じ冗長化グループ26を構成する2つの制御ソフト20(「制御ソフトA」及び「制御ソフトB」)がそれぞれ保持する2つの構成情報21が同じ内容に維持される。
(2-2-2)ストレージノードの障害発生時における処理の流れ
次に、クラスタ6を構成するいずれかのストレージノード3に障害が発生した場合の処理の流れについて説明する。なお、ここでは、図8に示すように、「ストレージノードA」に障害が発生し、当該「ストレージノードA」に実装された「制御ソフトA」及び「制御ソフトH」がダウンした場合の処理の流れについて説明する。
この場合、かかる障害を検知したいずれかのクラスタ制御部23は、その障害を代表クラスタ制御部23に通知する。ここでは、「ストレージノードB」のクラスタ制御部23が代表クラスタ制御部23に選定されているものとし、かかる通知が「ストレージノードB」のクラスタ制御部23に与えられるものとする。
この通知を受信した代表クラスタ制御部23は、制御ソフト管理表25(図6)を参照して、「制御ソフトA」と共に同じ冗長化グループ26を構成する「制御ソフトB」が実装された「ストレージノードB」のクラスタ制御部23に対して「制御ソフトA」に障害が発生した旨を通知する。また代表クラスタ制御部23は、「制御ソフトH」と共に同じ冗長化グループ26を構成する「制御ソフトG」が実装された「ストレージノードD」のクラスタ制御部23に対して「制御ソフトH」に障害が発生した旨を通知する(S10)。
この通知を受信した「ストレージノードB」のクラスタ制御部23は、それまでパッシブモードに設定されていた「制御ソフトB」の状態をアクティブモードに変更する(S11)。これによりそれまで「制御ソフトA」が実行していたI/O処理が「制御ソフトB」に引き継がれることになる。
また、かかる通知を受信した「ストレージノードD」のクラスタ制御部23は、「制御ソフトG」に対応付けられた冗長化部22に対して、この後「制御ソフトG」が保持する構成情報21が更新された場合においても、その差分データを「ストレージノードA」に転送しないよう指示を与える(S12)。
続いて、代表クラスタ制御部23は、「制御ソフトB」及び「制御ソフトG」の冗長化構成を回復させるため、図9に示すように、「制御ソフトA」の新たな配置先とすべきストレージノード3と、「制御ソフトH」の新たな配置先とすべきストレージノード3とをそれぞれ決定し、決定結果を各ストレージノード3内のクラスタ制御部23にそれぞれ通知する(S13)。
この際、代表クラスタ制御部23は、「制御ソフトA」や「制御ソフトH」の新たな配置先として、ストレージノード管理表24(図5)を参照して、同じ冗長化グループ26を構成する他の制御ソフト20が既に配置されているストレージノード3とは異なるストレージノード3であって、その冗長化グループ26を構成する他の制御ソフト20が既に配置されているストレージノード3とは異なる障害グループに属するストレージノード3を選択する。また代表クラスタ制御部23は、そのようなストレージノード3(「制御ソフトA」や「制御ソフトH」の新たな配置先の候補となり得るストレージノード3)が複数存在する場合には、ストレージ管理表24及び制御ソフト管理表25を参照して、負荷が低いストレージノード3を「制御ソフトA」及び「制御ソフトH」の新たな配置先としてそれぞれ決定する。
なお、「負荷が低いストレージノード3」とは、候補となり得るストレージノード3の中で、制御ソフト20を配置してもストレージノード3が持つ記憶装置の容量、CPU負荷、メモリ量、バックエンドネットワーク5の通信帯域の許容範囲を超えないストレージノード3の中で最もCPU負荷が低いものを指す。ここでは、「制御ソフトA」の新たな配置先が「ストレージノードC」、「制御ソフトH」の新たな配置先が「ストレージノードB」にそれぞれ決定されたものとする。なお、ここでいう「許容範囲」とは、容量及びメモリ量であればストレージノード3が持つ記憶装置の容量やメモリ量の範囲内、CPU負荷であれば100%以下、バックエンドネットワーク5であれば使用可能な通信帯域の範囲内、あるいは、これら容量、CPU負荷、メモリ量及び又はバックエンドネットワーク5の通信帯域について事前にそれぞれ設定された閾値があればその範囲内を指す。以下においても同様である。
この通知を受信した「ストレージノードB」のクラスタ制御部23は、自ストレージノード3内の冗長化部22に対して「制御ソフトB」が保持する構成情報21を「制御ソフトA」の新たな配置先である「ストレージノードC」にフルコピーするよう指示を与える(S14)。また、この指示を受領したかかる冗長化部22は、その構成情報21をバックエンドネットワーク5を介して「ストレージノードC」に転送する(S15)。そして、この構成情報21を受信した「ストレージノードC」のクラスタ制御部23は、この構成情報21を「制御ソフトA」と対応付けてメモリ11(図2)に格納する。
なお、「制御ソフトB」が保持する構成情報21の「ストレージノードC」へのフルコピーが完了すると、この後、「ストレージノードB」の冗長化部22が、「制御ソフトB」が保持する構成情報21が更新されるごとに元の構成情報21との差分データを「ストレージノードC」に転送し始めるようになり、これにより「制御ソフトB」が保持する構成情報21と、「ストレージノードC」にコピーされた構成情報21とが同期して更新されるようになる(S16)。
同様に、かかる通知を受信した「ストレージノード4」のクラスタ制御部23は、自ストレージノード3内の冗長化部22に対して「制御ソフトG」が保持する構成情報21を「制御ソフトH」の新たな配置先である「ストレージノードB」にフルコピーするよう指示を与える(S17)。また、この指示を受領したかかる冗長化部22は、その構成情報21をバックエンドネットワーク5を介して「ストレージノードB」に転送する(S18)。そして、この構成情報21を受信した「ストレージノードB」のクラスタ制御部23は、この構成情報21を「制御ソフトH」と対応付けてメモリ11に格納する。
なお、「制御ソフトG」が保持する構成情報21の「ストレージノードB」へのフルコピーが完了した場合にも、この後、「ストレージノードD」の冗長化部22が、「制御ソフトG」が保持する構成情報21が更新されるごとに元の構成情報21との差分データを「ストレージノードB」に転送し始めるようになり、これにより「制御ソフトG」が保持する構成情報21と、「ストレージノードB」にコピーされた構成情報21とが同期して更新されるようになる(S19)。
この後、「ストレージノードC」のクラスタ制御部23は、「ストレージノードC」にインストールされている制御ソフト20を新たな「制御ソフトA」としてパッシブモードで起動する(S20)。同様に、「ストレージノードB」のクラスタ制御部23は、「ストレージノードB」にインストールされている制御ソフト20を新たな「制御ソフトH」としてパッシブモードで起動する(S21)。これにより「制御ソフトB」及び「制御ソフトG」の冗長化構成が回復される。
そして代表クラスタ制御部23は、この後、上述のような構成変更に応じて自己が管理する制御ソフト管理表25を更新する。具体的に、代表クラスタ制御部23は、制御ソフト管理表25における「制御ソフトA」に対応する行の稼働ノードID欄25D(図6)に格納されたノードIDを、「制御ソフトA」の新たな配置先である「ストレージノードC」のノードIDに変更すると共に、制御ソフト管理表25における「制御ソフトH」に対応する行の稼働ノードID欄25Dに格納されたノードIDを、「制御ソフトH」の新たな配置先である「ストレージノードB」のノードIDに変更する。
また代表クラスタ制御部23は、このようにして更新した自己が管理する制御ソフト管理表25の内容を同じクラスタ6内の各ストレージノード3のクラスタ制御部23にそれぞれ通知する(S22)。かくして、かかる通知を受領した各クラスタ制御部23は、代表クラスタ制御部23から通知された新たな制御ソフト管理表25の内容と同じ内容となるように自己が管理する制御ソフト管理表25をそれぞれ更新する。
以上により「ストレージノードA」に障害が発生した場合の一連の処理が終了する。
なお、上述の例では、図9に示すように、最終的に「ストレージノードB」上で「制御ソフトB」、「制御ソフトC」及び「制御ソフトH」の3つの制御ソフト20が稼働し、「ストレージノードC」上で「制御ソフトA」、「制御ソフトD」及び「制御ソフトE」の3つの制御ソフト20が稼働する構成になるが、CPU負荷やメモリ消費量を抑制するため、制御ソフト20の構成情報21をマージし、一部の制御ソフト20が他の制御ソフト20のI/O処理を引き継ぐことにより、ストレージノード3上で稼働する制御ソフト20の数を減らすようにしてもよい。
例えば、図9の例では、「制御ソフトC」が保持する構成情報21を「制御ソフトB」が保持する構成情報21にマージして「制御ソフトC」のI/O処理を「制御ソフトB」に引き継がせ、同じ冗長化グループに属する「制御ソフトC」と「制御ソフトD」を停止することができる。
またクラスタ6のストレージノード3を減設(いずれかのストレージノード3を撤去)する際にクラスタ6内で実行される処理の流れも基本的には上述と同様である。ただし、この場合には、本情報処理システム1の管理者が予め撤去対象のストレージノード3を指定し、そのストレージノード3上で稼働するすべての制御ソフト20を同一クラスタ6内の他のストレージノード3に移動すべき旨の指示(以下、これを全制御ソフト移動指示と呼ぶ)を代表クラスタ制御部23に与える。
そして、この全制御ソフト移動指示が与えられた代表クラスタ制御部23は、この全制御ソフト移動指示に従って、「撤去対象のストレージノード3」を上述の「障害が発生したストレージノード3」と置き換えた内容でステップS11以降の処理を実行する。これにより、管理者は、上述のステップS22までの処理が完了した後に、撤去対象のストレージノード3をクラスタ6から撤去することができる。
(2-2-3)ストレージノード増設時の流れ
次に、図7の状態から、図10に示すように、新たに「ストレージノードE」というストレージノード3がクラスタ6内に増設された場合にそのクラスタ6内で実行される処理の流れについて説明する。
まず、「ストレージノードE」を増設した後、その「ストレージノードE」に実装されたクラスタ制御部23を起動すると、当該クラスタ制御部23から「ストレージノードE」のCPU負荷及びメモリ消費量などの情報がそのクラスタ6内の各ストレージノード3のクラスタ制御部23にそれぞれ通知される。
そして、この通知を受信した上述の代表クラスタ制御部23(「ストレージノードB」のクラスタ制御部23)は、各ストレージノード3の負荷平準化(リバランス)のために、それまで「ストレージノードA」~「ストレージノードD」のいずれかのストレージノード3に実装されていた「制御ソフトA」~「制御ソフトH」の中から増設された「ストレージノードE」に再配置すべき制御ソフト20を決定する。そして代表クラスタ制御部23は、その決定結果をそのクラスタ6内の各クラスタ制御部23にそれぞれ通知する(S30)。
この際、代表クラスタ制御部23は、「ストレージノードA」~「ストレージノードE」のCPU負荷及び空きメモリ量や、バックエンドネットワーク5の空き帯域の大きさに基づいて、これらを平準化させるように、かつ、できる限り複数のアクティブモードの制御ソフト20が同一ストレージノード3上で稼働しないように「ストレージノードE」に再配置する制御ソフト20を決定する。ここでは、「ストレージノードA」上に実装された「制御ソフトH」が「ストレージノードE」に再配置する制御ソフト20として決定されたものとする。
一方、「制御ソフトH」と共に冗長化グループ26を構成する「制御ソフトG」が実装された「ストレージノードD」のクラスタ制御部23は、この決定結果を受信すると、その冗長化グループ26においてアクティブモードである「制御ソフトG」の構成情報21を「ストレージノードE」にフルコピーするよう冗長化部22に指示を与える(S31)。また、この指示を受領した冗長化部22は、「制御ソフトG」の構成情報21をバックエンドネットワーク5を介して「ストレージノードE」に転送する(S32)。かくして、この構成情報21を受信した「ストレージノードE」のクラスタ制御部23は、その構成情報21をメモリ11に格納する。
また「ストレージノードD」の冗長化部22は、「制御ソフトG」の構成情報21を「ストレージノードE」にコピーし終えると、「制御ソフトG」の構成情報21が更新されるごとに当該構成情報21の更新前との差分データをバックエンドネットワーク5を介して「ストレージノードE」に転送し始める。かくして、この差分データに基づいて「ストレージノードE」内の「制御ソフトG」の構成情報21のコピー結果(つまり構成情報21)が更新され、これにより「制御ソフトG」の構成情報21と、「ストレージノードE」内の「制御ソフトG」の構成情報21のコピー結果との同期が開始される。
この後、「ストレージノードD」のクラスタ制御部23は、図11に示すように、「制御ソフトG」の冗長化先を「ストレージノードE」だけとするよう冗長化部22に指示を与える(S33)。また「ストレージノードD」のクラスタ制御部23は、「制御ソフトG」が保持する構成情報21の「ストレージノードE」へのフルコピーが完了した旨を「ストレージノードE」のクラスタ制御部23に通知する。
かくして、この通知を受信した「ストレージノードE」のクラスタ制御部23は、当該「ストレージノードE」にインストールされている制御ソフト20を新たな「制御ソフトH」としてパッシブモードで起動する(S34)。また「ストレージノードE」のクラスタ制御部23は、元の「制御ソフトH」が稼働している「ストレージノードA」のクラスタ制御部23にその旨を通知する。
そして、この通知を受領した「ストレージノードA」のクラスタ制御部23は、自ストレージノード3内で稼働している「制御ソフトH」の稼働を停止させる(S35)。以上により「制御ソフトH」の「ストレージノードE」への再配置が完了する。
この後、代表クラスタ制御部23は、上述のようなシステムの構成変更に応じて自己が管理する制御ソフト管理表25を更新する。具体的に、代表クラスタ制御部23は、制御ソフト管理表25における「制御ソフトH」に対応する行の稼働ノードID欄25D(図6)に格納されたノードIDを、「制御ソフトH」の新たな配置先である「ストレージノードE」のノードIDに変更する。
また代表クラスタ制御部23は、このようにして更新した自己が管理する制御ソフト管理表25の内容を同じクラスタ6内の各ストレージノード3のクラスタ制御部23にそれぞれ通知する(S36)。かくして、かかる通知を受領した各クラスタ制御部23は、代表クラスタ制御部23から通知された新たな制御ソフト管理表25の内容と同じ内容となるように自己が管理する制御ソフト管理表25をそれぞれ更新する。
他方、代表クラスタ制御部23は、この後、ストレージノード管理表24及び制御ソフト管理表25を参照して、「ストレージノードE」のCPU負荷及び空きメモリ量や、バックエンドネットワーク5の通信帯域に余裕がある場合には、図12に示すように、「ストレージノードE」のクラスタ制御部23に対して、新たな制御ソフト20をアクティブモードの「制御ソフトI」として起動するよう指示を与える。かくして、かかる「制御ソフトI」の起動指示を受けた「ストレージノードE」のクラスタ制御部23は、その「ストレージノードE」内でそのとき未使用の制御ソフト20を「制御ソフトI」としてアクティブモードで起動する(S37)。
また代表クラスタ制御部23は、「制御ソフトI」と同じ冗長化グループ26を構成する制御ソフト20(以下、これを「制御ソフトJ」とする)の配置先のストレージノード3を決定する。この際、代表クラスタ制御部23は、ストレージ管理表24及び制御ソフト管理表25を参照して、負荷が低いストレージノード3を「制御ソフトJ」の配置先として決定する。ここでは、「制御ソフトJ」の配置先として「ストレージノードA」が決定されたものとする。
そして代表クラスタ制御部23は、このようにして決定したストレージノード3(「ストレージノードA」)のクラスタ制御部23に対して、新たな制御ソフト20をパッシブモードの「制御ソフトJ」として起動するよう指示を与える。かくして、この指示を受けた「ストレージノードA」のクラスタ制御部23は、その「ストレージノードA」内で新たな制御ソフト20を「制御ソフトJ」としてパッシブモードで起動する(S38)。
この後、代表クラスタ制御部23は、「制御ソフトJ」が配置されたストレージノード3のノードIDを「ストレージノードE」のクラスタ制御部23に通知する。また、この通知を受領した「ストレージノードE」のクラスタ制御部23は、「制御ソフトI」と冗長化グループ26を構成する制御ソフト20(「制御ソフトJ」)の制御ソフトIDと、その制御ソフト20が配置されたストレージノード3(「ストレージノードA」)のノードIDとを自ストレージノード3内の冗長化部22に通知する(S39)。なお、以下においては、このように「ストレージノードE」のクラスタ制御部23から自ストレージノード3内の冗長化部22に与えられる通知をID通知と呼ぶ。
また代表クラスタ制御部23は、上述のような新たな冗長化グループ26の構築に応じて自己が管理する制御ソフト管理表25を更新する。具体的に、代表クラスタ制御部23は、制御ソフト管理表25に「制御ソフトI」及び「制御ソフトJ」を新たに登録する。
また代表クラスタ制御部23は、制御ソフト管理表25における「制御ソフトI」に対応する行の状態欄25B(図6)に「Active」を格納し、その行のグループID欄25C(図6)に「制御ソフトI」が構成する冗長化グループ26に付与したグループIDを格納し、さらにその行の稼働ノードID欄25Dに「制御ソフトI」の配置先である「ストレージノードE」のノードIDを格納する。
さらに代表クラスタ制御部23は、制御ソフト管理表25における「制御ソフトJ」に対応する行の状態欄25B(図6)に「Passive」を格納し、その行のグループID欄25C(図6)に「制御ソフトJ」が構成する冗長化グループ26に付与したグループIDを格納し、さらにその行の稼働ノードID欄25Dに「制御ソフトJ」の配置先である「ストレージノードA」のノードIDを格納する。
一方、上述したID通知を受領した冗長化部22は、この後、「制御ソフトI」へのリード要求やライト要求の受付けを開始させると共に、この後、「制御ソフトI」の構成情報21が変更されるたびに、元の構成情報21との差分を差分データとして「制御ソフトJ」が実装された「ストレージノードA」に送信することにより、「制御ソフトJ」の構成情報21を「制御ソフトI」の構成情報21に常に同期して変更させる(S40)。
また代表クラスタ制御部23は、このようにして更新した自己が管理する制御ソフト管理表25の内容を同じクラスタ6内の各ストレージノード3のクラスタ制御部23にそれぞれ通知する(S41)。かくして、かかる通知を受領した各クラスタ制御部23は、代表クラスタ制御部23から通知された新たな制御ソフト管理表25の内容と同じ内容となるように自己が管理する制御ソフト管理表25をそれぞれ更新する。
なお上述のようにストレージノード3を増設した後、増設したストレージノード3上で制御ソフト20を直ちに稼働させる運用の他、クラスタ6内の他のストレージノード3の負荷が急激に増大した場合に備えて、ストレージノード3の増設後直ぐにはそのストレージノード3上で制御ソフト20を稼働させず、そのストレージノード3を空けておく運用を適用するようにしてもよい。
(2-2-4)アクティブ-アクティブ構成
図13は、各冗長化グループ26において、その冗長化グループ26を構成する2つの制御ソフト20が共にアクティブモードに設定された場合のクラスタ6の論理構成例を示す。
この場合、各冗長化グループ26では、いずれの制御ソフト20が構成情報21を更新した場合においても、更新前の構成情報21との差分が差分データとして相手側の制御ソフト20が稼働するストレージノード3に転送され、当該差分データに基づいてかかる相手側の制御ソフト20が保持する構成情報21が更新される(S42)。これにより同じ冗長化グループ26を構成する2つの制御ソフト20がそれぞれ保持する2つの構成情報21が常に同じ内容に維持(同期して更新)される。
なお、冗長化グループ26がアクティブ-アクティブ構成に設定された場合においても、ストレージノード3の障害発生時や増設時における処理の流れは、図7~図12について上述したアクティブ-パッシブ構成の場合と同様であるため、ここでの説明は省略する。
(2-3)ストレージノードの増減設時等における各プログラムの具体的な処理内容
次に、上述したストレージノード3の増減設時等における代表クラスタ制御部23や冗長化部22の具体的な処理内容について説明する。なお、以下においては、クラスタ制御部23や冗長化部22といった「プログラム」を各種処理の処理主体として説明するが、実際上は、その「プログラム」に基づいてストレージノード3のCPU10(図2)がその処理を実行することは言うまでもない。
(2-3-1)冗長化回復処理
図14は、クラスタ6内のいずれかのストレージノード3に障害が発生した場合に、そのクラスタ6内の代表クラスタ制御部23により実行される冗長化回復処理の処理手順を示す。
代表クラスタ制御部23は、平常時、上述のようにその代表クラスタ制御部23が属するクラスタ6内の各ストレージノード3にそれぞれ実装されたクラスタ制御部23と定期的に通信し、これらの各クラスタ制御部23から図5について上述したストレージノード管理表24や、図6について上述した制御ソフト管理表25に格納するための情報を収集している。
また代表クラスタ制御部23は、この処理と並行して図14に示す冗長化回復処理を実行しており、各ストレージノード3のクラスタ制御部23とかかる定期的な通信を行うことができたか否かに基づいて、いずれかのストレージノード3に障害が発生したか否かを監視し、又は、いずれかのストレージノード3を撤去する旨の所定指示が与えられるのをされたか否かを監視している(S50)。
そして代表クラスタ制御部23は、いずれかのストレージノード3に障害が発生したことを検出することによりステップS50で肯定結果を得ると、障害が発生したストレージノード3に配置されていた制御ソフト(以下、これを稼働不能制御ソフトと呼ぶ)20ごとに、その稼働不能制御ソフト20のI/O処理を当該稼働不能制御ソフト20と同じ冗長化グループ26を構成する他の制御ソフト(以下、これを同一グループ内制御ソフトと呼ぶ)20に引き継がせるよう、当該同一グループ内制御ソフト20が配置されたストレージノード3のクラスタ制御部23に指示を与える(S51)。
この際、代表クラスタ制御部23は、かかる同一グループ内制御ソフト20が複数存在する場合には、これら同一グループ内制御ソフト20のうち、稼働不能制御ソフト20が障害発生前までに使っていた記憶装置の容量、CPU負荷、メモリ使用量及びバックエンドネットワーク5の通信帯域を引き継いでも、記憶装置の容量、CPU負荷、メモリ量、及びバックエンドネットワーク5の通信帯域の許容範囲を超過しないストレージノード3に配置された同一グループ内制御ソフト20を稼働不能制御ソフト20のI/O処理を引き継ぐべき制御ソフト20として決定し、その同一グループ内制御ソフト20が配置されたストレージノード3のクラスタ制御部23に指示を与える。
かくして、この指示を受けたクラスタ制御部23は、制御ソフト管理表25を参照して、同一グループ内制御ソフト20がパッシブモードに設定されている場合には、当該同一グループ内制御ソフト20の状態をアクティブモードに変更する。
続いて、代表クラスタ制御部23は、かかる稼働不能制御ソフト20の代替となる新たな制御ソフト20の配置先のストレージノード(以下、これを配置先ストレージノードと呼ぶ)3を決定する配置先ストレージノード決定処理を実行する(S52)。例えば、稼働不能制御ソフト20及び同一グループ内制御ソフト20により構成される冗長化グループ26がアクティブ-アクティブ構成であった場合、代表クラスタ制御部23は、ストレージノード管理表24(図5)を参照して、負荷が低いストレージノード3を、かかる配置先ストレージノード3に決定する。
次いで、代表クラスタ制御部23は、ステップS52の配置先ストレージノード決定処理により、かかる配置先ストレージノード3を決定できたか否かを判定する(S53)。そして代表クラスタ制御部23は、この判定で否定結果を得た場合には、この冗長化回復処理を終了する。
これに対して、代表クラスタ制御部23は、ステップS53の判定で肯定結果を得ると、上述の同一グループ内制御ソフト20が実装されたストレージノード3のクラスタ制御部23に、上述のようにして決定した配置先ストレージノード3のノードIDを通知する(S54)。
かくして、この通知を受領したクラスタ制御部23は、同一グループ内制御ソフト20が保持している構成情報21を配置先ストレージノード3に転送するよう自ストレージノード3の冗長化部22に指示を与える。また、この指示を受けた冗長化部22は、同一グループ内制御ソフト20が保持している構成情報21を、バックエンドネットワーク5を介して配置先ストレージノード3に転送することにより、当該構成情報21を当該配置先ストレージノード3にフルコピーする。
なお、かかる冗長化部22は、この後、同一グループ内制御ソフト20が保持している構成情報21が更新された場合に、更新前の構成情報21との差分データをバックエンドネットワーク5を介して配置先ストレージノード3に転送する。かくして配置先ストレージノード3側では、この差分データに基づいてかかる構成情報21のコピーが更新され、これにより同一グループ内制御ソフト20が保持している構成情報21と、配置先ストレージノード3における当該構成情報21とのコピーとが完全に同期して更新されることになる。
一方、代表クラスタ制御部12は、ステップS54の処理後、同一グループ内制御ソフト20が保持している構成情報21と、配置先ストレージノード3におけるその構成情報21のコピーとが同期し終えるのを待ち受ける(S55)。そして代表クラスタ制御部23は、やがてこれら2つの構成情報21が同期し終えると、稼働不能制御ソフト20の代替となる制御ソフト20を起動するよう配置先ストレージノード3のクラスタ制御部23に指示を与える(S56)。
かくして、この指示を受けた配置先ストレージノード3のクラスタ制御部23は、そのときの未使用の制御ソフト20を起動する。この際、かかるクラスタ制御部23は、その制御ソフト20及び同一グループ内制御ソフト20で構成される冗長化グループ26をアクティブ-パッシブ構成とする場合には、その制御ソフト20をパッシブモードで起動し、当該冗長化グループ26をアクティブ-アクティブ構成とする場合には、その制御ソフト20をアクティブモードで起動する。また、かかるクラスタ制御部23は、この後、ステップS54で配置先ストレージノード3にフルコピーされた構成情報21をその制御ソフト20に対応付ける。かくして、その制御ソフト20は、この後、この構成情報21を保持し、当該構成情報21に基づいてI/O処理を実行する。
続いて、代表クラスタ制御部23は、自ストレージノード3が保持する制御ソフト管理表25(図6)を、上述のように稼働不能制御ソフト20をステップS56で起動した制御ソフト20に入れ替えた後の状態に更新する(S57)。
具体的に、代表クラスタ制御部23は、自ストレージノード3内の制御ソフト管理表25における稼働不能制御ソフト20に対応する行の状態欄25B(図6)にその稼働不能制御ソフト20が使用できなくなったことを意味する「Dead」を格納する。
また代表クラスタ制御部23は、その制御ソフト管理表25の未使用の行を1つ確保し、その行の制御ソフトID欄25A(図6)にステップS56で起動させた制御ソフト20に対して付与したその制御ソフト20に固有の制御ソフトIDを格納し、その行の状態欄25B(図6)にその制御ソフト20の状態(「Active」又は「Passive」)を格納し、その行のグループID欄25C(図6)に稼働不能制御ソフト20と同じ冗長化グループ26のグループIDを格納し、その行の稼働ノードID欄25D(図6)に配置先ストレージノード3のノードIDを格納する。
さらに代表クラスタ制御部23は、同じクラスタ6内の他のストレージノード3のクラスタ制御部23に対して、上述と同様に制御ソフト管理表25を更新するよう指示を与える。
そして代表クラスタ制御部23は、上述のようにしてクラスタ6内の各ストレージノード3の制御ソフト管理表25を更新し終えるとステップS50に戻り、この後、ステップS50以降を同様に繰り返す。
なお、撤去対象のストレージノード3を指定した上述の全制御ソフト移動指示が与えられた場合における代表クラスタ制御部23の処理内容も上述と同様である。この場合、上述の「稼働不能制御ソフト20」を「撤去対象のストレージノード3上で稼働する制御ソフト20」に置き換えた処理が実行される。
(2-3-2)配置先ストレージノード決定処理
図15は、かかる冗長化回復処理(図14)のステップS52において代表クラスタ制御部23により実行される配置先ストレージノード決定処理の具体的な処理手順を示す。
代表クラスタ制御部23は、冗長化回復処理のステップS52に進むと、この図15に示す配置先ストレージノード決定処理を開始し、まず、ストレージノード管理表24(図5)を参照して、クラスタ6内の各ストレージノード3のノードIDをCPU負荷が低いストレージノード3の順番で並べたリスト(以下、これを配置先ノード候補リストと呼ぶ)を作成する(S60)。このとき代表クラスタ制御部23は、CPU負荷が同じストレージノード3が複数存在する場合には、制御ソフト20の稼働数がより少ないストレージノード3をこれらのストレージノード3の中でより先頭に近い順位に設定する。
続いて、代表クラスタ制御部23は、ステップS60で作成した配置先ノード候補リストにノードIDが掲載された各ストレージノード3の中から先頭のノードIDを選択し(S61)、選択したノードIDに対応するストレージノード(以下、これを第1の選択ストレージノードと呼ぶ)3上で稼働不能制御ソフト20と同じ冗長化グループ26に属する制御ソフト20(つまり同一グループ内制御ソフト20)が稼働しているか否かを制御ソフト管理表25(図6)を参照して判断する(S62)。そして代表クラスタ制御部23は、この判断で肯定結果を得るとステップS65に進む。
これに対して、代表クラスタ制御部23は、ステップS62の判断で否定結果を得ると、ストレージノード管理表24を参照して、第1の選択ストレージノード3が、稼働不能制御ソフト20と同じ冗長化グループ26に属する他の制御ソフト20が配置されたストレージノードと同じ障害グループに属しているか否かを判断する(S63)。そして代表クラスタ制御部23は、この判断で肯定結果を得ると、ステップS65に進む。
これに対して、代表クラスタ制御部23は、ステップS63の判断で否定結果を得ると、ストレージノード管理表24を参照して、第1の選択ストレージノード3上に稼働不能制御ソフト20の代替となる制御ソフト20を配置した場合に、第1の選択ストレージノード3の記憶装置の容量、CPU負荷、メモリ量及びバックエンドネットワーク5の通信帯域の許容範囲を超過するか否かを判断する(S64)。なお、代替となる制御ソフト20の使用する使用容量、CPU負荷、メモリ使用量及び使用通信帯域は、例えば、障害発生直後に稼働不能制御ソフト20が使っていたCPU負荷、メモリ使用量及び使用通信帯域を制御ソフト管理表25から保存しておくことで判断できる。
そして代表クラスタ制御部23は、ステップS64の判断で否定結果を得ると、直前のステップS61で選択したノードIDが付与されたストレージノード(第1の選択ストレージノード)3を上述の配置先ストレージノード3に決定し(S67)、この後、この配置先ストレージノード決定処理を終了して冗長化回復処理(図14)に戻る。
これに対して、代表クラスタ制御部23は、ステップS64の判断で肯定結果を得ると、直前のステップS61で選択したノードIDを配置先ノード候補リストから削除した後(S65)、配置先ノード候補先リストが空になったか否かを判断する(S66)。
そして代表クラスタ制御部23は、この判断で否定結果を得るとステップS61に戻り、この後、ステップS61以降の処理を同様に実行する。また代表クラスタ制御部23は、ステップS66の判断で肯定結果を得ると、この配置先ストレージノード決定処理を終了する。
(2-3-3)リバランス処理
一方、図16は、クラスタ6にストレージノード3が増設された場合や、クラスタ6にストレージノード3が増設されていない場合においても定期的又は不定期にそのクラスタ6内の代表クラスタ制御部23により実行されるリバランス処理の処理手順を示す。代表クラスタ制御部23は、この処理手順に従って、クラスタ6内のいずれかの制御ソフト20の機能を当該クラスタ6内の他のストレージノード3(クラスタ6にストレージノード3が増設された場合には、その増設されたストレージノード(以下、これを増設ストレージノードと呼ぶ)3)に移動させることによりクラスタ6内で各ストレージノード3の負荷を分散する。
実際上、かかる代表クラスタ制御部23は、新たなストレージノード3が増設されたこと、又は、リバランス処理の定期的な又は不定期の実行タイミングが到来したことを認識すると、この図16に示すリバランス処理を開始し、まず、クラスタ6内の他のストレージノード3(増設ストレージノード3を含む)に移動させる制御ソフト(以下、これを移動対象制御ソフトと呼ぶ)20と、その移動対象制御ソフト20の移動先となるストレージノード(以下、これを移動先ストレージノードと呼ぶ)3とをそれぞれ決定する移動対象制御ソフト及び移動先ストレージノード決定処理を実行する(S70)。
例えば、代表クラスタ制御部23は、各冗長化グループ26がアクティブ-パッシブ構成の場合、負荷が高いストレージノード3に実装された制御ソフト20のうち、パッシブモードに設定された1つの制御ソフト20を移動対象制御ソフト20に決定する。また代表クラスタ制御部23は、クラスタ6内にストレージノード3が増設された場合には、増設ストレージノード3を移動先ストレージノード3に決定する。
続いて、代表クラスタ制御部23は、ステップS70で決定した移動対象制御ソフト20が稼働しているストレージノード3のクラスタ制御部23に対して、移動対象制御ソフト20の制御ソフトIDと、その移動対象制御ソフト20の移動先となるストレージノード(移動先ストレージノード)3のノードIDとを通知する(S71)。
かくして、この通知を受信したクラスタ制御部23は、通知された移動先ストレージノード3に対し、移動対象制御ソフト20が保持する構成情報21を転送するよう自ストレージノード3内の冗長化部22に指示を与える。また、この指示を受けた冗長化部22は、移動対象制御ソフト20が保持している構成情報21を、バックエンドネットワーク5を介して移動先ストレージノード3に転送する。そして、ストレージノード3のクラスタ制御部23は、この構成情報21を受信すると、これをメモリ11に格納する。また、かかる冗長化部22は、この後、移動対象制御ソフト20が保持している構成情報21と、移動先ストレージノード3が保持するその構成情報21のコピーとを同期させるよう、差分のデータをバックエンドネットワーク5を介して移動先ストレージノード3に転送する。
一方、代表クラスタ制御部23は、ステップS71の処理後、移動対象制御ソフト20が保持している構成情報21と、移動先ストレージノード3にコピーされた構成情報21とが同期し終えるのを待ち受けている(S72)。そして代表クラスタ制御部23は、やがてこれら2つの構成情報21が同期し終えると、移動対象制御ソフト20の代わりとなる制御ソフト20を起動するよう移動先ストレージノード3のクラスタ制御部23に指示を与える(S73)。
かくして、この指示が与えられた移動先ストレージノード3のクラスタ制御部23は、移動対象制御ソフト20の代替となる制御ソフト20を起動する。この際、かかるクラスタ制御部23は、移動対象制御ソフト20がパッシブモードで稼働していた場合にはその制御ソフト20もパッシブモードで起動し、移動対象制御ソフト20がアクティブモードで稼働していた場合にはその制御ソフト20もアクティブモードで起動する。
この後、代表クラスタ制御部23は、移動対象制御ソフト20が稼働しているストレージノード3のクラスタ制御部23に対して、移動対象制御ソフト20の稼働を停止させるよう指示を与える(S74)。かくして、この指示を受けたクラスタ制御部23は、その移動対象制御ソフト20の稼働を停止させる。
続いて、代表クラスタ制御部23は、自ストレージノード3が保持する制御ソフト管理表25(図6)を、上述のように移動対象制御ソフト20をステップS73で起動させた制御ソフト20に入れ替えた後の状態に更新すると共に、他のクラスタ制御部23にも同様に制御ソフト管理表25を更新するよう指示を与える(S75)。
具体的に、代表クラスタ制御部23は、自ストレージノード3内の制御ソフト管理表25における移動対象制御ソフト20に対応する行の稼働ノードID欄25D(図6)に格納されているノードIDを移動先ストレージノード3のノードIDに更新する。また代表クラスタ制御部23は、同じクラスタ6内の他のストレージノード3のクラスタ制御部23に対して、これと同様に制御ソフト管理表25を更新するよう指示を与える。
次いで、代表クラスタ制御部23は、新たな冗長化グループ26を生成し、当該冗長化グループ26を構成する各制御ソフト20の配置先のストレージノード3をそれぞれ決定する(S76)。この場合、代表クラスタ制御部23は、かかる冗長化グループ26を構成する各制御ソフト20のうちの1つの制御ソフト20の配置先を移動先ストレージノード3に決定し、他の制御ソフト20の配置先を図15について上述した配置先ストレージノード決定処理により決定する。
さらに代表クラスタ制御部23は、ステップS76の決定結果に従って、新規の冗長化グループ26を構成する各制御ソフト20をそれぞれステップS76で決定したストレージノード3に配置する(S77)。具体的に、代表クラスタ制御部23は、移動先ストレージノード3と、ステップS76で決定した各ストレージノード3のクラスタ制御部23に新規の制御ソフト20を起動するよう指示を与える。かくして、この指示を受けた各クラスタ制御部23は、それぞれ自ストレージノード3内のそのとき未使用の制御ソフト20を起動する。
このとき代表クラスタ制御部23は、ステップS77で起動させた2つの制御ソフト20のうちのアクティブモードに設定すべき制御ソフト20が実装されたストレージノード3(移動先ストレージノード3)のクラスタ制御部23に対して、相手側の制御ソフト20が配置されたストレージノード3のノードIDを通知する(S78)。
かくしてこの通知を受領したクラスタ制御部23は、かかる相手側の制御ソフト20の制御ソフトIDと、当該相手側の制御ソフト20が実装されたストレージノード3のノードIDとを自ストレージノード3内の冗長化部22に通知する。また、この通知を受けたクラスタ制御部23は、その制御ソフト20へのリード要求やライト要求の受付けを開始させると共に、その制御ソフト20が保持する構成情報21が更新されるたびに、元の構成情報21との差分を差分データとして相手側の制御ソフト20が実装されたストレージノード3にバックエンドネットワーク5を介して転送することにより、当該相手側の制御ソフト20が保持する構成情報21を同様に更新させる。
この後、代表クラスタ制御部23は、ステップS76~ステップS78の処理結果に基づいて自ストレージノード3内の制御クラスタ管理表25(図6)を更新し、さらにこれと同様に他のストレージノード3内の制御クラスタ管理表25を更新させる(S79)。
具体的に、代表クラスタ制御部23は、自ストレージノード3内の制御ソフト管理表25にそのとき新たに作成した冗長化グループ26を構成する各制御ソフト20をそれぞれ新規登録し、これら制御ソフト20のうち、移動先ストレージノード3上で稼働する制御ソフト20に対応する行の状態欄25B(図6)に「Active」、他方の制御ソフト20に対応する行の状態欄25Bに「Passive」を格納する。また代表クラスタ制御部23は、これら行のグループID欄25C(図6)にそれぞれそのとき作成した冗長化グループ26に対して付与したグループIDを格納し、さらにこれら行の稼働ノードID欄(図6)にそれぞれ対応する制御ソフト20が稼働しているストレージノード3のノードIDをそれぞれ格納する。
さらに代表クラスタ制御部23は、このようにして更新した自己が管理する制御ソフト管理表25の内容を同じクラスタ6内の各ストレージノード3のクラスタ制御部23にそれぞれ通知する。かくして、かかる通知を受領した各クラスタ制御部23は、代表クラスタ制御部23から通知された新たな制御ソフト管理表25の内容と同じ内容となるように自己が管理する制御ソフト管理表25をそれぞれ更新する。
この後、代表クラスタ制御部23は、このリバランス処理を終了する。
(2-3-4)移動対象制御ソフト及び移動先ストレージノード決定処理
図17は、かかるリバランス処理のステップS70において代表クラスタ制御部23により実行される移動対象制御ソフト及び移動先ストレージノード決定処理の具体的な処理手順を示す。
代表クラスタ制御部23は、リバランス処理のステップS70に進むと、この図17に示す移動対象制御ソフト及び移動先ストレージノード決定処理を開始し、まず、ストレージノード管理表24(図5)を参照して、クラスタ6内の各ストレージノード3のノードIDをCPU負荷が高いストレージノードの順番で並べたリスト(以下、これを移動元ノード候補リストと呼ぶ)を作成する(S80)。このとき代表クラスタ制御部23は、CPU負荷が同じストレージノード3が複数存在する場合には、制御ソフト20の稼働数がより多いストレージノード3をこれらストレージノード3の中でより先頭に近い順位に設定する。
続いて、代表クラスタ制御部23は、ステップS80で作成した移動元ノード候補リストにノードIDが掲載された各ストレージノード3の中から先頭のノードIDを選択し(S81)、選択したノードIDに対応するストレージノード(以下、これを第2の選択ストレージノードと呼ぶ)3上で1つ以上の制御ソフト20が稼働しているか否かを制御ソフト管理表25(図6)を参照して判断する(S82)。そして代表クラスタ制御部23は、この判断で否定結果を得ると、ステップS86に進む。
これに対して、代表クラスタ制御部23は、ステップS82の判断で肯定結果を得ると、ステップS81で選択したノードIDのストレージノード3上で稼働する制御ソフト20のうち、1つを選択し、これを移動対象制御ソフト20に決定する(S83)。移動対象制御ソフト20の選択方法としては、例えば、移動中のI/O性能への影響を抑えるために、パッシブモードに設定された制御ソフト20を選択する。あるいは、パッシブモードに設定された制御ソフト20がない場合には、アクティブモードに設定された制御ソフト20のうち、CPU負荷が低い制御ソフト20を選択する。
続いて、代表クラスタ制御部23は、図15について上述した配置先ストレージノード決定処理を実行することにより、移動対象制御ソフト20の配置先ストレージノード(移動先ストレージノード)3を決定する(S84)。
さらに代表クラスタ制御部23は、ステップS84の配置先ストレージノード決定処理により移動対象制御ソフト20の配置先ストレージノード(移動先ストレージノード)3を決定できたか否かを判断する(S85)。そして代表クラスタ制御部23は、この判断で肯定結果を得ると、この移動対象制御ソフト決定処理を終了してリバランス処理に戻る。
これに対して、代表クラスタ制御部23は、ステップS85の判断で否定結果を得ると、ステップS81で選択したノードIDを移動元ノード候補リストから削除した後(S86)、移動元ノード候補リストが空になったか否かを判断する(S87)。
そして代表クラスタ制御部23は、この判断で否定結果を得るとステップS81に戻り、この後、ステップS81以降の処理を同様に実行する。また代表クラスタ制御部23は、ステップS87の判断で肯定結果を得ると、この移動対象制御ソフト決定処理を終了してリバランス処理に戻る。
(3)本実施の形態の効果
以上のように本実施の形態では、同じ冗長化グループ26を構成する制御ソフト20を、クラスタ6を構成する各ストレージノード3の負荷を分散するように、それぞれ異なるストレージノード3に分散して配置するため、各ストレージノード3に制御ソフトウェア20が分散して配置される。
従って、本実施の形態の情報処理システム1によれば、クラスタ6内の各ストレージノード3で処理負荷を分散し、各ストレージノード3のCPU10やメモリ11、記憶装置12並びに第1及び第2の通信装置13,14といった情報処理資源を有効に活用することができる。
また本情報処理システム1では、ストレージノード3の減設又は障害発生により冗長化グループ26のいずれかの制御ソフト20が稼働し得なくなった場合においても、その代替となる制御ソフト20や当該制御ソフト20が利用する構成情報21が適切なストレージノード3上に直ちに再現されるため、制御ソフト20の冗長構成を常にかつ確実に維持することができ、その分、システム全体としての可用性及び信頼性を向上させることができる。
さらに本情報処理システム1では、ストレージノード3の増設時にはクラスタ3内のいずれかの制御ソフト20がそのストレージノード3に再配置されるため、本情報処理システム1の管理者の手を煩わせることなくストレージノード3の負荷分散を行うことができ、その分、システム全体としての管理を容易化させることができる。
(4)他の実施の形態
なお上述の実施の形態においては、図14~図17の処理を代表クラスタ制御部23が実行するようにした場合について述べたが、本発明はこれに限らず、ストレージノード3とは別個に、サーバ装置等のコンピュータ装置からなる管理装置(管理部)をストレージサービスネットワーク4やバックエンドネットワーク5に接続し、当該管理装置が代表クラスタ制御部23に変えて図14~図17の処理の一部又は全部を実行するようにしてもよい。
また上述の実施の形態においては、クラスタ6にストレージノード3が増設された場合に図16について上述したリバランス処理を実行するようにした場合について述べたが、本発明はこれに限らず、各ストレージノード3の負荷を分散させるように、必要な制御ソフト20を他のストレージノード3に再配置するリバランス処理を適宜行うようにしてもよい。
また上述の実施の形態においては、全てのストレージノード3に負荷を分散するように制御ソフト20を配置するリバランス処理(図16)について述べたが、本発明はこれに限らず、平常時、一部のストレージノード3には、アクティブモードの制御ソフト20あるいは、アクティブモードやパッシブモードに限らず制御ソフト20自体を配置しない分散方式をとってもよい。すなわち、記憶装置の容量、CPU負荷、メモリ量、バックエンドネットワーク5の通信帯域に余裕を持たせたストレージノード3を用意することで、障害発生時に計算資源不足となることを防ぐ分散方式をとってもよい。
また、サーバ上でハイパーバイザが動作し、ハイパーバイザ上で1または複数の仮想計算機が稼働し、その仮想計算機上で、図3に示す各種プログラムが動作してもよい。すなわち、各種プログラム(制御ソフト20、冗長化部22、クラスタ制御部23)は、物理計算機のハードウェア上で動作することもあれば、仮想計算機上で動作しても良い。同様に、コンピュートノード2は、仮想計算機上で動作するアプリケーションプログラム(ホストプログラム)であってもよいし、物理的なホスト計算機(ホストコンピュータ)であっても良い。情報処理システム1が複数のサーバを有するとき、サーバの一部が異なるサイトにあっても良い。また、情報処理システム1のサーバの一部または全部がクラウド上にあって、ネットワークを介して、ユーザにサービスが提供されても良い。
各種プログラム(制御ソフト20、冗長化部22、クラスタ制御部23)が動作する仮想計算機と、ホストプログラムが動作する仮想計算機とが、同一のサーバ(ノード)上にある構成(ハイパーコンバージドインフラストラクチャ)であっても、ネットワークを介して接続する異なるサーバ上にある構成であってもよい。