(57)【要約】【課題】障害が発生した際に、複数のコントローラのうち閉塞すべきコントローラの判定精度を向上させる一方、閉塞すべきコントローラの判定が外れた場合でも再度コントローラを安全に交換可能とし、システム全体が停止するリスクを最小限に抑えること。【解決手段】複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、複数のコントローラは、コントローラ間通信パスの一部を用いてコントローラ間通信を縮退して実施する一方、閉塞判定の結果、一方のコントローラを閉鎖すべきであるものと判定されたものの閉塞判定が誤っていた場合、代わりに新たなコントローラが装着されたことを契機として、最後に同期された最も直前のシステム制御情報を用いて、再度装着された一方のコントローラと新たなコントローラとが同期される。【選択図】図２
2019079263.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージ装置を各々制御する複数のコントローラを備え、前記複数のコントローラがコントローラ間通信パスを介して接続されている冗長系ストレージシステムにおいて、
前記複数のコントローラは、それぞれ、
前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で発生した障害に関する障害情報を収集する障害情報収集部と、
前記障害情報収集部によって収集される障害情報及び前記複数のコントローラの制御に関するシステム制御情報を前記複数のコントローラ間で同期して共有させる情報同期部と、
前記情報同期部によって最後に同期された障害情報に基づいて前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で障害が発生していることが検出された場合、前記複数のコントローラのうちのどのコントローラを閉塞すべきかについて閉塞判定を実施する閉塞判定部と、
前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記コントローラ間通信パスの一部を用いて前記複数のコントローラ間における通信を縮退して実施する縮退制御部と、
前記閉塞判定の結果、前記一方のコントローラを閉鎖すべきであるものと判定されたものの前記閉塞判定が誤っていた場合、代わりに新たなコントローラが装着されたことを契機として、前記情報同期部に、前記最後に同期された最も直前のシステム制御情報を用いて、再度装着された前記一方のコントローラと前記新たなコントローラとを同期させる再同期指示部と、
を備えることを特徴とする冗長系ストレージシステム。
【請求項２】
前記複数のコントローラは、それぞれ、
前記障害情報収集部によって収集される自らの障害情報及び相手の障害情報と、及び、前記システム制御情報とを格納可能なメモリを備え、
前記縮退制御部は、
前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記前記複数のレーンのうち通信可能な少なくとも一部のレーンを用いて前記複数のコントローラ間における通信を縮退して実施可能とし、前記情報同期部による前記自らの障害情報及び前記相手の障害情報の同期制御を許容する
ことを特徴とする請求項１に記載の冗長系ストレージシステム。
【請求項３】
前記コントローラ間通信パスは、複数のレーンにより構成されており、
前記縮退制御部は、
前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記複数のレーンのうち通信可能な少なくとも一部のレーンを用いて前記複数のコントローラ間における通信を縮退して実施する
を備えることを特徴とする請求項１に記載の冗長系ストレージシステム。
【請求項４】
前記複数のコントローラには、
前記障害が発生しうる部位として、前記複数のコントローラ間における通信を実施するドライバー回路が設けられていることを特徴とする請求項１に記載の冗長系ストレージシステム。
【請求項５】
前記再同期指示部は、
前記縮退制御部による縮退制御中に前記通信可能な少なくとも一部のレーンを用いて前記最後に同期された最も直前のシステム制御情報を用いて、前記情報同期部に、再度装着された前記一方のコントローラと前記新たなコントローラとの間で同期させる
ことを特徴とする請求項４に記載の冗長系ストレージシステム。
【請求項６】
複数のストレージ装置を各々制御する複数のコントローラを備え、前記複数のコントローラがコントローラ間通信パスを介して接続されている冗長系ストレージシステムにおける障害復旧方法において、
前記複数のコントローラが、前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で発生した障害に関する障害情報を収集する障害情報収集ステップと、
前記複数のコントローラが、前記障害情報収集ステップにおいて収集される障害情報及び前記複数のコントローラの制御に関するシステム制御情報を前記複数のコントローラ間で同期して共有する情報同期ステップと、
前記情報同期ステップにおいて最後に同期された障害情報に基づいて前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で障害が発生していることが検出された場合、前記複数のコントローラのうちの一方のコントローラが、前記複数のコントローラのうちのどのコントローラを閉塞すべきかについて閉塞判定を実施する閉塞判定ステップと、
前記複数のコントローラが、前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記コントローラ間通信パスの一部を用いて前記複数のコントローラ間における通信を縮退して実施する縮退制御ステップと、
前記閉塞判定の結果、前記一方のコントローラを閉鎖すべきであるものと判定されたものの前記閉塞判定が誤っていた場合、代わりに新たなコントローラが装着されたことを契機として、前記複数のコントローラのうちの一方のコントローラが、前記情報同期ステップにおいて、前記最後に同期された最も直前のシステム制御情報を用いて、再度装着された前記一方のコントローラと前記新たなコントローラとを同期させる再同期指示ステップと、
を有することを特徴とする冗長系ストレージシステムにおける障害復旧方法。
【請求項７】
前記複数のコントローラは、それぞれ、
前記障害情報収集ステップにおいて収集される自らの障害情報及び相手の障害情報と、及び、前記システム制御情報とを格納可能なメモリを備え、
前記縮退制御ステップでは、
前記複数のコントローラは、前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記前記複数のレーンのうち通信可能な少なくとも一部のレーンを用いて前記複数のコントローラ間における通信を縮退して実施可能とし、前記情報同期ステップにおける前記自らの障害情報及び前記相手の障害情報の同期制御が許容される
ことを特徴とする請求項６に記載の冗長系ストレージシステムにおける障害復旧方法。
【請求項８】
前記コントローラ間通信パスは、複数のレーンにより構成されており、
前記縮退制御ステップでは、
前記複数のコントローラが、前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記複数のレーンのうち通信可能な少なくとも一部のレーンを用いて前記複数のコントローラ間における通信を縮退して実施する
を備えることを特徴とする請求項６に記載の冗長系ストレージシステムにおける障害復旧方法。
【請求項９】
前記複数のコントローラには、
前記障害が発生しうる部位として、前記複数のコントローラ間における通信を実施するドライバー回路が設けられていることを特徴とする請求項６に記載の冗長系ストレージシステムにおける障害復旧方法。
【請求項１０】
前記再同期指示ステップでは、
前記複数のコントローラのうちの一方のコントローラが、前記縮退制御ステップにおける縮退制御中に前記通信可能な少なくとも一部のレーンを用いて前記最後に同期された最も直前のシステム制御情報を用いて、再度装着された前記一方のコントローラと前記新たなコントローラとの間で同期する
ことを特徴とする請求項９に記載の冗長系ストレージシステムにおける障害復旧方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、冗長系ストレージシステム及び冗長系ストレージシステムにおける障害復旧方法に関し、特に、複数のコントローラ同士がコントローラ間通信パスを介して接続された冗長系ストレージシステムに適用して好適なものである。
【背景技術】
【０００２】
一般的に冗長系ストレージシステムは、いずれかのコントローラに障害が発生した場合、どちらのコントローラの障害が原因で全体に障害が生じているかについて判定できない状態に陥ることがある（以下「障害モード」という）。このような障害モードでは、決め打ちでどちらかのコントローラを閉塞せざるを得ない。その際、仮に、正常な一方のコントローラを誤って閉塞して取り外してしまった後に当該一方のコントローラを再度装着しても、他方のコントローラにおいてログの更新が進んでしまうため、両コントローラ間において同期ができずシステムが回復できない。このため、従来の冗長系ストレージシステムでは、最終的に、オフライン状態で、障害が発生している他方のコントローラを交換せざる得ない（以下「オフライン交換」という）ことがある（例えば特許文献１参照）。
【０００３】
また、冗長系ストレージシステムでは、複数のコントローラ間のコントローラ間通信パスが長くなるに連れて伝送路品質の確保のために、ローエンドモデルで採用されるドライバー回路が設けられることがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−８４１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の冗長系ストレーシステムでは、そのようなドライバー回路自体の故障がシステム全体の故障率（ＦＩＴ率）を引き上げてしまうおそれがある。特に、高速伝送路のプロトコルを実装したデバイスを採用したドライバー回路は、論理回路の設計が必要であるとともに回路構成が複雑になりがちであるため不良発生率が高く、複数のコントローラ間における障害発生の一因となっている。このようなことから、上述したオフライン交換が必要となってしまい、静手無全体が停止するおそれがある。
【０００６】
本発明は以上の点を考慮してなされたもので、障害が発生した際に、複数のコントローラのうち閉塞すべきコントローラの判定精度を向上させる一方、閉塞すべきコントローラの判定が外れた場合でも再度コントローラを安全に交換可能とし、システム全体が停止するリスクを最小限に抑えた冗長系ストレージシステム及び冗長系ストレージシステムにおける障害復旧方法を提案しようとするものである。
【課題を解決するための手段】
【０００７】
かかる課題を解決するため、本発明においては、複数のストレージ装置を各々制御する複数のコントローラを備え、前記複数のコントローラがコントローラ間通信パスを介して接続されている冗長系ストレージシステムにおいて、前記複数のコントローラは、それぞれ、前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で発生した障害に関する障害情報を収集する障害情報収集部と、前記障害情報収集部によって収集される障害情報及び前記複数のコントローラの制御に関するシステム制御情報を前記複数のコントローラ間で同期して共有させる情報同期部と、前記情報同期部によって最後に同期された障害情報に基づいて前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で障害が発生していることが検出された場合、前記複数のコントローラのうちのどのコントローラを閉塞すべきかについて閉塞判定を実施する閉塞判定部と、前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記コントローラ間通信パスの一部を用いて前記複数のコントローラ間における通信を縮退して実施する縮退制御部と、前記閉塞判定の結果、前記一方のコントローラを閉鎖すべきであるものと判定されたものの前記閉塞判定が誤っていた場合、代わりに新たなコントローラが装着されたことを契機として、前記情報同期部に、前記最後に同期された最も直前のシステム制御情報を用いて、再度装着された前記一方のコントローラと前記新たなコントローラとを同期させる再同期指示部と、を備えることを特徴とする。
【０００８】
また、本発明においては、複数のストレージ装置を各々制御する複数のコントローラを備え、前記複数のコントローラがコントローラ間通信パスを介して接続されている冗長系ストレージシステムにおける障害復旧方法において、前記複数のコントローラが、前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で発生した障害に関する障害情報を収集する障害情報収集ステップと、前記複数のコントローラが、前記障害情報収集ステップにおいて収集される障害情報及び前記複数のコントローラの制御に関するシステム制御情報を前記複数のコントローラ間で同期して共有する情報同期ステップと、前記情報同期ステップにおいて最後に同期された障害情報に基づいて前記複数のコントローラまたは前記複数のコントローラ間のいずれかの部位で障害が発生していることが検出された場合、前記複数のコントローラのうちの一方のコントローラが、前記複数のコントローラのうちのどのコントローラを閉塞すべきかについて閉塞判定を実施する閉塞判定ステップと、前記複数のコントローラが、前記複数のコントローラのうちの一方のコントローラを閉塞すべきと判定された際にも引き続き、前記コントローラ間通信パスの一部を用いて前記複数のコントローラ間における通信を縮退して実施する縮退制御ステップと、前記閉塞判定の結果、前記一方のコントローラを閉鎖すべきであるものと判定されたものの前記閉塞判定が誤っていた場合、代わりに新たなコントローラが装着されたことを契機として、前記複数のコントローラのうちの一方のコントローラが、前記情報同期ステップにおいて、前記最後に同期された最も直前のシステム制御情報を用いて、再度装着された前記一方のコントローラと前記新たなコントローラとを同期させる再同期指示ステップと、を有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、障害が発生した際に、複数のコントローラのうち閉塞すべきコントローラの判定精度を向上させる一方、閉塞すべきコントローラの判定が外れた場合でも再度コントローラを安全に交換可能とし、システム全体が停止するリスクを最小限に抑えることができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態による冗長系ストレージシステムの概略構成を示すブロック図である。
【図２】図１に示すドライバー回路の構成例を示すブロック図である。
【図３】図１に示すコントローラ間通信パスのエラーログの一例を示す図である。
【図４】第１の実施の形態による障害復旧方法の一例を示すフローチャートである。
【図５】装置立ち上げ時における縮退リンクアップ処理の一例を示すシーケンスチャートである。
【図６】装置稼働中における縮退リンクアップ処理の一例を示すシーケンスチャートである。
【図７】障害情報による不良コントローラ特定処理の一例を示すシーケンスチャートである。
【図８】閉職対象のコントローラを特定する処理の一例を示すシーケンスチャートである。
【発明を実施するための形態】
【００１１】
以下、図面について、本発明の一実施の形態について詳述する。
【００１２】
（１）第１の実施の形態
（１−１）第１の実施の形態による冗長系ストレージシステムの構成
図１は、第１の実施の形態による冗長系ストレージシステムの概略構成を示す。
第１の実施の形態による冗長系ストレージシステムは、第１のコントローラ１００及び図示しない第１のストレージ装置、第２のコントローラ２００及び図示しない第２のストレージ装置、並びにＰＣ３００を備える。第１のコントローラ１００とＰＣ３００とはネットワーク４００ＡによってＬＡＮカード１３０を介して接続されている一方、第２のコントローラ２００とＰＣ３００とはネットワーク４００ＢによってＬＡＮカード２３０を介して接続されている。
【００１３】
ＰＣ３００は、保守員によって操作されるコンピュータであり、保守員の操作に応じて第１のコントローラ１００及び第２のコントローラ２００に対してデータの書き込み及び読み出し指示を出力する。
【００１４】
第１のコントローラ１００は、ＰＣ３００から受け取った指示に応じて第１のストレージ装置との間でデータの読み書きを制御する一方、第２のコントローラ２００は、ＰＣ３００から受け取った指示に応じて第２のストレージ装置との間でデータの読み書きを制御する。
【００１５】
第１のコントローラ１００と第２のコントローラ２００とは、複数のレーンにより構成されているコントローラ間通信パス５００によって接続されており、このコントローラ間通信パス５００を経由して、後述するように障害を表す障害情報及びシステム制御情報のような様々な情報を通信による交換することができる。
【００１６】
この冗長系ストレージシステムでは、第１のコントローラ１００は第２のコントローラ２００とほぼ同様な構成であり、第１のストレージ装置は第２のストレージ装置と同様な構成である。
【００１７】
即ち、第１のコントローラ１００は、マイクロプログラム（以下「マイクロ」と省略する）１１０Ａ、自系コントローラ間通信パスのエラーログ１１０Ｂ及び他系コントローラ間通信パス５００のエラーログ１１０Ｃが記憶されているメモリ１１０と、エラーレジスタ１２０Ａが設けられているプロセッサ１２０とを備え、一例としてさらに、エラーレジスタ１４０Ａが設けられているドライバー回路１４０を備える。エラーレジスタ１２０Ａは、例えば立ち上げ時及び周期的に、コントローラ間通信パス５００における障害を表すエラー情報が格納される一方、エラーレジスタ１４０Ａは、例えば立ち上げ時及び周期的に、ドライバー回路１４０の障害を表すエラー情報が格納される。
【００１８】
一方、第２のコントローラ２００は、上述した第１のコントローラ１００の各構成に対応しており、マイクロプログラム（以下「マイクロ」と省略する）２１０Ａ、自系コントローラ間通信パス５００のエラーログ２１０Ｂ及び他系コントローラ間通信パスのエラーログ２１０Ｃが記憶されているメモリ２１０と、エラーレジスタ２２０Ａが設けられているプロセッサ２２０とを備え、障害の生じやすい部位の一例として、さらに、エラーレジスタ２４０Ａが設けられているドライバー回路２４０を備える。なお、エラーレジスタ２２０Ａはコントローラ間通信パスにおける障害を表すエラー情報を格納するために用いられる一方、エラーレジスタ２４０Ａはドライバー回路２４０の障害を表すエラー情報を格納するために用いられる。以下、これらの同様の構成については、主として第１のコントローラ１００について説明し、第２のコントローラ２００については説明を省略する。
【００１９】
ドライバー回路１４０は、第１のコントローラ１００と第２のコントローラ２００との間において障害が生じうる部位の一例である。ドライバー回路１４０は、発生した障害に関する情報をエラーログとして記憶するエラーレジスタ１４０Ａを備えている。
【００２０】
第１の実施の形態において第１のコントローラ１００と第２のコントローラ２００との間で障害が生じうるのは、一例として示したドライバー回路１４０に限られず、例えばコントローラ間通信パス５００を構成する複数のレーンの少なくとも一部となる場合もありうる。第１の実施の形態は、障害が生じた場合でもこれら複数のレーンのうちの少なくとも一部のレーンが通信可能であれば成立する。
【００２１】
上述したようにプロセッサ１２０は、エラーレジスタ１２０Ａを備えており、上述したドライバー回路１４０のエラーレジスタ１４０Ａに記憶されたエラーログと同一のエラーログが書き込まれる。
【００２２】
メモリ１１０では、マイクロ１１０Ａがプロセッサ１２０の制御によって動作している。このマイクロ１１０Ａは、自らのコントローラ（第１のコントローラ１００）において収集された、当該自らのコントローラと他方のコントローラ（第２のコントローラ２００）との間における通信パスに生じた障害に関する情報をエラーログ１１０Ｂとしてメモリ１１０に記憶する。一方、このマイクロ１１０Ａは、他方のコントローラ（第２のコントローラ２００）において収集された、当該他方のコントローラと自らのコントローラ（第１のコントローラ１００）との間における通信パスに生じた障害に関する情報をエラーログ１１０Ｃとしてメモリ１１０に記憶する。なお、第２のコントローラ２００では、当然ながら上述した第１のコントローラ１００に関する説明とは逆の構成となる。
【００２３】
図２は、図１に示すドライバー回路１４０の構成例を示す。ドライバー回路１４０は、プロセッサ通信パスレーンコントローラ４０Ａ、信号品質制御回路４０Ｂ及び他系コントローラ通信パスレーンコントローラ４０Ｃを備える。なお、「自系」とは、複数のコントローラ１００，２００のうちあるコントローラを基準とした場合に自ら側のコントローラを表し、「他系」とは、複数のコントローラ１００，２００のうちあるコントローラを基準とした場合に相手側のコントローラを表している。
【００２４】
他系コントローラ通信パスレーンコントローラ４０Ｃは、自らのコントローラ（第１のコントローラ１００）と他方のコントローラ（第２のコントローラ２００）との間に存在するコントローラ間通信パス５００を構成する複数のレーンを用いた通信を制御する。
【００２５】
プロセッサ通信パスレーンコントローラ４０Ａは、プロセッサ１２０との間で、上記通信パスを構成する複数のレーンを用いた通信を制御する。
【００２６】
信号品質制御回路４０Ｂは、内部パスのいずれかの位置に設けられた回路であり、この内部パスを用いて交換される信号について誤り訂正を実施するなどして信号の品質を向上させる。
【００２７】
図３は、図１に示す自系コントローラ間通信パスエラーログ１１０Ｂ，２１０Ｂ及び他系コントローラ間通信パスエラーログ１１０Ｃ，２１０Ｃの一例を示す。なお、自系コントローラ間通信パスエラーログ１１０Ｂ，２１０Ｂ及び他系コントローラ間通信パスエラーログ１１０Ｃ，２１０Ｃは、互いに同様な構成であるため、以下、自系コントローラ間通信パスエラーログ１１０Ｂについて説明する。
【００２８】
自系コントローラ間通信パスのエラーログ１１０Ｂは、プロセッサエラー発生数１０Ｄ、プロセッサエラーテーブル１０Ｅ、ドライバー回路エラー発生数１０Ｆ及びドライバー回路エラーテーブル１０Ｇを備える。
【００２９】
プロセッサエラー発生数１０Ｄは、プロセッサ１２０に発生したエラーの発生数を表している。なお、各障害を表すエラーは互いにエラー番号によって区別可能となっている。
【００３０】
プロセッサエラーテーブル１０Ｅは、例えばプロセッサ１２０に関して、エラー番号ごとに、ある障害を表すエラーの発生時刻及び詳細情報を管理する。
【００３１】
ドライバー回路エラー発生数１０Ｆは、ドライバー回路１４０において発生した障害を表すエラーの発生回数を表している。
【００３２】
ドライバー回路エラーテーブル１０Ｇは、例えばドライバー回路１４０に関して、エラー番号ごとに、障害を表すエラーの発生時刻及び詳細情報を管理する。
【００３３】
（１−２）冗長系ストレージシステムにおける障害回復方法
（１−２−１）障害回復方法の概要
図４は、障害回復方法の一例を示す。なお、第１の実施の形態では、図面においてコントローラを「ＣＴＬ」と省略して表し、例えば、第１のコントローラ１００を「ＣＴＬ１」とも図示する一方、第２のコントローラ２００を「ＣＴＬ２」とも図示する。
【００３４】
まず、冗長系ストレージシステムが起動される（ステップＳ１）。これにより、第１のコントローラ１００及び第２のコントローラ２００では、初期設定、マイクロ１１０Ａ，２１０Ａの起動処理などを含む装置立上処理を実行する（ステップＳ２）。なお、以下の説明では、第２のコントローラ２００に特に言及する必要がない場合を除き、主として第１のコントローラ１００について説明する。
【００３５】
続いて、第１のコントローラ１００は、マイクロ１１０Ａがプロセッサ１２０の制御によって障害情報を収集する障害情報監視同期処理を実行する（ステップＳ３）。この障害情報監視同期処理は、例えば２つの場面において実行される。１つは装置立ち上げ時に実行される場合であり（後述する立ち上げ時の場合）、もう１つは定常稼働中に定期的に実行される場合である。これらの場合における各シーケンスの詳細については後述する。
【００３６】
この障害情報監視同期処理では、マイクロ１１０Ａがある障害を表すエラーに対応したエラー情報を採取してエラーレジスタ１２０Ａに格納するとともに、この採取したエラー情報を自らのコントローラ（第１のコントローラ１００）と他方のコントローラ（第２のコントローラ２００）との間で同期する。
【００３７】
第１のコントローラ１００では、プロセッサ１２０がエラーレジスタ１２０Ａのエラー情報を参照し、このエラー情報に基づいて障害が発生しているか否かを判定する（ステップＳ４）。
【００３８】
マイクロ１１０Ａは、プロセッサ１２０の制御によって、第１のコントローラ１００と第２のコントローラ２００との間においてコントローラ間通信パス５００の断線障害であるか否かを判定する（ステップＳ５）。プロセッサ１２０は、コントローラ間通信パス５００の断線障害でないと判定した場合には各種閉塞処理を実施する（ステップＳ６）。
【００３９】
一方、プロセッサ１２０は、コントローラ間通信パス５００の断線障害であると判定した場合にはコントローラ間通信パス５００の強制的な縮退稼働を実施する（ステップＳ７）。この強制的な縮退稼働では、マイクロ１１０Ａが、プロセッサ１２０の制御によってコントローラ間通信パスを構成する複数のレーンのうち障害の影響を受けない通信可能なレーンのみを用いるよう縮退して稼働する。本実施の形態では、当該影響により使用しないレーンを「不良レーン」とも呼ぶことがある。なお、このステップＳ７〜後述するステップＳ１３までは保守作業のためのマイクロ動作に相当する。
【００４０】
次にプロセッサ１２０は、マイクロ１１０Ａに、縮退リンクアップが成功したか否かを判定させる。より具体的には、マイクロ１１０Ａは、不良レーンの切り離しに成功したか否かを判定する（ステップＳ８）。マイクロ１１０Ａは、不良レーンの切り離しに成功しなかった場合には、障害情報解析による不良コントローラを特定する（ステップＳ９）。なお、第１の実施の形態では、このように障害情報解析を実施する際に、後述するように障害情報の収集によって、閉塞コントローラを特定する精度を向上するための工夫がなされている。
【００４１】
一方、マイクロ１１０Ａは、不良レーンの切り離しに成功した場合には、各コントローラ１００，２００のシステム制御情報を同期する（ステップＳ１０）。
【００４２】
マイクロ１１０Ａは、障害の発生上法に基づき、第１のコントローラ１００または第２のコントローラ２００を交換すべき旨の通知を保守員に対してＰＣ３００を経由して実施する（ステップＳ１１）。この際、プロセッサ１２０は、直前のコントローラ交換により、本処理を実施する場合には直前に交換したコントローラとは別のコントローラを交換するようＰＣ３００を経由して保守員に対して通知する。
【００４３】
このような通知を受けた保守員は、任意のタイミングで、第１のコントローラ１００または第２のコントローラ２００を交換する（ステップＳ１２）。
【００４４】
このようにコントローラ交換が実施された旨の割込みを受領すると、マイクロ１１０Ａは、コントローラ間通信パス５００の回復が成功したか否かを判定する（ステップＳ１３）。このような判定を実施するのは、その後、コントローラ間通信パス５００の強制縮退稼働によりコントローラ保守作業及びコントローラ回復作業を実施するためである。
【００４５】
マイクロ１１０Ａは、コントローラ間通信パス５００の回復に成功しなかったと判定した場合には前述したステップＳ７に戻ってこれから実行する一方、コントローラ間通信パス５００の回復に成功したと判定した場合には冗長系ストレージシステムを正常に稼働させる（ステップＳ１４）。
【００４６】
（１−２−２）閉塞コントローラの過誤特定に対する救済処理
図５（Ａ）〜図５（Ｈ）は、それぞれ、閉塞すべきコントローラを誤って特定した場合における救済処理の一例を示すシーケンスチャートである。なお、以下の説明では、第１のコントローラ１００のドライバー回路１４０に障害が発生したものと仮定する。
【００４７】
図５（Ａ）に示すように、障害が発生すると、第１のコントローラ１００と第２のコントローラ２００との間ではレーンが強制的に縮退される。
【００４８】
図５（Ｂ）に示すように、閉塞すべきコントローラが第２のコントローラ２００であると誤って特定されている（×印が付されたコントローラに対応）。
【００４９】
図５（Ｃ）に示すように、閉塞すべきコントローラとして第２のコントローラ２００が取り外される。実際には、当該第２のコントローラ２００には障害が発生していないため、後述する図５（Ｈ）を用いた説明において再度装着される。
【００５０】
図５（Ｄ）に示すように、新規コントローラとして第３のコントローラ２００Ａが装着される（１回目の交換）。なお、この第３のコントローラ２００Ａは、上述した第２のコントローラ２００とほぼ同様に、第２のコントローラ２００のドライバー回路２４０に相当するドライバー回路２４０Ａと、第２のコントローラ２００のプロセッサ２２０に相当するプロセッサ２２０Ａとを備えている。
【００５１】
本例では、閉塞すべきコントローラが前述のように誤っているため、図５（Ｅ）に示すように、第３のコントローラ２００Ａが装着されても、障害が発生している第１のコントローラ１００の影響により、第１のコントローラ１００と第３のコントローラ２００Ａとの間では、縮退リンクアップによるコントローラ間のシステム制御情報を用いて同期することができず、システム回復が失敗に終わってしまうことになる。
【００５２】
以上のようなことから、次は逆に２回目のコントローラ交換を実施する。図５（Ｆ）に示すように、２回目のコントローラ交換として第１のコントローラ１００を対象とする。すなわち、図５（Ｇ）に示すように、閉塞すべきコントローラとして第１のコントローラ１００が取り外される。
【００５３】
これにより、このように取り外された第１のコントローラ１００の代わりに、図５（Ｈ）に示すように、例えば、前述した第２のコントローラ２００が装着されるようになる。
【００５４】
（１−２−３）装置立ち上げ時縮退リンクアップ
図６は、装置稼働中における縮退リンクアップ処理の一例を示すシーケンスチャートである。なお、図示の符号において図４などに示す符号と同一である場合には、同様の処理であることを表している。
【００５５】
ステップＳ１では、第１のコントローラ１００においてはマイクロ１１０Ａが第１のコントローラ１００全体を立ち上げる一方（ステップＳ１１）、第２のコントローラ２００ではマイクロ２１０Ａが第２のコントローラ２００全体を立ち上げる（ステップＳ１２）。
【００５６】
次のステップＳ２では、第１のコントローラ１００と第２のコントローラ２００との間においてコントローラ間同期情報を送受信している。具体的には、第１のコントローラ１００では、マイクロ１１０Ａが第２のコントローラ２００に対してコントローラ間同期情報（システム制御情報、エラー情報に相当）を送信し（ステップＳ２１）、第２のコントローラ２００では、マイクロ２１０Ａがこのコントローラ同期情報を受信する（ステップＳ２２）。一方、第２のコントローラ２００では、マイクロ２１０Ａが第１のコントローラ１００に対してコントローラ間同期情報を送信し（ステップＳ２３）、第１のコントローラ１００ではマイクロ１１０Ａがこのコントローラ同期情報を受信する（ステップＳ２４）。
【００５７】
さらにステップＳ２では、第１のコントローラ１００ではマイクロ１１０Ａがコントローラ間通信パス５００にリンクアップする一方（ステップＳ２５）、第２のコントローラ２００ではマイクロ２１０Ａがこのコントローラ間通信パス５００にリンクアップする（ステップＳ２６）。これにより、コントローラ間通信パス５００についてリンクアップが完了する（ステップＳ２７）。
【００５８】
図６に示すステップＳ３では、例えばコントローラ間通信パス５００に通信エラーのような障害が第２のコントローラ２００においてのみ検出された場合（ステップＳ３１）、第１のコントローラ１００では、マイクロ１１０Ａが、エラー情報のポーリングを実施することにより（ステップＳ３２）、プロセッサ１２０のエラーレジスタ１２０Ａからエラー発生報告を受け取り（ステップＳ３３）、このエラー発生報告に応じたエラー情報をコントローラ間通信パス５００のエラーログとしてメモリ１１０に保存する（ステップＳ３４）。
【００５９】
一方、ステップＳ３では、例えばレーン障害が発生した場合（ステップＳ３５）、第１のコントローラ１００のエラーレジスタ１２０Ａ及び第２のコントローラ２００のエラーレジスタ１４０Ａに対して障害報告が指示される（ステップＳ３６）。すると、この障害情報は、第１のコントローラ１００のエラーレジスタ１２０Ａからマイクロ１１０Ａに対して送信される一方（ステップＳ３７）、第２のコントローラ２００のエラーレジスタ２２０Ａからマイクロ２１０Ａに対して送信される（ステップＳ３８）。
【００６０】
ステップＳ４では、第１のコントローラ１００ではマイクロ１１０Ａが障害割込みを検出する一方（ステップＳ４１）、第２のコントローラ２００ではマイクロ２１０Ａが障害割込みを検出する（ステップＳ４２）。
【００６１】
次にステップＳ７では、ハードウェア的にまたはソフトウェア的に障害が発生している一部のレーンを切り離し（ステップＳ７１）、縮退稼働が実施される（ステップＳ７２）。
【００６２】
次に、第１のコントローラ１００では、マイクロ１１０Ａが第２のコントローラ２００に対してエラー情報を送信し（ステップＳ７３）、第２のコントローラ２００ではマイクロ２１０Ａがこのエラー情報を受信する（ステップＳ７４）。一方、第２のコントローラ２００では、マイクロ２１０Ａが第１のコントローラ１００に対してエラー情報を送信し（ステップＳ７５）、第１のコントローラ１００ではマイクロ１１０Ａがこのエラー情報を受信する（ステップＳ７６）。
【００６３】
これにより、レーン障害の前後の障害情報を保存することができるため、障害モードの解析に有効なデータを共有することができる。本例では、第１のコントローラ１００で２回エラーが発生し、第２のコントローラ２００のエラーではエラーが発生していない。これ以降に複数のコントローラ１００，２００間の通信パス障害が発生しても、決め打ちで一方のコントローラを閉塞する代わりに、エラー情報に基づいて合理的にどのコントローラを閉塞するべきかについて決定することができるようになる。
【００６４】
以上のように第１のコントローラ１００及び第２のコントローラ２００は、エラー情報を互いに交換し合い、装置立ち上げ時縮退リンクアップを完了する。
【００６５】
（１−２−４）装置稼働中縮退リンクアップ
図７は、装置稼働中における縮退リンクアップ処理の一例を示すシーケンスチャートである。なお、図示の符号において図４などに示す符号と同一である場合には、同様の処理であることを表している。
【００６６】
図７に示すステップＳ３では、例えばコントローラ間通信パス５００に通信エラーのような障害が第１のコントローラ１００においてのみ検出された場合（ステップＳ３１）、第１のコントローラ１００では、マイクロ１１０Ａが、エラー情報のポーリングを実施することにより（ステップＳ３２）、プロセッサ１２０のエラーレジスタ１２０Ａからエラー発生報告を受け取り（ステップＳ３３）、このエラー発生報告に応じたエラー情報をとしてメモリ１１０に保存する（ステップＳ３４）。
【００６７】
続いて、図７に示すステップＳ３では、第２のコントローラ２００ではマイクロ２１０Ａがエラー情報のポーリングを実施することにより（ステップＳ３９Ａ）、プロセッサ２２０のエラーレジスタ２２０Ａからエラー未発生報告を受け取る（ステップＳ３９Ｂ）。
【００６８】
さらに、図７に示すステップＳ３では、例えばコントローラ間通信パス５００に通信エラーのような障害が第２のコントローラ２００においてのみ検出された場合（ステップＳ３１）、第１のコントローラ１００では、マイクロ１１０Ａが、エラー情報のポーリングを実施することにより（ステップＳ３２）、プロセッサ１２０のエラーレジスタ１２０Ａからエラー発生報告を受け取り（ステップＳ３３）、このエラー発生報告に応じたエラー情報をコントローラ間通信パス５００のエラーログとしてメモリ１１０に保存する（ステップＳ３４）。
【００６９】
一方、ステップＳ３では、例えばレーン障害が発生した場合（ステップＳ３５）、第１のコントローラ１００のエラーレジスタ１２０Ａ及び第２のコントローラ２００のエラーレジスタ２２０Ａに対して障害報告がなされる（ステップＳ３６Ａ）。すると、この障害情報は、第１のコントローラ１００のエラーレジスタ１２０Ａからマイクロ１１０Ａに対して送信される一方（ステップＳ３７）、第２のコントローラ２００のエラーレジスタ２２０Ａからマイクロ２１０Ａに対して送信される（ステップＳ３８）。
【００７０】
ステップＳ４では、第１のコントローラ１００ではマイクロ１１０Ａが障害割込みを検出する一方（ステップＳ４１）、第２のコントローラ２００ではマイクロ２１０Ａが障害割込みを検出する（ステップＳ４２）。
【００７１】
次にステップＳ７では、ハードウェア的にまたはソフトウェア的に障害が発生している一部のレーンを切り離し（ステップＳ７１）、縮退稼働が実施される（ステップＳ７２）。
【００７２】
次に、第１のコントローラ１００では、マイクロ１１０Ａが第２のコントローラ２００に対してエラー情報を送信し（ステップＳ７３）、第２のコントローラ２００ではマイクロ２１０Ａがこのエラー情報を受信する（ステップＳ７４）。一方、第２のコントローラ２００では、マイクロ２１０Ａが第１のコントローラ１００に対してエラー情報を送信し（ステップＳ７５）、第１のコントローラ１００ではマイクロ１１０Ａがこのエラー情報を受信する（ステップＳ７６）。
【００７３】
以上のように第１のコントローラ１００及び第２のコントローラ２００は、エラー情報を互いに交換し合い、装置稼働中に縮退リンクアップを完了する。
【００７４】
以上説明したように第１の実施の形態によれば、閉塞すべきコントローラを誤って判定してしまった場合でも、冗長系ストレージシステムを停止することなくオンラインで、このコントローラを再度交換することができる。また、仮に上記縮退稼働が実施できない場合でも、装置稼働以降に発生した障害情報に基づき、閉塞すべきコントローラを合理的な判定により決めることができる。このようにすると、閉塞すべきコントローラを決め打ちで当たり所を付けて閉塞する場合に比べて、本来閉塞すべきであったコントローラを正確に特定する確率を向上することができる。
【００７５】
即ち、本実施の形態によれば、システムの可用性を損なうコントローラのいわゆるオフライン交換を回避することができる。また、コントローラ間通信パス５００を構成する複数のレーンのバス縮退によりシステムの稼働を維持することにより、より多くの障害情報を収集することができるようになる。この結果、本実施の形態では、障害モードの解析の精度が向上し、コントローラのオフラインでの交換を実施する可能性を低減することができる。これは、特に、レーン障害が徐々に拡大しやすい、障害モードの場合には特に有効となる。
【００７６】
（２）第２の実施の形態
第２の実施の形態による冗長系ストレージシステムは、第１の実施の形態による冗長系ストレージシステムとほぼ同様の構成であり同様の動作を実行するため、以下では、両者の異なる点を中心として説明する。
【００７７】
（２−１）第２の実施の形態における特徴
第２の実施の形態による冗長系ストレージシステムでは、第１のコントローラ１００及び第２のコントローラ２００がそれぞれ不良コントローラ特定処理を実行する点が第１の実施の形態とは異なっている。以下具体的に説明する。
【００７８】
（２−２）不良コントローラ特定処理
図８は、障害情報を用いた不良コントローラ特定処理の一例を示すシーケンスチャートである。なお、図示の符号において図４などに示す符号と同一である場合には、同様の処理であることを表している。
【００７９】
コントローラ間通信パス５００において通信が可能であるが通信エラーが発生すると（ステップＳ１０１）、第２のコントローラ２００では、ドライバー回路２４０が通信エラーを検出し（ステップＳ１０２）、プロセッサ２２０が当該通信エラーを検出する（ステップＳ１０３）。
【００８０】
第２のコントローラ２００では、マイクロ２１０Ａがプロセッサエラーポーリングを周期的に実施しており（ステップＳ１０４）、プロセッサ２２０のエラーレジスタ２２０Ａのエラービットを有効化する（ステップＳ１０５）。
【００８１】
第２のコントローラ２００では、マイクロ２１０Ａがエラー情報の検出及びエラークリアを実施し（ステップＳ１０６）、エラービットを無効化する（ステップＳ１０７）。
【００８２】
第２のコントローラ２００では、マイクロ２１０Ａがドライバー回路エラー情報ポーリングを周期的に実施し（ステップＳ１０８）、エラービットを有効化する（ステップＳ１０９）。
【００８３】
第２のコントローラ２００では、マイクロ２１０Ａがエラー情報の検出及びエラークリアを実施し（ステップＳ１１０）、エラービットを無効化する（ステップＳ１１１）。
【００８４】
続いて、第１のコントローラ１００のマイクロ１１０Ａと、第２のコントローラ２００のマイクロ２１０Ａとの間では、周期的に、エラー情報が同期される（ステップＳ１２１，Ｓ１２２）。
【００８５】
一方、部分的に通信が可能であるもののレーン障害が発生すると（ステップＳ２０１）、コントローラ間通信パス５００では、レーンの縮退稼働が実施される（ステップＳ７２）。
【００８６】
このレーン障害により、コントローラ間通信パス５００と第２のコントローラ２００との間に通信エラーが発生し（ステップＳ２０２）、第１のコントローラ１００では、プロセッサ１２０がこの通信エラーを検出する（ステップＳ２０３）。これにより、レーン障害が発生した後のコントローラ障害情報も、解析情報として使用することができる。
【００８７】
一方、このレーン障害により、このコントローラ間通信パス５００と第１のコントローラ１００との間に通信エラーが発生し（ステップＳ２０２）、第２のコントローラ２００では、プロセッサ２２０がこの通信エラーを検出する（ステップＳ２０４）。これにより、レーン障害が発生した後のコントローラ障害情報も、解析情報として使用することができる。
【００８８】
第１のコントローラ１００では、プロセッサ１２０が、プロセッサエラー情報ポーリングを実施し（ステップＳ２０５）、プロセッサ１２０のエラーレジスタ１２０Ａのエラービットを有効化する（ステップＳ２０６）。
【００８９】
続いて、第１のコントローラ１００では、マイクロ１１０Ａがエラー情報の検出及びエラークリアを実施し（ステップＳ２０７）、プロセッサ１２０のエラーレジスタ１２０Ａのエラービットを無効化する（ステップＳ２０８）。
【００９０】
一方、第２のコントローラ２００では、マイクロ２１０Ａがプロセッサエラー情報ポーリングを実施し（ステップＳ２０９）、ドライバー回路２４０のエラーレジスタ２２０Ａのエアービットを有効化する（ステップＳ２１０）。
【００９１】
さらに第２のコントローラ２００では、マイクロ２１０Ａがエラー情報の検出及びエラークリアを実施し（ステップＳ２１１）、エラービットを無効化する（ステップＳ２１２）。
【００９２】
続いて、第１のコントローラ１００のマイクロ１１０Ａと、第２のコントローラ２００のマイクロ２１０Ａとの間では、周期的に、コントローラ間通信パス５００を経由してエラー情報が交換されることにより同期される（ステップＳ１２１，Ｓ１２２）。これにより、第１のコントローラ１００と第２のコントローラ２００との間では、障害が発生した後の情報も共有することができるようになる。
【００９３】
一方、コントローラ間通信パス５００においてパス断線障害が発生して通信が不可能である場合（ステップＳ３０１）、第１のコントローラ１００では、プロセッサ１２０が、周期的な検出処理を実行することによってこの障害を検出する一方（ステップＳ３０２）、第２のコントローラ２００では、プロセッサ２２０が、周期的な検出処理を実行することによってこの障害を検出する（ステップＳ３０３）。
【００９４】
第１のコントローラ１００では、プロセッサ１２０が、割込み処理においてレーン障害情報をマイクロ１１０Ａに送信する（ステップＳ３０４）。これにより、マイクロ１１０Ａは、パス障害を検出し（ステップＳ３０５）、最終同期のエラー情報に基づいて障害モードを解析する（ステップＳ３０６）。
【００９５】
一方、第２のコントローラ２００では、プロセッサ２２０が、割込み処理においてレーン障害情報をマイクロ２１０Ａに送信する（ステップＳ３０７）。これにより、マイクロ２１０Ａは、パス障害を検出し（ステップＳ３０８）、最終同期のエラー情報に基づいて障害モードを解析する（ステップＳ３０９）。これにより、可能な限り多く収集したエラー情報に基づいて解析を実施することができる。
【００９６】
第１のコントローラ１００では、マイクロ１１０Ａが解析結果に応じて、閉塞すべきコントローラを決定するとともに、第２のコントローラ２００との間で調停を実施する（ステップＳ３１０）。
【００９７】
一方、第２のコントローラ２００では、マイクロ２１０Ａが解析結果に応じて、閉塞すべきコントローラを決定するとともに、第１のコントローラ１００との間で調停を実施する（ステップＳ３１１）。
【００９８】
以上のような調停の結果、上記解析結果に応じて、第１のコントローラ１００が閉塞されたり（ステップＳ３１２）、第２のコントローラ２００が閉塞される（ステップＳ３１３）。
【００９９】
以上説明したように第２の実施の形態によれば、不良コントローラ特定処理を実行することにより、従来は不可能であった、レーン障害が発生した後のコントローラ障害情報も解析情報として使用することができるばかりでなく、障害が発生した後の情報も共有することができ、さらには、従来は不可能であったが、可能な限り多く収集したエラー情報に基づいて解析を実施することができる。
【０１００】
（３）その他の実施形態
上記実施形態は、本発明を説明するための例示であり、本発明をこれらの実施形態にのみ限定する趣旨ではない。本発明は、その趣旨を逸脱しない限り、様々な形態で実施することができる。例えば、上記実施形態では、各種プログラムの処理をシーケンシャルに説明したが、特にこれにこだわるものではない。従って、処理結果に矛盾が生じない限り、処理の順序を入れ替え又は並行動作するように構成しても良い。また、上記実施形態における各処理ブロックを含むプログラムは、例えばコンピュータが読み取り可能な非一時的記憶媒体に格納されている形態であっても良い。
【産業上の利用可能性】
【０１０１】
本発明は、複数のコントローラ同士がコントローラ間通信パスを構成する複数のレーンによって接続された冗長系ストレージシステム及びその障害復旧方法に広く適用することができる。
【符号の説明】
【０１０２】
１００……コントローラ、１１０……メモリ、１１０Ａ……マイクロ、１２０……プロセッサ、１４０……ドライバー回路、２１０……メモリ、２１０Ａ……マイクロ、２２０……プロセッサ、２４０…………ドライバー回路、２００……コントローラ、３００……ＰＣ、５００……コントローラ間通信パス。
【図１】
2019079263.tif 000003
【図２】
2019079263.tif 000004
【図３】
2019079263.tif 000005
【図４】
2019079263.tif 000006
【図５】
2019079263.tif 000007
【図６】
2019079263.tif 000008
【図７】
2019079263.tif 000009
【図８】
2019079263.tif 000010