(57)【要約】【課題】ストレージノードの再組込み（ストレージノードをストレージクラスタから離脱させ再び当該ストレージノードをストレージクラスタのメンバとすること）を一律に自動で行うと、ストレージクラスタの安定性が低下し得る。【解決手段】ストレージクラスタのメンバであるＮ台（Ｎは３以上の整数）のストレージノードのうち対象とされたストレージノードである対象ストレージノードの重要度が所定の重要度以上であって、対象ストレージノードの信頼度が所定の信頼度以上であるか否かが判定される。判定の結果が真の場合に、対象ストレージノードの再組込みが行われる。対象ストレージノードの重要度は、対象ストレージノードがストレージクラスタから離脱したと仮定した場合の可用性の高さに依存する。対象ストレージノードの信頼度は、対象ストレージノードの稼働の傾向に依存する。【選択図】図１
2019192032.tif 000002
【特許請求の範囲】
【請求項１】
ストレージクラスタのメンバであるＮ台（Ｎは３以上の整数）のストレージノードを備え、
前記Ｎ台のストレージノードのうちのいずれかである第１のストレージノードが、
前記第１のストレージノード以外のストレージノードのうち対象とされたストレージノードである第２のストレージノードの重要度が所定の重要度以上であって、前記第２のストレージノードの信頼度が所定の信頼度以上であるか否かを判定し、
当該判定の結果が真の場合に、前記第２のストレージノードを前記ストレージクラスタから離脱させ再び前記第２のストレージノードを前記ストレージクラスタのメンバとすることである再組込みを行い、
前記第２のストレージノードの重要度は、前記第２のストレージノードが前記ストレージクラスタから離脱したと仮定した場合の可用性の高さに依存し、
前記第２のストレージノードの信頼度は、前記第２のストレージノードの稼働の傾向に依存する、
記憶システム。
【請求項２】
前記Ｎ台のストレージノードの各々は、プロセッサ部を有し、
前記Ｎ台のストレージノードが、
Ｐ個（Ｐは自然数）のプログラムクラスタと、
Ｑ個（Ｑは２以上Ｎ以下の整数）のクラスタ制御プログラムと
を有し、
前記Ｐ個のプログラムクラスタの各々は、
アクティブのＩ／Ｏ（Input/Output）制御プログラムと、
当該アクティブのＩ／Ｏ制御プログラム以外のＩ／Ｏ制御プログラムであり当該アクティブのＩ／Ｏ制御プログラムが配置されているストレージノードとは別の１以上のストレージノードにそれぞれ配置されている１以上のスタンバイのＩ／Ｏ制御プログラムと
を含み、
前記アクティブのＩ／Ｏ制御プログラムは、当該Ｉ／Ｏ制御プログラムが配置されているストレージノードにおけるプロセッサ部によって実行されることで、１以上のストレージノードに対して、データセットを書き込み、
前記１以上のスタンバイのＩ／Ｏ制御プログラムのいずれかが、前記アクティブのＩ／Ｏ制御プログラムが停止した場合に当該Ｉ／Ｏ制御プログラムに代わってアクティブとなり、
前記Ｑ個のクラスタ制御プログラムは、
プライマリのクラスタ制御プログラムと、
当該プライマリの制御プログラム以外のクラスタ制御プログラムであり当該プライマリのクラスタ制御プログラムが配置されているストレージノードとは別の１以上のストレージノードにそれぞれ配置されている１以上のセカンダリのクラスタ制御プログラムと
を含み、
前記プライマリのクラスタ制御プログラムは、当該クラスタ制御プログラムが配置されているストレージノードにおけるプロセッサ部によって実行されることで、前記ストレージクラスタを管理し、
前記１以上のセカンダリのクラスタ制御プログラムのいずれかが、前記プライマリのクラスタ制御プログラムが停止した場合に当該クラスタ制御プログラムに代わってプライマリとなり、
前記第２のストレージノードの重要度は、
前記第２のストレージノードに格納されている少なくとも１つのデータセットについての当該データセットの冗長度と、
前記第２のストレージノードに配置されている少なくとも１個のＩ／Ｏ制御プログラムについてのプログラムクラスタにおけるＩ／Ｏ制御プログラムの冗長度と、
前記Ｑ個のクラスタ制御プログラムがそれぞれ配置されているＱ台のストレージノードに前記第２のストレージノードが含まれていなければＱであり、前記Ｑ台のストレージノードに前記第２のストレージノードが含まれていればＱから前記第２のストレージノードの数を引いた値である残存ノード数と
に依存する、
請求項１に記載の記憶システム。
【請求項３】
前記第２のストレージノードの重要度は、前記第２のストレージノードに格納されている少なくとも１つのデータセットについての当該データセットの冗長度に依存する、
請求項１に記載の記憶システム。
【請求項４】
前記Ｎ台のストレージノードの各々は、プロセッサ部を有し、
前記Ｎ台のストレージノードが、Ｐ個（Ｐは自然数）のプログラムクラスタを有し、
前記Ｐ個のプログラムクラスタの各々は、
アクティブのＩ／Ｏ（Input/Output）制御プログラムと、
当該アクティブのＩ／Ｏ制御プログラム以外のＩ／Ｏ制御プログラムであり当該アクティブのＩ／Ｏ制御プログラムが配置されているストレージノードとは別の１以上のストレージノードにそれぞれ配置されている１以上のスタンバイのＩ／Ｏ制御プログラムと
を含み、
前記アクティブのＩ／Ｏ制御プログラムは、当該Ｉ／Ｏ制御プログラムが配置されているストレージノードにおけるプロセッサ部によって実行されることで、１以上のストレージノードに対して、データセットを書き込み、
前記１以上のスタンバイのＩ／Ｏ制御プログラムのいずれかが、前記アクティブのＩ／Ｏ制御プログラムが停止した場合に当該Ｉ／Ｏ制御プログラムに代わってアクティブとなり、
前記第２のストレージノードの重要度は、前記第２のストレージノードに配置されている少なくとも１個のＩ／Ｏ制御プログラムについてのプログラムクラスタにおけるＩ／Ｏ制御プログラムの冗長度に依存する、
請求項１に記載の記憶システム。
【請求項５】
前記Ｎ台のストレージノードの各々は、プロセッサ部を有し、
前記Ｎ台のストレージノードが、Ｑ個（Ｑは２以上Ｎ以下の整数）のクラスタ制御プログラムを有し、
前記Ｑ個のクラスタ制御プログラムは、Ｑ台のストレージノードにそれぞれ配置されており、
前記Ｑ個のクラスタ制御プログラムは、
プライマリのクラスタ制御プログラムと、
当該プライマリの制御プログラム以外のクラスタ制御プログラムであり当該プライマリのクラスタ制御プログラムが配置されているストレージノードとは別の１以上のストレージノードにそれぞれ配置されている１以上のセカンダリのクラスタ制御プログラムと
を含み、
前記プライマリのクラスタ制御プログラムは、当該クラスタ制御プログラムが配置されているストレージノードにおけるプロセッサ部によって実行されることで、前記記憶システムとしてのクラスタを管理し、
前記１以上のセカンダリのクラスタ制御プログラムのいずれかが、前記プライマリのクラスタ制御プログラムが停止した場合に当該クラスタ制御プログラムに代わってプライマリとなり、
前記第２のストレージノードの重要度は、前記Ｑ個のクラスタ制御プログラムがそれぞれ配置されているＱ台のストレージノードに前記第２のストレージノードが含まれていなければＱであり、前記Ｑ台のストレージノードに前記第２のストレージノードが含まれていればＱから前記第２のストレージノードの数を引いた値である残存ノード数に依存する、
請求項１に記載の記憶システム。
【請求項６】
前記第２のストレージノードの重要度は、前記残存ノード数が前記残存ノード数の閾値以下か否かに依存し、
前記残存ノード数の閾値は、Ｑの過半数に、同時に再組込みの対象となり得るストレージノードの数を加えた値である、
請求項５に記載の記憶システム。
【請求項７】
前記第２のストレージノードの稼働の傾向は、前記第２のストレージノードの障害発生の傾向を含む、
請求項１に記載の記憶システム。
【請求項８】
前記第２のストレージノードの障害発生の傾向は、前記第２のストレージノードの最近の長期間における障害発生の傾向と、前記第２のストレージノードの最近の短期間における障害発生の傾向とを含む、
請求項７に記載の記憶システム。
【請求項９】
ストレージクラスタのメンバであるＮ台（Ｎは３以上の整数）のストレージノードのうち対象とされたストレージノードである対象ストレージノードの重要度が所定の重要度以上であって、前記対象ストレージノードの信頼度が所定の信頼度以上であるか否かを判定し、
当該判定の結果が真の場合に、前記対象ストレージノードを前記ストレージクラスタから離脱させ再び前記対象ストレージノードを前記ストレージクラスタのメンバとすることである再組込みを行い、
前記対象のストレージノードの重要度は、前記対象ストレージノードが前記ストレージクラスタから離脱したと仮定した場合の可用性の高さに依存し、
前記対象ストレージノードの信頼度は、前記対象ストレージノードの稼働の傾向に依存する、
クラスタ構成制御方法。
【請求項１０】
ストレージクラスタのメンバであるＮ台（Ｎは３以上の整数）のストレージノードのうち対象とされたストレージノードである対象ストレージノードの重要度が所定の重要度以上であって、前記対象ストレージノードの信頼度が所定の信頼度以上であるか否かを判定し、
当該判定の結果が真の場合に、前記対象ストレージノードを前記ストレージクラスタから離脱させ再び前記対象ストレージノードを前記ストレージクラスタのメンバとすることである再組込みを行う、
ことを計算機に実行させ、
前記対象のストレージノードの重要度は、前記対象ストレージノードが前記ストレージクラスタから離脱したと仮定した場合の可用性の高さに依存し、
前記対象ストレージノードの信頼度は、前記対象ストレージノードの稼働の傾向に依存する、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、複数台のストレージノードで構成されたストレージクラスタの制御に関する。
【背景技術】
【０００２】
複数台の計算ノードで構成されたスケールアウト型の分散計算システムが知られている（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−０７５０２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
障害（例えば、予期せぬリブート）が発生した計算ノードを分散計算システムから離脱させることで分散計算システムを維持することが考えられる。
【０００５】
しかし、複数台のノードで構成されたクラスタが、複数台のストレージノードで構成されたストレージクラスタである場合、障害が発生したストレージノードのような対象ノードをストレージクラスタから離脱させたままとすることは好ましくない。なぜなら、各ストレージノードには、ストレージクラスタのホストシステムからのＩ／Ｏの対象となるデータセットであるユーザデータセットが格納されており、対象ノードがストレージクラスタから離脱したままとなると、対象ノード内のユーザデータセットの冗長度が低下し得るからである。例えば、対象ノードにしかないユーザデータセットがある場合、ホストシステムは、当該ユーザデータセットにアクセスできなくなる。
【０００６】
このような問題を避けるために、対象ノードをストレージクラスタから離脱させて再びストレージクラスタのメンバとすることである再組込みを行うことが考えられる。
【０００７】
対象ノードの再組込みを、ストレージクラスタの管理者からの操作の下で行われるとすると、管理者による管理の負担が大きい。
【０００８】
そこで、一律に対象ノードの再組込みを行うこと、つまり、自動で再組込みを行うことが考えられる。しかし、これは、ストレージクラスタの安定性を低下させるおそれがある。例えば、対象ノードに発生した障害が発生頻度の高い障害であると、対象ノードの再組込みが頻発することになってしまう。
【課題を解決するための手段】
【０００９】
クラスタ構成制御装置（例えば、第１のストレージノード）が、ストレージクラスタのメンバであるＮ台（Ｎは３以上の整数）のストレージノードのうち対象とされたストレージノードである対象ストレージノード（例えば、第２のストレージノード）の重要度が所定の重要度以上であって、対象ストレージノードの信頼度が所定の信頼度以上であるか否かを判定する。クラスタ構成制御装置は、判定の結果が真の場合に、対象ストレージノードの再組込み（対象ストレージノードをストレージクラスタから離脱させ再び対象ストレージノードをストレージクラスタのメンバとすること）を行う。対象ストレージノードの重要度は、対象ストレージノードがストレージクラスタから離脱したと仮定した場合の可用性の高さに依存する。対象ストレージノードの信頼度は、対象ストレージノードの稼働の傾向に依存する。
【００１０】
クラスタ構成制御装置は、ストレージクラスタにおけるいずれかのストレージノード（例えば、後述するプライマリのマスターストレージノード）でもよいし、ストレージクラスタ（記憶システム）の管理システムであってもよい。
【発明の効果】
【００１１】
本発明によれば、対象ストレージノードの再組込みが自動化されてもストレージクラスタの安定性が低下してしまうことを避けることができる。
【図面の簡単な説明】
【００１２】
【図１】一実施形態に係る記憶システムを含むシステム全体の構成を示す。
【図２】記憶システムにおけるプログラム及びデータセットの配置の一例を示す。
【図３】ストレージノードの物理的な構成を示す。
【図４】ノード管理テーブルの構成を示す。
【図５】データ配置管理テーブルの構成を示す。
【図６】Ｉ／Ｏ配置管理テーブルの構成を示す。
【図７】クラスタ配置管理テーブルの構成を示す。
【図８】ノード障害管理テーブルの構成を示す。
【図９】再組込み判定テーブルの構成を示す。
【図１０】データ重要度の判定の一例を説明する模式図である。
【図１１】図１０に記載のデータ配置を示すデータ配置管理テーブルを示す。
【図１２】Ｉ／Ｏ重要度の判定の一例を説明する模式図である。
【図１３】図１２に記載のプログラム配置を示すＩ／Ｏ配置管理テーブルを示す。
【図１４】クラスタ重要度の判定の一例を説明する模式図である。
【図１５】図１４に記載のプログラム配置を示すクラスタ配置管理テーブルを示す。
【図１６】重要度更新処理のフロー図である。
【図１７】構成制御処理のフロー図である。
【図１８】構成制御処理のシーケンス図である。
【発明を実施するための形態】
【００１３】
以下の説明では、「インターフェース部」は、１個以上のインターフェースでよい。当該１個以上のインターフェースは、１個以上の同種の通信インターフェースデバイス（例えば１個以上のＮＩＣ（Network Interface Card））であってもよいし２個以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１４】
また、以下の説明では、「メモリ部」は、１個以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１５】
また、以下の説明では、「ＰＤＥＶ部」は、１個以上のＰＤＥＶであり、典型的には補助記憶デバイスでよい。「ＰＤＥＶ」は、物理的な記憶デバイス（Physical storage DEVice）を意味し、典型的には、不揮発性の記憶デバイス、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。つまり、ＰＤＥＶ部は、記憶デバイス部の一例である。
【００１６】
また、以下の説明では、「記憶部」は、メモリ部及びＰＤＥＶ部のうちの少なくとも１つ（典型的には少なくともメモリ部）である。
【００１７】
また、以下の説明では、「プロセッサ部」は、１個以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。少なくとも１つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも１つのプロセッサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサでもよい。
【００１８】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、この種の情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２個以上のテーブルに分割されてもよいし、２個以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００１９】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び／又はインターフェース部等を用いながら行うため、処理の主語が、プロセッサ部（或いは、そのプロセッサ部を有するコントローラのようなデバイス）とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な（例えば非一時的な）記録媒体であってもよい。また、以下の説明において、２個以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２個以上のプログラムとして実現されてもよい。
【００２０】
また、以下の説明では、「記憶システム」は、複数台のストレージノードで構成されたストレージクラスタを含んだシステムである。記憶システムは、ストレージクラスタそれ自体でもよいし、ストレージクラスタに属するストレージノード以外のストレージノードを含んでいてもよい。記憶システムは、典型的には、スケールアウト型の記憶システム、或いは、分散記憶システムと呼ばれてよい。「ストレージノード」は、記憶システム（特にストレージクラスタ）のメンバとしての装置であり、汎用計算機でもよいし、専用計算機（例えば、複数個のＰＤＥＶを有するいわゆるディスクアレイ装置のようなストレージ装置）でもよい。記憶システムは、冗長構成グループを有してよい。冗長構成は、Erasure Coding、ＲＡＩＮ（Redundant Array of Independent Nodes）及びノード間ミラーリングのように複数台のストレージノードでの構成でもよいし、ＰＤＥＶ部の少なくとも一部としての１以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループのように単一の計算機（例えばストレージノード）での構成でもよい。
【００２１】
また、以下の説明では、「データセット」とは、アプリケーションプログラムのようなプログラムから見た１つの論理的な電子データの塊であり、例えば、レコード、ファイル、キーバリューペア及びタプルのうちのいずれでもよい。データセットのうち、特に、記憶システムのホストシステムからのＩ／Ｏ（Input/Output）要求に応答して入出力されるデータセットを「ユーザデータセット」と言う。
【００２２】
また、「プログラムクラスタ」は、１個以上のアクティブのＩ／Ｏ制御プログラムと、１個以上のスタンバイのＩ／Ｏ制御プログラムを含む。各プログラムクラスタにおいて、アクティブのＩ／Ｏ制御プログラムとスタンバイのＩ／Ｏ制御プログラムは、１：１、１：多、多：１及び多：多のいずれでもよい。以下、説明を簡潔にするために、アクティブのＩ／Ｏ制御プログラムとスタンバイのＩ／Ｏ制御プログラムは１：１であるとし、それに伴い、プログラムクラスタを「プログラムペア」と呼ぶことにする。
【００２３】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別して説明する場合に、参照符号を使用することがある。例えば、ストレージノードを特に区別しないで説明する場合には、「ストレージノード１０１」と記載し、個々のノードを区別して説明する場合には、「ストレージノード１０１―Ｓ０」、「ストレージノード１０１―Ｓ１」のように記載することがある。なお、要素の参照符号のうち、ハイフンに続く番号は、当該要素のＩＤ、又は、当該要素を有する要素のＩＤを示す。
【００２４】
以下、本発明の一実施形態を説明する。
【００２５】
図１は、一実施形態に係る記憶システムを含むシステム全体の構成を示す。
【００２６】
フロントエンドネットワーク６１に、１台以上のホストノード（ホストシステムの一例）５１と、記憶システム１００を構成する複数台のストレージノード１０１とが接続される。バックエンドネットワーク６２に、複数台のストレージノード１０１が接続される。フロントエンドネットワーク６１とバックエンドネットワーク６２のいずれも、ファイバチャネル（Fibre Channel）、イーサネット（登録商標）、InfiniBand又はＬＡＮ（Local Area Network）などから構成される通信ネットワークでよい。フロントエンドネットワーク６１とバックエンドネットワーク６２は一体でもよい。
【００２７】
ホストノード５１は、記憶システム１００に対してリード要求又はライト要求（これらをまとめてＩ／Ｏ要求と呼ぶことができる）を送信する計算機（例えば汎用計算機）である。少なくとも１つの物理計算機で実行される仮想マシン（ＶＭ）がホストノード５１として機能してもよい。なお、ホストノードの参照符号は、「５１−Ｈｎ」（ｎ＝０、１、２、…といった整数）という構成であるが、「Ｈｎ」は、当該ホストノードのＩＤである。
【００２８】
記憶システム１００は、Ｎ台（Ｎの値については後述）のストレージノード１０１で構成されるが、当該記憶システム１００は、各汎用計算機がストレージ機能を有するソフトウェアを実行することにより構築されたＳＤＳ１８０の基である。ＳＤＳ１８０は、個々のストレージノード１０１に構築されてもよいが、本実施形態では、複数台のストレージノード１０１に跨っている。なお、ストレージノードの参照符号は、「１０１−Ｓｎ」（ｎ＝０、１、２、…といった整数）という構成であるが、「Ｓｎ」は、当該ストレージノードのＩＤである。
【００２９】
また、記憶システム１００は、ＳＤＳ１８０に加えて、ソフトウェアディファインドのホストノード５１の基になってもよいし、或いは、ホストノード５１としての１台以上の仮想マシンを実行してもよい。つまり、同一のシステム基盤上に、仮想的に、記憶システムとホストノードとが存在してもよい。
【００３０】
フロントエンドネットワーク６１及びバックエンドネットワーク６２のうちの少なくとも１つに、管理システム（図示せず）が接続されてよい。管理システムは、記憶システム１００（又は、記憶システム１００とホストノード５１とを含んだ計算機システム）を管理する計算機システムである。管理システムは、例えば、記憶システム１００の性能を監視したり、種々の指示を送信したりできる。少なくとも１つの物理計算機で実行される仮想マシンが管理システムとして機能してもよい。
【００３１】
図２は、記憶システム１００におけるプログラム及びデータセットの配置の一例を示す。
【００３２】
複数台のストレージノード１０１の各々が、論理記憶空間７１を有する。ストレージノード１０１における論理記憶空間７１は、典型的には、当該ストレージノード１０１が有するＰＤＥＶ部（例えば内蔵ディスク）に基づく記憶空間である。論理記憶空間７１の少なくとも一部が、図示しない外部のストレージが提供する記憶空間に紐づけられた記憶空間でもよい。なお、論理記憶空間の参照符号は、「７１−Ｓｎ」（ｎ＝０、１、２、…といった整数）という構成であるが、「Ｓｎ」は、当該論理記憶空間を有するストレージノード１０１のＩＤである。すなわち、論理記憶空間の参照符号中の「Ｓｎ」から、当該論理記憶空間がいずれのストレージノード１０１に存在するかがわかる。
【００３３】
論理記憶空間７１に、ユーザデータセット４が格納される。各ユーザデータセット４の冗長度は、０以上である。（冗長度＋１）が、ユーザデータセット４の数である。なお、ユーザデータセットの参照符号は、「４−Ｇｎ」（ｎ＝０、１、２、…といった整数）という構成であるが、「Ｇｎ」は、同一のユーザデータセットのグループのＩＤである。すなわち、ユーザデータセットの参照符号中の「Ｇｎ」から、当該ユーザデータセットが属するグループがわかる。
【００３４】
複数台のストレージノード１０１には、複数個のＩ／Ｏ制御プログラム６で構成された２個以上のプログラムペア（プログラムクラスタの一例）が配置される。いずれのＩ／Ｏ制御プログラム６も、当該Ｉ／Ｏ制御プログラムに関連付けられた論理チャンク（論理記憶領域の一例）に対してＩ／Ｏ（Input/Output）を行うためのプログラムである。以下、Ｉ／Ｏ制御プログラム６に関し、状態がアクティブであるＩ／Ｏ制御プログラム６を、「アクティブＩ／Ｏ制御プログラム６Ａ」と言い、状態がスタンバイであるＩ／Ｏ制御プログラム６を、「スタンバイ制御プログラム６Ｓ」と言うことがある。
【００３５】
各プログラムペアは、アクティブＩ／Ｏ制御プログラム６ＡとスタンバイＩ／Ｏ制御プログラム６Ｓ（当該アクティブＩ／Ｏ制御プログラム６Ａが停止した場合に当該アクティブＩ／Ｏ制御プログラム６Ａに代わってアクティブとなるＩ／Ｏ制御プログラム６Ｓ）とのペアである。以下、プログラムペアＰｎ（ＩＤがＰｎであるプログラムペア）に属するアクティブＩ／Ｏ制御プログラム６Ａを、「アクティブＩ／Ｏ制御プログラム６Ａ−Ｐｎ」と言い、プログラムペアＰｎに属するスタンバイＩ／Ｏ制御プログラム６Ｓを、「スタンバイＩ／Ｏ制御プログラム６Ｓ−Ｐｎ」と言う（ｎ＝０、１、２、…といった整数）。
【００３６】
１つのストレージノード１０１に、異なるプログラムペアのアクティブＩ／Ｏ制御プログラム６ＡとスタンバイＩ／Ｏ制御プログラム６Ｓが混在していてもよいし、複数のプログラムペアのうちの複数のスタンバイＩ／Ｏ制御プログラム６Ｓが一部のストレージノード１０１に集約されてもよい（言い換えれば、スタンバイＩ／Ｏ制御プログラム６Ｓが配置されているストレージノード１０１にはいずれのアクティブＩ／Ｏ制御プログラム６Ａが配置されないでもよい）。
【００３７】
アクティブＩ／Ｏ制御プログラム６Ａは、当該Ｉ／Ｏ制御プログラム６Ａが配置されているストレージノード１０１におけるＣＰＵ３０１（図３参照）によって実行されることで、１以上のストレージノード１０１（例えば、当該Ｉ／Ｏ制御プログラムを有するストレージノード１０１を含む１以上のストレージノード１０１）がそれぞれ有する１以上の論理記憶空間７１に対して、データセットを書き込む。典型的には、データセットは、ＲＡＩＤやErasure Codingのような冗長化技術に従い書き込まれる。
【００３８】
記憶システム１００における複数台のストレージノードにそれぞれ複数個のクラスタ制御プログラム５が配置される。なお、クラスタ制御プログラムの参照符号は、「５−Ｃｎ」（ｎ＝０、１、２、…といった整数）という構成であるが、「Ｃｎ」は、当該クラスタ制御プログラムのＩＤである。
【００３９】
複数個のクラスタ制御プログラム５の各々は、ストレージクラスタの管理を行ったり、ホストノード５１（又は図示しない管理システム）から要求（例えば、Ｉ／Ｏ要求や他の要求）を受け付け当該要求に応答してＩ／Ｏ制御プログラム６のようなプログラムを呼び出したりする。ストレージクラスタの管理の一例として、リソース配置の制御がある。リソース配置とは、ストレージクラスタにおける物理的又は論理的なリソースの配置であり、例えば、ユーザデータセットの配置やＩ／Ｏ制御プログラムの配置等である。
【００４０】
複数個のクラスタ制御プログラム５は、Ｑ個のマスタークラスタ制御プログラム５と、マスタークラスタ制御プログラム５以外の１以上のクラスタ制御プログラム５である１以上のワーカークラスタ制御プログラム５である。Ｑ個のマスタークラスタ制御プログラム５間で通信し合う。マスタークラスタ制御プログラム５が配置されているストレージノード１０１を「マスターストレージノード１０１」と言い、ワーカークラスタ制御プログラム５が配置されているストレージノード１０１を「ワーカーストレージノード１０１」と言うことができる。マスターストレージノード１０１間の通信経路障害等によりマスタークラスタ制御プログラム５が分断されてもスプリットブレインシンドロームが生じることを防ぐため、Ｑは３以上の整数であり、結果として、Ｑ以上であるＮも、３以上の整数である。
【００４１】
各マスタークラスタ制御プログラム５は、重要度判定機能２１１、信頼度判定機能２１２、及び、再組込み判定機能２１３を有する。Ｑ個のマスタークラスタ制御プログラム５は、１個のプライマリのマスタークラスタ制御プログラム５（例えば５−Ｃ０）と、プライマリのマスタークラスタ制御プログラム５以外の１以上のマスタークラスタ制御プログラム５である１以上のセカンダリのマスタークラスタ制御プログラム５であるが、各マスタークラスタ制御プログラム５の機能２１１〜２１３は、当該マスタークラスタ制御プログラム５がプライマリとなることで発揮される。重要度判定機能２１１は、重要度を判定するための機能である。信頼度判定機能２１２は、信頼度を判定するための機能である。再組込み判定機能２１３は、再組込み判定を行うための機能である。１以上のセカンダリのマスタークラスタ制御プログラム５のいずれかが、プライマリのマスタークラスタ制御プログラム５が停止した場合に当該クラスタ制御プログラム５に代わってプライマリとなる。
【００４２】
各マスタークラスタ制御プログラム５は、ノード管理テーブル２２１、データ配置管理テーブル２２２、Ｉ／Ｏ配置管理テーブル２２３、クラスタ配置管理テーブル２２４、ノード障害管理テーブル２２５、及び、再組込み判定テーブル２２６を管理する。これらのテーブル２２１〜２２６の各々の参照符号は、論理記憶空間の参照符号は、「−Ｓｎ」（ｎ＝０、１、２、…といった整数）を含むが、「Ｓｎ」は、当該テーブルを有するストレージノード１０１のＩＤである。すなわち、テーブルの参照符号中の「Ｓｎ」から、当該テーブルがいずれのストレージノード１０１に存在するかがわかる。これらのテーブル２２１〜２２６は、マスターストレージノード１０１間で同期する。各テーブルの構成は、後に説明する。
【００４３】
以上が、記憶システム１００におけるプログラム及びデータセットの配置の一例である。なお、クラスタ制御プログラム５（例えば、マスタークラスタ制御プログラム５）が、当該プログラム５を有するストレージノード１０１における論理記憶空間７１を提供又は管理してよい。論理記憶空間７１は、１個以上の論理チャンク（論理記憶領域の一例）に区切られていてよい。論理チャンクにユーザデータセットが格納されてよい。１個の論理チャンクに１個以上のユーザデータセットが格納されてもよいし、２以上の論理チャンクに跨って１個のユーザデータセットが格納されてもよい。ストレージノード１０１内のＰＤＥＶ部は、複数個の物理チャンク（物理記憶領域の一例）を有してよい。各ストレージノード１０１において、各論理チャンクには、異なる２台以上のストレージノード１０１における２個以上の物理チャンクが関連付けられてよい。同一のプログラムペアについて、アクティブＩ／Ｏ制御プログラム６Ａに関連付けられる論理チャンクと、スタンバイＩ／Ｏ制御プログラム６Ｓに関連付けられる論理チャンクは、それぞれ、同一の２個以上の物理チャンクに関連付けられてよい。論理チャンクと物理チャンクの対応関係は、クラスタ制御プログラム５（又は、他のプログラム）によって管理されてよい。
【００４４】
図３は、ストレージノード１０１の物理的な構成を示す。
【００４５】
ストレージノード１０１は、汎用計算機でよい。ストレージノード１０１は、ＮＩＣ（Network Interface Card）３０４、ＰＤＥＶ１２、メモリ３０２及びそれらに接続されたＣＰＵ３０１を有する。ＮＩＣ３０４、ＰＤＥＶ１２、メモリ３０２及びＣＰＵ３０１のいずれも、複数存在してよい。ＮＩＣ３０４は、インターフェース部の一例である。ＰＤＥＶ１２は、ＰＤＥＶ部の一例である。メモリ３０２は、メモリ部の一例である。ＰＤＥＶ１２及びメモリ３０２は、記憶部の一例である。ＣＰＵ３０１は、プロセッサ部の一例である。
【００４６】
フロントエンドネットワーク６１に接続されるＮＩＣ３０４と、バックエンドネットワーク６２に接続されるＮＩＣ３０４があってよい。ＮＩＣ３０４は、ストレージノード１０１の外部の装置と通信するためのインターフェースデバイスである。ＮＩＣ３０４は、ファイバチャネル（Fibre Channel）カードやイーサネット（登録商標）カード、InfiniBandカード、無線ＬＡＮカード、PCIeホストアダプタのいずれでもよい。
【００４７】
ＰＤＥＶ１２は、上述したように、ＨＤＤ及びＳＳＤのいずれでもよく、また、ＳＣＭ（Storage Class Memory）でもよい。ＰＤＥＶ１２は、ＮＶＭｅ（Non-Volatile Memory Express）、ＳＡＳ（Serial Attached SCSI（Small Computer System Interface））及びＳＡＴＡ（Serial ATA（Advanced Technology Attachment））のいずれのインターフェースで接続されてもよい。また、複数個のＰＤＥＶ１２として、異なる種類のＰＤＥＶが混在してもよい。
【００４８】
メモリ３０２は、ＳＲＡＭ（Static RAM(Random Access Memory)）やＤＲＡＭ（Dynamic RAM）などの揮発性の半導体メモリから構成されてよい。メモリ３０２は、各種プログラムや必要なデータを一時的に保持するために利用される。
【００４９】
ＣＰＵ３０１は、メモリ３０２内のプログラム（例えば上述のプログラム５及び６）を実行することでストレージノード１０１全体の動作制御を司る。
【００５０】
図４は、ノード管理テーブル２２１の構成を示す。
【００５１】
ノード管理テーブル２２１は、ストレージノード１０１に関する情報を保持する。例えば、ノード管理テーブル２２１は、ストレージノード１０１毎にエントリを有する。各エントリは、ノードＩＤ４０１、状態４０２、重要度４０３、信頼度４０４、データ重要度４０５、Ｉ／Ｏ重要度４０６及びクラスタ重要度４０７といった情報を格納する。以下、１つのストレージノード１０１を例に取る（図４の説明において「対象ノード１０１」）。
【００５２】
ノードＩＤ４０１は、対象ノード１０１のＩＤを示す。状態４０２は、対象ノード１０１が稼働中（「Active」）か否かを示す。重要度４０３は、信頼度４０４、データ重要度４０５、Ｉ／Ｏ重要度４０６に基づいて重要度判定機能２１１により判定された重要度を示す。信頼度４０４は、後述の処理によって信頼度判定機能２１２により判定された信頼度を示す。データ重要度４０５は、ユーザデータセットの冗長度に基づく重要度であるデータ重要度を示す。Ｉ／Ｏ重要度４０６は、Ｉ／Ｏ制御プログラム６の冗長度に基づき判定された重要度であるＩ／Ｏ重要度を示す。クラスタ重要度４０７は、マスタークラスタ制御プログラム５の冗長度に基づき判定された重要度であるクラスタ重要度を示す。データ重要度、Ｉ／Ｏ重要度及びクラスタ重要度のいずれも、重要度判定機能２１１により判定される。
【００５３】
本実施形態では、重要度４０３、信頼度４０４、データ重要度４０５、Ｉ／Ｏ重要度４０６及びクラスタ重要度４０７のいずれも、「高」と「低」の２段階であるが、３段階以上であってもよい。また、本実施形態では、重要度４０３は、データ重要度４０５、Ｉ／Ｏ重要度４０６及びクラスタ重要度４０７の全てに基づき判定されるが、データ重要度４０５、Ｉ／Ｏ重要度４０６及びクラスタ重要度４０７の一部に基づき判定されてもよい。
【００５４】
図５は、データ配置管理テーブル２２２の構成を示す。
【００５５】
データ配置管理テーブル２２２は、ユーザデータセットの配置に関する情報を保持する。データ配置管理テーブル２２２は、ユーザデータセットの配置の変化に応じてクラスタ制御プログラム５により更新される。データ配置管理テーブル２２２は、例えば、データ配置管理テーブル２２２は、同一のユーザデータセットの（冗長度０以上のユーザデータセットから成る）グループ毎にエントリを有する。各エントリは、グループＩＤ５０１、ノードＩＤ（Master dataset）５０２、及び、ノードＩＤ（Mirror dataset）５０３といった情報を格納する。以下、１つのグループを例に取る（図５の説明において「対象グループ」）。
【００５６】
グループＩＤ５０１は、対象グループのＩＤを示す。ノードＩＤ（Master dataset）５０２は、対象グループのうちマスター（オリジナル）のユーザデータセットが配置されているストレージノード１０１のＩＤを示す。ノードＩＤ（Mirror dataset）５０３は、対象グループのうち１以上のミラー（複製）のユーザデータセットがそれぞれ配置されている１以上のストレージノード１０１のＩＤを示す。
【００５７】
図６は、Ｉ／Ｏ配置管理テーブル２２３の構成を示す。
【００５８】
Ｉ／Ｏ配置管理テーブル２２３は、Ｉ／Ｏ制御プログラム６の配置に関する情報を保持する。Ｉ／Ｏ配置管理テーブル２２３は、Ｉ／Ｏ制御プログラム６の配置や状態（アクティブ又はスタンバイ）の変化に応じてクラスタ制御プログラム５により更新される。例えば、Ｉ／Ｏ配置管理テーブル２２３は、プログラムペア毎にエントリを有する。各エントリは、ペアＩＤ６０１、ノードＩＤ（Active）６０２、及び、ノードＩＤ（Standby）６０３といった情報を格納する。以下、１つのプログラムペアを例に取る（図６の説明において「対象ペア」）。
【００５９】
ペアＩＤ６０１は、対象ペアのＩＤを示す。ノードＩＤ（Active）６０２は、対象ペアのうちのアクティブＩ／Ｏ制御プログラム６Ａが配置されているストレージノード１０１のＩＤを示す。ノードＩＤ（Standby）６０３は、対象ペアのうちのスタンバイＩ／Ｏ制御プログラム６Ｓが配置されているストレージノード１０１のＩＤを示す。
【００６０】
図７は、クラスタ配置管理テーブル２２４の構成を示す。
【００６１】
クラスタ配置管理テーブル２２４は、マスタークラスタ制御プログラム５の配置に関する情報を保持する。クラスタ配置管理テーブル２２４は、マスタークラスタ制御プログラム５の配置や状態（プライマリやセカンダリ）の変化に応じて、クラスタ制御プログラム５により更新される。例えば、クラスタ配置管理テーブル２２４は、プライマリのマスタークラスタ制御プログラム５が配置されているストレージノード１０１のＩＤと、１以上のセカンダリのマスタークラスタ制御プログラム５がそれぞれ配置されている１以上のストレージノード１０１のＩＤとを保持する。
【００６２】
図８は、ノード障害管理テーブル２２５の構成を示す。
【００６３】
ノード障害管理テーブル２２５は、ストレージノード１０１に障害が発生した時刻（障害発生時刻）を示す情報である時刻８０１と、当該障害が発生した場所としてのストレージノード１０１のＩＤを示すノードＩＤ８０２とを保持する。ノード障害管理テーブル２２５は、障害発生が検出さえる都度にクラスタ制御プログラム５により更新される。
【００６４】
図９は、再組込み判定テーブル２２６の構成を示す。
【００６５】
再組込み判定テーブル２２６は、重要度４０３と信頼度４０４（図４参照）との組合せと、再組込みを行うか否かとの関係（ルール）を示す。
【００６６】
本実施形態によれば、マスタークラスタ制御プログラム５が、ストレージクラスタ内のリソース配置（ユーザデータセット、Ｉ／Ｏ制御プログラム６及びマスタークラスタ制御プログラム５の配置と冗長度）を管理する。マスタークラスタ制御プログラム（例えば、プライマリのプログラム）５が、ストレージクラスタの構成変更（例えば、ストレージクラスタにおけるリソース配置の変更）に応じて、重要度４０３の更新の必要性を判定し、必要性があれば重要度４０３を更新する。また、マスタークラスタ制御プログラム５は、ストレージノード１０１の障害（例えば、予期せぬリブート等）の発生を検出し、ノード障害管理テーブル２２５に、障害発生時刻とノードＩＤ（障害が発生したストレージノード１０１のＩＤ）を記録する。マスタークラスタ制御プログラム５は、対象とされたストレージノード１０１についてノード障害管理テーブル２２５を参照し、当該ストレージノード１０１の障害発生傾向から信頼度を判定し、判定した信頼度４０４をノード管理テーブル２２１に記録する。ノード管理テーブル２２１に記録された重要度４０３と信頼度４０４をストレージノード１０１が自律的に管理することにより、ストレージノード１０１の再組込みの自律制御が可能となっている。
【００６７】
上述したように、本実施形態では、対象とされたストレージノード１０１について、当該ストレージノード１０１の重要度と信頼度の両方の観点から、当該ストレージノード１０１の再組込みを行うか否かが判定される。重要度は、当該ストレージノード１０１がストレージクラスタから離脱したと仮定した場合の可用性の高さに依存し、当該ストレージノード１０１を再組込み対象とするか否かに関わる。信頼度は、当該ストレージノード１０１の稼働の傾向（例えば障害発生の傾向）に依存し、再組込みを行うか否かに関わる。重要度が高く（例えば所定の重要度以上であり）、信頼度も高い場合に（例えば所定の信頼度以上の場合に）、当該ストレージノード１０１の再組込みがされる。言い換えれば、重要度が低ければ、当該ストレージノード１０１は、再組込みの対象とされず、信頼度が低ければ、当該ストレージノード１０１が再組込みの対象とされても、当該ストレージノード１０１の再組込みはされない。これにより、ストレージノードの再組込みが自動化されてもストレージクラスタの安定性が低下してしまうことを避けることができる。
【００６８】
図１０〜図１５を参照して、重要度を説明する。具体的には、重要度の基になるデータ重要度、Ｉ／Ｏ重要度及びクラスタ重要度を説明する。データ重要度、Ｉ／Ｏ重要度及びクラスタ重要度のうちの特にＩ／Ｏ重要度及びクラスタ重要度は、本実施形態に係る記憶システム１００の特徴的な構成に従う観点に沿った重要度である。具体的には、複数のストレージノード１０１に基づき実現されるＳＤＳ１８０（図１参照）には、コントロールプレーンとデータプレーンが共存し、コントロールプレーンは、分散配置されたクラスタ制御プログラム５に相当し、データプレーンは、分散配置されたＩ／Ｏ制御プログラム６に相当する。
【００６９】
図１０は、データ重要度の判定の一例を説明する模式図である。図１１は、図１０に記載のデータ配置を示すデータ配置管理テーブル２２２を示す。
【００７０】
対象ストレージノード１０１（例えば、障害が発生したストレージノード１０１）のデータ重要度は、対象ストレージノード１０１に格納されている少なくとも１つのユーザデータセット４についての当該ユーザデータセット４の冗長度に依存する。
【００７１】
重要度判定機能２１１は、対象ストレージノード１０１（例えば、障害が発生したストレージノード１０１）について、対象ストレージノード１０１内のユーザデータセット毎に、ユーザデータセット４の冗長度を、データ配置管理テーブル２２２を基に特定する。重要度判定機能２１１は、冗長度が所定値（例えば０）以下のユーザセットの数が所定数（例えば１）以上か否かの判定であるデータ重要度判定を行う。データ重要度判定の結果が真の場合、重要度判定機能２１１は、対象ストレージノード１０１のデータ重要度を「高」とする。データ重要度判定の結果が偽の場合、重要度判定機能２１１は、対象ストレージノード１０１のデータ重要度を「低」とする。データ重要度が３段階以上の場合、データ重要度としての値は、冗長度毎のユーザデータセット４の数等に応じて決定されてよい。
【００７２】
データ重要度が「高」であると、重要度が「高」となる可能性が高まる（データ重要度「高」＝重要度「高」とされてもよい）。これにより、冗長度が低いユーザデータセット４を持つストレージノード１０１を再組込みの対象とする可能性を高めることができる。
【００７３】
図１０及び図１１の例によれば、下記の通りである。
・ストレージノード１０１−Ｓ０又は１０１−Ｓ３が対象ストレージノードの場合、データ重要度は「高」である。なぜなら、ストレージノード１０１−Ｓ０内のユーザデータセット４−Ｇ０、及び、ストレージノード１０１−Ｓ３内のユーザデータセット４−Ｇ２は、いずれも、冗長度が、所定値０のためである（データ配置管理テーブル２２２において、グループＧ０及びＧ２のいずれについても、ノードＩＤ５０２及び５０３の一方が無効な値（又はブランク）だからである）。すなわち、ストレージノード１０１−Ｓ０又は１０１−Ｓ３がストレージクラスタから離脱すると、ホストノード５１から、ユーザデータセット４−Ｇ０又は４−Ｇ２にアクセスできなくなるためである。
・ストレージノード１０１−Ｓ１又は１０１−Ｓ２が対象ストレージノードの場合、データ重要度は「低」である。なぜなら、ストレージノード１０１−Ｓ１内のユーザデータセット４−Ｇ１及び４−Ｇ３、及び、ストレージノード１０１−Ｓ２内のユーザデータセット４−Ｇ０及び４−Ｇ４のいずれも、冗長度が、所定値０を超えているためである。
【００７４】
図１２は、Ｉ／Ｏ重要度の判定の一例を説明する模式図である。図１３は、図１２に記載のプログラム配置を示すＩ／Ｏ配置管理テーブル２２３を示す。
【００７５】
対象ストレージノード１０１（例えば、障害が発生したストレージノード１０１）のＩ／Ｏ重要度は、対象ストレージノード１０１に配置されている少なくとも１個のＩ／Ｏ制御プログラム６についてのプログラムペアにおけるＩ／Ｏ制御プログラム６の冗長度に依存する。
【００７６】
重要度判定機能２１１は、対象ストレージノード１０１について、対象ストレージノード１０１内のＩ／Ｏ制御プログラム６毎に、Ｉ／Ｏ制御プログラム６の冗長度を、Ｉ／Ｏ配置管理テーブル２２３を基に特定する。重要度判定機能２１１は、冗長度が所定値（例えば０）以下のＩ／Ｏ制御プログラム６の数が所定数（例えば１）以上であるか否かの判定であるＩ／Ｏ重要度判定を行う。Ｉ／Ｏ重要度判定の結果が真の場合、重要度判定機能２１１は、対象ストレージノード１０１のＩ／Ｏ重要度を「高」とする。Ｉ／Ｏ重要度判定の結果が偽の場合、重要度判定機能２１１は、対象ストレージノード１０１のＩ／Ｏ重要度を「低」とする。Ｉ／Ｏ重要度が３段階以上の場合、Ｉ／Ｏ重要度としての値は、冗長度毎のＩ／Ｏ制御プログラム６の数等に応じて決定されてよい。
【００７７】
Ｉ／Ｏ重要度が「高」であると、重要度が「高」となる可能性が高まる（Ｉ／Ｏ重要度「高」＝重要度「高」とされてもよい）。これにより、冗長度が低いＩ／Ｏ制御プログラム６を持つストレージノード１０１を再組込みの対象とする可能性を高めることができる。
【００７８】
図１２及び図１３の例によれば、下記の通りである。
・ストレージノード１０１−Ｓ０又は１０１−Ｓ３が対象ストレージノードの場合、Ｉ／Ｏ重要度は「高」である。なぜなら、ストレージノード１０１−Ｓ０内のアクティブＩ／Ｏ制御プログラム６Ａ−Ｐ３が停止しフェールオーバーが行われストレージノード１０１−Ｓ３内のスタンバイのＩ／Ｏ制御プログラム６Ｓ−Ｐ３がアクティブのＩ／Ｏ制御プログラム６Ａ−Ｐ３に切り替わり、結果として、プログラムペアＰ３について、Ｉ／Ｏ制御プログラム６の冗長度が０になったからである（Ｉ／Ｏ配置管理テーブル２２３において、プログラムペアＰ２について、ノードＩＤ（Standby）６０３が無効な値（又はブランク）だからである）。
・ストレージノード１０１−Ｓ１又は１０１−Ｓ２が対象ストレージノードの場合、Ｉ／Ｏ重要度は「低」である。なぜなら、ストレージノード１０１−Ｓ１及び１０１−Ｓ２のいずれも、冗長度が０のＩ／Ｏ制御プログラム６が存在しないからである。
【００７９】
図１４は、クラスタ重要度の判定の一例を説明する模式図である。図１５は、図１４に記載のプログラム配置を示すクラスタ配置管理テーブルを示す。
【００８０】
対象ストレージノード１０１（例えば、障害が発生したストレージノード１０１）のクラスタ重要度は、ストレージクラスタの残存マスターノード数（残存ノード数の一例）に依存する。残存マスターノード数は、正常のマスタークラスタ制御プログラム５（停止していないマスタークラスタ制御プログラム５）を有するマスターストレージノード１０１の数である。従って、Ｑ個のマスタークラスタ制御プログラム５がそれぞれ配置されているＱ台のマスターストレージノード１０１に対象ストレージノード１０１が含まれていなければ、残存マスターノード数＝Ｑである。一方、Ｑ台のマスターストレージノード１０１に対象ストレージノード１０１が含まれていれば、残存マスターノード数＝Ｑ−（対象ストレージノードの数）である。
【００８１】
重要度判定機能２１１は、クラスタ配置管理テーブル２２４を参照し、ストレージクラスタの残存マスターノード数（例えば、クラスタ配置管理テーブル２２４における有効なノードＩＤの数）をカウントする。重要度判定機能２１１は、残存マスターノード数が残存マスターノード数の閾値以下か否かの判定であるクラスタ重要度判定を行う。クラスタ重要度判定の結果が真の場合、重要度判定機能２１１は、対象ストレージノード１０１のクラスタ重要度を「高」とする。クラスタ重要度判定の結果が偽の場合、重要度判定機能２１１は、対象ストレージノード１０１のクラスタ重要度を「低」とする。クラスタ重要度が３段階以上の場合、クラスタ重要度としての値は、残存マスターノード数とそれの閾値との差に応じて決定されてよい。
【００８２】
クラスタ重要度が「高」であると、重要度が「高」となる可能性が高まる（クラスタ重要度「高」＝重要度「高」とされてもよい）。これにより、残存マスターノード数が少ない場合、マスタークラスタ制御プログラム５を持つストレージノード１０１を再組込みの対象とする可能性を高めることができる。
【００８３】
ここで、残存マスターノード数の閾値は、Ｑの過半数に、同時に再組込みの対象となり得るストレージノード１０１の数を加えた値である。
【００８４】
具体的には、例えば、本実施形態では、残存マスターノード数の閾値＝Ｃｅｉｌ（（Ｑ＋１）／２）＋１、である。
【００８５】
「Ｃｅｉｌ（（Ｑ＋１）／２）」は、Ｑの過半数を意味する（Ｃｅｉｌは小数点切上げを意味する）。Ｑの過半数が必要とされる理由は、マスターストレージノード１０１間の通信経路障害等によりマスタークラスタ制御プログラム５が分断されてもスプリットブレインシンドロームが生じることを防ぐためである。
【００８６】
「＋１」は、同時に再組込みの対象となり得る（言い換えれば、同時にストレージクラスタから離脱し得る）ストレージノード１０１の数の一例である。
【００８７】
同時に再組込みの対象となり得るストレージノード１０１の数が１の場合において、残存マスターノード数が、Ｃｅｉｌ（（Ｑ＋１）／２）＋１に一致すると、予期せぬリブートといった障害が別のマスターストレージノード１０１で発生すると、マスターストレージノード１０１の数がＣｅｉｌ（（Ｑ＋１）／２）を下回ることになる。そこで、本実施形態では、残存マスターノード数がそれの閾値以下の場合、クラスタ重要度は「高」とされる。
【００８８】
図１４及び１５の例によれば、マスタークラスタ制御プログラム群１４００のうち、正常のマスタークラスタ制御プログラム５−Ｃ０〜５−Ｃ３は、４台のストレージノード１０１−Ｓ０〜１０１−Ｓ３に存在するため、残存マスターノード数＝４である。残存マスターノード数の閾値は、Ｃｅｉｌ（（５＋１）／２）＋１＝４である。結果として、残存マスターノード数はそれの閾値以下であるため、クラスタ重要度＝「高」とされる。
【００８９】
図１６は、重要度更新処理の流れを示す。重要度更新処理は、重要度判定機能２１１により行われる。
【００９０】
重要度判定機能２１１は、ストレージクラスタのリソース配置に変化があった場合（ステップ１６００：Ｙｅｓ）、ストレージノード１０１の数分、ループ（Ａ）（ステップ１６０１〜１６１５）を行う。以下、１つのストレージノード１０１を例に取る（図１６の説明において「対象ノード１０１」）。
【００９１】
重要度判定機能２１１は、対象ノード１０１におけるユーザデータセット４の冗長度Ｘを、データ配置管理テーブル２２２を参照することにより取得する（ステップ１６０１）。重要度判定機能２１１は、取得した少なくとも１つの冗長度Ｘがそれの閾値ＴＨＸ以下か否かを判定する（ステップ１６０２）。ステップ１６０２の判定結果が真の場合（ステップ１６０２：Ｙｅｓ）、重要度判定機能２１１は、対象ノード１０１のデータ重要度４０５「高」をノード管理テーブル２２１に記録する（ステップ１６０３）。ステップ１６０２の判定結果が偽の場合（ステップ１６０２：Ｎｏ）、重要度判定機能２１１は、対象ノード１０１のデータ重要度４０５「低」をノード管理テーブル２２１に記録する（ステップ１６０４）。
【００９２】
重要度判定機能２１１は、対象ノード１０１におけるＩ／Ｏ制御プログラム６の冗長度Ｙを、Ｉ／Ｏ配置管理テーブル２２３を参照することにより取得する（ステップ１６０５）。重要度判定機能２１１は、取得した少なくとも１つの冗長度Ｙがそれの閾値ＴＨＹ以下か否かを判定する（ステップ１６０６）。ステップ１６０６の判定結果が真の場合（ステップ１６０６：Ｙｅｓ）、重要度判定機能２１１は、対象ノード１０１のＩ／Ｏ重要度４０６「高」をノード管理テーブル２２１に記録する（ステップ１６０７）。ステップ１６０６の判定結果が偽の場合（ステップ１６０６：Ｎｏ）、重要度判定機能２１１は、対象ノード１０１のＩ／Ｏ重要度４０６「低」をノード管理テーブル２２１に記録する（ステップ１６０８）。
【００９３】
重要度判定機能２１１は、クラスタ配置管理テーブル２２４を参照することにより、残存マスターノード数Ｚを取得する（ステップ１６０９）。重要度判定機能２１１は、取得した残存マスターノード数Ｚがそれの閾値ＴＨＺ以下か否かを判定する（ステップ１６１０）。ステップ１６１０の判定結果が真の場合（ステップ１６１０：Ｙｅｓ）、重要度判定機能２１１は、対象ノード１０１のクラスタ重要度４０７「高」をノード管理テーブル２２１に記録する（ステップ１６１１）。ステップ１６１０の判定結果が偽の場合（ステップ１６１０：Ｎｏ）、重要度判定機能２１１は、対象ノード１０１のクラスタ重要度４０７「低」をノード管理テーブル２２１に記録する（ステップ１６１２）。
【００９４】
重要度判定機能２１１は、ノード管理テーブル２２１を参照し、対象ノード１０１に対応したデータ重要度４０５、Ｉ／Ｏ重要度４０６及びクラスタ重要度４０７のうちのｊ個以上（ｊは自然数、例えばｊ＝１）が「高」か否かを判定する（ステップ１６１３）。ステップ１６１３の判定結果が真の場合（ステップ１６１３：Ｙｅｓ）、重要度判定機能２１１は、対象ノード１０１の重要度４０３「高」をノード管理テーブル２２１に記録する（ステップ１６１４）。ステップ１６１３の判定結果が偽の場合（ステップ１６１３：Ｎｏ）、重要度判定機能２１１は、対象ノード１０１の重要度４０３「低」をノード管理テーブル２２１に記録する（ステップ１６１５）。
【００９５】
なお、ループ（Ａ）では、第１の処理（ステップ１６０１〜１６０４）、第２の処理（ステップ１６０５〜１６０８）、及び、第３の処理（ステップ１６０９〜１６１２）のうち、配置が変化したリソースの種類に応じた処理が選択され、選択された処理が行われた後に、ステップ１６１３が行われてもよい。
【００９６】
図１７は、構成制御処理の流れを示す。構成制御処理は、信頼度判定機能２１２及び再組込み判定機能２１３により行われる。
【００９７】
いずれかのストレージノード１０１での障害発生が検出された場合（ステップ１７０１：Ｙｅｓ）、ステップ１７０２以降が行われる。以下、図１７の説明において、障害が発生したノード１０１を「障害ノード１０１」と言う。障害ノード１０１が、対象ストレージノードの一例である。
【００９８】
信頼度判定機能２１２が、障害が発生した時刻と、障害が発生したノードのノードＩＤとを、ノード障害管理テーブル２２５に記録する（ステップ１７０２）。
【００９９】
信頼度判定機能２１２が、ノード障害管理テーブル２２５を参照し、障害ノード１０１の最近の障害長期傾向（長期間における障害発生の傾向）を取得する（ステップ１７０３）。信頼度判定機能２１２が、ノード障害管理テーブル２２５を参照し、障害ノード１０１の最近の障害短期傾向（短期間における障害発生の傾向）を取得する（ステップ１７０４）。「最近の障害長期傾向」は、現時点から過去にさかのぼった比較的長い期間（例えば１年間）における障害発生の傾向である。「最近の障害短期傾向」は、現時点から過去にさかのぼった比較的短い期間（例えば３か月）における障害発生の傾向である。従って、比較的長い期間の一部が比較的短い期間でよい。
【０１００】
信頼度判定機能２１２が、最近の障害長期傾向が第１条件に合致することと最近の障害短期傾向が第２条件に合致することとの両方が満たされているか否かを判定する（ステップ１７０５）。「最近の障害長期傾向が第１条件に合致する」とは、比較的長い期間における障害発生回数が第１の回数閾値未満であることであってよい。「最近の障害短期傾向が第２条件に合致する」とは、比較的短い期間における障害発生回数が第２の回数閾値未満であることであってよい。障害発生の傾向に関し、比較的長い期間と比較的短い期間の両方について取得されることは、信頼度の精度向上に有用である。すなわち、半導体メモリのセル障害のように１度生じた後は比較的長い期間において断続的に発生するような障害があるが、このような種類の障害を、「最近の障害長期傾向が第１条件に合致する」によりカバーできる。また、ＨＤＤ障害のように１度生じると比較的短い期間において頻発する障害があるが、このような種類の障害を、「最近の障害短期傾向が第２条件に合致する」によりカバーできる。なお、障害長期傾向と障害短期傾向が、障害発生の傾向の一例である。障害発生の傾向に応じて信頼度が算出されるため、信頼度の精度の高さに期待でき、以って、重要度と信頼度の両方を基に再組込みを行うか否かの判定の精度の高さに期待できる。
【０１０１】
ステップ１７０５の判定の結果が真の場合（ステップ１７０５：Ｙｅｓ）、信頼度判定機能２１２は、障害ノード１０１の信頼度４０４「高」をノード管理テーブル２２１に記録する（ステップ１７０６）。ステップ１７０５の判定の結果が偽の場合（ステップ１７０５：Ｎｏ）、信頼度判定機能２１２は、障害ノード１０１の信頼度４０４「低」をノード管理テーブル２２１に記録する（ステップ１７０７）。
【０１０２】
再組込み判定機能２１３が、ノード管理テーブル２２１と、再組込み判定テーブル２２６とを参照する（ステップ１７０８）。
【０１０３】
再組込み判定機能２１３が、障害ノード１０１の重要度４０３と信頼度４０４の両方が「高」か否か（すなわち、再組込みを行う条件を障害ノード１０１の重要度４０３と信頼度４０４の両方が満たしているか否か）を判定する（ステップ１７０９）。
【０１０４】
ステップ１７０９の判定の結果が真の場合（ステップ１７０９：Ｙｅｓ）、再組込み判定機能２１３は、障害ノード１０１の再組込みを行う（ステップ１７１０）。ステップ１７０９の判定の結果が偽の場合（ステップ１７０９：Ｎｏ）、再組込み判定機能２１３は、障害ノード１０１を保守状態とする（例えば、保守のために障害ノード１０１をストレージクラスタから離脱（ここでは閉塞）させる）（ステップ１７１１）。
【０１０５】
図１６の重要度更新処理や図１７の構成制御処理は、プライマリのマスタークラスタ制御プログラム５によって行われてよい。プライマリのマスタークラスタ制御プログラム５が停止した場合には、セカンダリのマスタークラスタ制御プログラム５間のやり取りの結果に従いいずれかのセカンダリのマスタークラスタ制御プログラム５がプライマリになり、当該プライマリになったマスタークラスタ制御プログラム５が、図１６の重要度更新処理や図１７の構成制御処理を行ってよい。
【０１０６】
また、障害ノード１０１の障害発生の傾向は、障害ノード１０１の稼働の傾向の一例である。すなわち、障害ノード１０１の信頼度は、障害発生の傾向に代えて又は加えて、障害ノード１０１の他の稼働傾向（例えば、障害ノード１０１の通信帯域、メモリ使用量、及び、ＣＰＵ負荷（例えば、使用率、使用ＣＰＵコア数）の傾向）を基に判定されてもよい。
【０１０７】
図１８は、構成制御処理のシーケンス図である。なお、図１８において、「Ｐｒｉ．」は、プライマリの略であり、「Ａｃｔ．」は、アクティブの略であり、「Ｓｅｃ．」は、セカンダリの略であり、「Ｓｔａ．」は、スタンバイの略である。図１８の説明では、プライアンリのマスタークラスタ制御プログラムを、「プライマリプログラム」と言い、セカンダリのマスタークラスタ制御プログラムを、「セカンダリプログラム」と言う。セカンダリプログラムとして、プログラム５−Ｃ１を例に取る。
【０１０８】
ストレージクラスタにおけるクラスタ制御プログラム５間で、ノード定期監視が行われる。例えば、プライマリプログラム５−Ｃ０が、当該プログラム５−Ｃ０を有するストレージノード１０１−Ｓ０内のリソース（例えば、Ｉ／Ｏ制御プログラム６Ａ−Ｐ０やＯＳ（オペレーティングシステム）３−Ｓ０）の障害監視（障害発生有無の監視）を行う（ステップ１８０１）。なお、ＯＳの参照符号における「Ｓｎ」は、当該ＯＳを有するストレージノードのＩＤである（ｎ＝０、１、２、…といった整数）。また、プライマリプログラム５−Ｃ０が、セカンダリプログラム５−Ｃ１を有するストレージノード１０１−Ｓ１に関して、障害監視を行う（ステップ１８０２）。例えば、プライマリプログラム５−Ｃ０が、セカンダリプログラム５−Ｃ１に、障害監視を依頼する。その依頼に応答して、セカンダリプログラム５−Ｃ１が、ストレージノード１０１−Ｓ１内のリソース（例えば、Ｉ／Ｏ制御プログラム６Ｓ−Ｐ０やＯＳ３−Ｓ１）の障害監視を行い、結果をプライマリプログラム５−Ｃ０に応答する。
【０１０９】
ストレージノード１０１−Ｓ１において、ＯＳ３−Ｓ１のエラーが生じ（ステップ１８０３）、結果として、予期せぬリブートという障害が発生したとする（ステップ１８０４）。この場合、プライマリプログラム５−Ｃ０が、ストレージノード１０１−Ｓ１の障害監視（ステップ１８０５）において、当該障害の発生を検出し、障害の発生時刻と、障害が発生したノード１０１のＩＤ「Ｓ１」とを、ノード障害管理テーブル２２５に記録する（ステップ１８０６）。ストレージノード１０１−Ｓ１を、以下、図１８の説明において、「障害ノード１０１−Ｓ１」と言う。
【０１１０】
障害ノード１０１−Ｓ１において、ステップ１８０４の後、ＯＳ３−Ｓ１によりセカンダリプログラム５−Ｃ１が起動する（ステップ１８０７）。セカンダリプログラム５−Ｃ１は、診断処理を行う（ステップ１８０８）。診断パスの結果が得られた場合（ステップ１８０９）、セカンダリプログラム５−Ｃ１は、再組込み判定待ちとなる（ステップ１８１０）。
【０１１１】
プライマリプログラム５−Ｃ０が、構成制御処理、具体的には、信頼度計算及び再組込み判定を行う。
【０１１２】
信頼度計算では、プライマリプログラム５−Ｃ０が、ノード障害管理テーブル２２５−Ｓ０を参照して、障害ノード１０１−Ｓ１の障害長期傾向を取得する（ステップ１８１１）。また、プライマリプログラム５−Ｃ０が、ノード障害管理テーブル２２５−Ｓ０を参照して、障害ノード１０１−Ｓ１の障害短期傾向を取得する（ステップ１８１２）。プライマリプログラム５−Ｃ０が、取得した障害長期傾向及び障害短期傾向を基に、障害ノード１０１−Ｓ１の信頼度を計算する（ステップ１８１３）。プライマリプログラム５−Ｃ０が、算出された信頼度をノード管理テーブル２２１−Ｓ０に記録する（ステップ１８１４）。
【０１１３】
再組込み判定では、プライマリプログラム５−Ｃ０が、ノード管理テーブル２２１−Ｓ０及び再組込み判定テーブル２２６−Ｓ０を参照し（ステップ１８２１）、障害ノード１０１−Ｓ１の重要度４０３及び信頼度４０４を基に、障害ノード１０１−Ｓ１の再組込みを行うか否かを判定する。ここでは、プライマリプログラム５−Ｃ０が、障害ノード１０１−Ｓ１を再組込みすると判定したとする（ステップ１８２２）。この場合、再組込み処理（ステップ１８３１〜１８３４）が行われる。
【０１１４】
すなわち、プライマリプログラム５−Ｃ０が、障害ノード１０１−Ｓ１の障害監視（ステップ１８３１）において、障害ノード１０１−Ｓ１におけるセカンダリプログラム５−Ｃ１からの応答から、障害ノード１０１−Ｓ１が再組込み判定待ちであることを特定する。この場合、プライマリプログラム５−Ｃ０が、再組込み判定結果（障害ノード１０１−Ｓ１の再組込みをするとの判定結果）をセカンダリプログラム５−Ｃ１に通知する（ステップ１８３２）。この通知に応答して、セカンダリプログラム５−Ｃ１は、起動処理を行い（ステップ１８３３）、且つ、スタンバイＩ／Ｏ制御プログラム６Ｓ−Ｐ０を起動する（ステップ１８３４）。そして、セカンダリプログラム５−Ｃ１は、起動完了をプライマリプログラム５−Ｃ０に応答する（ステップ１８３５）。
【０１１５】
以上、本発明の一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【符号の説明】
【０１１６】
１０１…ストレージノード
【図１】
2019192032.tif 000003
【図２】
2019192032.tif 000004
【図３】
2019192032.tif 000005
【図４】
2019192032.tif 000006
【図５】
2019192032.tif 000007
【図６】
2019192032.tif 000008
【図７】
2019192032.tif 000009
【図８】
2019192032.tif 000010
【図９】
2019192032.tif 000011
【図１０】
2019192032.tif 000012
【図１１】
2019192032.tif 000013
【図１２】
2019192032.tif 000014
【図１３】
2019192032.tif 000015
【図１４】
2019192032.tif 000016
【図１５】
2019192032.tif 000017
【図１６】
2019192032.tif 000018
【図１７】
2019192032.tif 000019
【図１８】
2019192032.tif 000020