(57)【特許請求の範囲】
【請求項１】
第二のストレージ・クラスター内の第二のストレージ・コントローラによって実行される方法であって、前記第二のストレージ・コントローラは第一のストレージ・クラスター内の第一のストレージ・コントローラのための災害復旧パートナーとして構成されており、当該方法は：
前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへのハートビート情報交換のためにメモリ・セクションが指定されていることを判別する段階と；
前記第一のストレージ・コントローラの現在のハートビート状態を得るために前記メモリ・セクションにアクセスするためのリモート直接メモリ・アクセス読み取り動作を実行する段階と；
前記現在のハートビート状態が前記第一のストレージ・コントローラの障害を示すことを判別する段階と；
前記第二のストレージ・コントローラから前記第一のストレージ・クラスターに通信信号を送る段階と；
前記通信信号への応答性が前記障害が偽トリガーでないことを示すことに基づいて、スイッチオーバー前にそれまで前記第一のストレージ・コントローラを通じてクライアントにとってアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへの自動スイッチオーバー動作を開始する段階と；
前記通信信号への前記応答性が前記障害が偽トリガーであることを示すことに基づいて、前記自動スイッチオーバー動作を開始することを控える段階とを含む、
方法。
【請求項２】
前記現在のハートビート状態がストレージ・コントローラ再起動を前記障害として特定する、請求項１記載の方法。
【請求項３】
前記現在のハートビート状態が前記第一のストレージ・コントローラの動作遷移を特定する、請求項１記載の方法。
【請求項４】
前記ハートビート情報交換が、前記第一のストレージ・コントローラの進行を示すために使われる一連のシーケンス番号に対応する、請求項１記載の方法。
【請求項５】
前記現在のハートビート状態がソフトウェア・パニックを特定する、
請求項１記載の方法。
【請求項６】
前記障害が偽トリガーでないと判定し；
前記第一のストレージ・クラスターのストレージおよびメイン・コントローラが利用可能でないとの判定に基づいて、前記自動スイッチオーバー動作ではなく手動スイッチオーバー動作を開始し；
前記ストレージおよび前記メイン・コントローラが利用可能であるとの判定に基づいて、前記自動スイッチオーバー動作を開始することを含む、
請求項１記載の方法。
【請求項７】
前記障害が偽トリガーでないと判定し；
前記第一のストレージ・コントローラと前記第二のストレージ・コントローラとの間の書き込みキャッシュ同期状態が同期している状態を示すことに基づいて、前記自動スイッチオーバー動作を開始し；
前記書き込みキャッシュ同期状態が同期していない状態を示すことに基づいて、前記自動スイッチオーバー動作を開始することを控えることを含む、
請求項１記載の方法。
【請求項８】
前記第一のストレージ・コントローラの第一のディスク・メールボックスから前記書き込みキャッシュ同期状態を読み取ることを含む、
請求項７記載の方法。
【請求項９】
前記第一のストレージ・クラスターが単一コントローラ・クラスター構成に従って構成されており、前記第二のストレージ・クラスターが単一コントローラ・クラスター構成に従って構成されている、請求項１記載の方法。
【請求項１０】
前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへのハートビート情報交換のために第一のディスク・メールボックスが使われることを指定し；
前記第一のディスク・メールボックスから第二の現在のハートビート状態を読み取り；
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記障害を示すことに基づいて、前記自動スイッチオーバー動作を開始することを含む、
請求項１記載の方法。
【請求項１１】
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記障害を示すことに基づいて、前記障害を電力喪失障害として判別することを含む、請求項１０記載の方法。
【請求項１２】
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記障害を示すことに基づいて、閾値タイムアウト後に前記自動スイッチオーバー動作を開始することを含む、請求項１０記載の方法。
【請求項１３】
機械実行可能コードを有する、方法を実行するための命令が記憶されている非一時的な機械可読媒体であって、前記機械実行可能コードは、少なくとも一つの機械によって実行されたときに、前記機械に：
第一のストレージ・クラスター内の第一のストレージ・コントローラから第二のストレージ・クラスター内の第二のストレージ・コントローラへのハートビート情報交換のために第一のディスク・メールボックスおよびメモリ・セクションが使われることを判別する段階であって、前記第二のストレージ・コントローラは前記第一のストレージ・コントローラのための災害復旧パートナーとして構成されている、段階と；
前記第一のディスク・メールボックスから現在のハートビート状態を読む段階と；
前記第一のストレージ・コントローラの第二の現在のハートビート状態を得るために前記メモリ・セクションにアクセスするためのリモート直接メモリ・アクセス読み取り動作を実行する段階と；
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記第一のストレージ・コントローラの障害を示すことに基づいて、スイッチオーバー前にそれまで前記第一のストレージ・コントローラを通じてクライアントにとってアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへの自動スイッチオーバー動作を開始する段階とを実行させるものである、
非一時的な機械可読媒体。
【請求項１４】
前記現在のハートビート状態が前記第一のストレージ・コントローラのストレージ・コントローラ停止を特定する、請求項１３記載の非一時的な機械可読媒体。
【請求項１５】
前記機械実行可能コードは、前記機械に：
タイムアウト後に前記自動スイッチオーバー動作を実行させる、
請求項１３記載の非一時的な機械可読媒体。
【請求項１６】
前記機械実行可能コードは、前記機械に：
前記第二のストレージ・コントローラから前記第一のストレージ・クラスターに通信信号を送り；
前記障害が偽トリガーであるかどうかを判定するために前記通信信号への応答性を評価し；
前記障害が偽トリガーでないとの判定に基づいて、前記自動スイッチオーバー動作を開始し；
前記障害が偽トリガーであるとの判定に基づいて、前記自動スイッチオーバー動作を開始することを控えることを実行させる、
請求項１３記載の非一時的な機械可読媒体。
【請求項１７】
前記機械実行可能コードは、前記機械に：
前記障害が偽トリガーでないとの判定に基づいて、前記第一のストレージ・クラスターのストレージおよびメイン・コントローラが利用可能であるかどうかを判定し；
前記ストレージおよび前記メイン・コントローラが利用可能でないことに基づいて、前記自動スイッチオーバー動作ではなく手動スイッチオーバー動作を開始し；
前記ストレージおよび前記メイン・コントローラが利用可能であることに基づいて、前記自動スイッチオーバー動作を開始することを実行させる、
請求項１６記載の非一時的な機械可読媒体。
【請求項１８】
前記機械実行可能コードは、前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が障害を示すことに基づいて、前記機械に：
前記第一のストレージ・コントローラと前記第二のストレージ・コントローラとの間の書き込みキャッシュ同期状態を評価し；
前記書き込みキャッシュ同期状態が同期している状態を示すことに基づいて、前記自動スイッチオーバー動作を開始し；
前記書き込みキャッシュ同期状態が同期していない状態を示すことに基づいて、前記自動スイッチオーバー動作を開始することを控えることを含む、
請求項１３記載の非一時的な機械可読媒体。
【請求項１９】
方法を実行するための命令が記憶されている、機械実行可能コードを含む機械可読媒体を含むメモリと；
前記機械実行可能コードを実行するよう構成されている、前記メモリに結合されたプロセッサとを有するコンピューティング装置であって、前記機械実行可能コードは前記プロセッサに：
第一のストレージ・クラスター内の第一のストレージ・コントローラから第二のストレージ・クラスター内の第二のストレージ・コントローラへのハートビート情報交換のためにメモリ・セクションが指定されていることを判別する段階であって、前記第二のストレージ・コントローラは前記第一のストレージ・コントローラのための災害復旧パートナーとして構成されている、段階と；
前記第一のストレージ・コントローラの現在のハートビート状態を得るために前記メモリ・セクションにアクセスするためのリモート直接メモリ・アクセス読み取り動作を実行する段階と；
前記現在のハートビート状態が前記第一のストレージ・コントローラの障害を示すことを判別する段階と；
前記第一のストレージ・コントローラと前記第二のストレージ・コントローラとの間の書き込みキャッシュ同期状態を評価する段階と；
前記現在のハートビート状態が前記障害を示し、前記書き込みキャッシュ同期状態が同期している状態を示すことに基づいて、スイッチオーバー前にそれまで前記第一のストレージ・コントローラを通じてクライアントにとってアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへの自動スイッチオーバー動作を開始し、それ以外の場合には前記自動スイッチオーバー動作を開始することを控える段階とを実行させるものである、
コンピューティング装置。
【請求項２０】
前記プロセッサが、前記第一のストレージ・コントローラが電力を喪失する場合にバッテリーによって電力を与えられるプロセッサを有する、請求項１９記載のコンピューティング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は2015年10月22日に出願された「自動スイッチオーバーの実装」と題する米国の仮でない特許出願第14/920,334号の優先権を主張するものである。同出願の内容はここに参照によって組み込まれる。
【背景技術】
【０００２】
多くのストレージ・ネットワークは、データ損失保護および乱されないクライアント・アクセスのためにデータ複製および／または他の冗長データ・アクセス技法を実装することがある。たとえば、第一のストレージ・クラスターは、クライアントに、第一の記憶装置および／または他の記憶装置内に記憶されているデータへの一次アクセスを提供するよう構成された第一のストレージ・コントローラを有していてもよい。第二のストレージ・クラスターは、クライアントに、第二の記憶装置（たとえば、第二の記憶装置内の複製されたデータへのフェイルオーバー・アクセス）および／または他の記憶装置（たとえば、第三の記憶装置内に記憶されているデータへの一次アクセス）内に記憶されているデータへのアクセスを提供するよう構成された第二のストレージ・コントローラを有していてもよい。第一のストレージ・コントローラおよび第二のストレージ・コントローラは、第二のストレージ・コントローラが、第一の記憶装置から第二の記憶装置に複製された複製データへのフェイルオーバー・アクセスを提供するよう、災害復旧関係に従って構成されてもよい（たとえばスイッチオーバー動作が実行されてもよい。ここで、第二のストレージ・コントローラが第二の記憶装置および／またはそれまで第一のストレージ・コントローラによって所有されていた他の記憶装置の所有権を取得して、第二のストレージ・コントローラがクライアントにそのような記憶装置内のデータへのフェイルオーバー・アクセスを提供しうる）。
【０００３】
一例では、第二のストレージ・クラスターは、第一のストレージ・クラスターに対してリモートなサイトに位置していてもよい（たとえば、ストレージ・クラスターは、互いに何千キロメートルも離れた異なる建物、都市に位置していてもよい）。よって、あるストレージ・クラスターのサイトで災害が発生しても、生き残っているストレージ・クラスターはその災害によって影響を受けないままとなりうる（たとえば、第一のストレージ・クラスターをホストしている建物の停電は、異なる都市において第二のストレージ・クラスターをホストしている第二の建物には影響しないことがある）。
【０００４】
第一のストレージ・クラスターが単に第一のストレージ・コントローラを有し、第二のストレージ・クラスターが単に第二のストレージ・コントローラを有する場合（たとえば、クラスターが単に単一のストレージ・コントローラを有するためにコスト効率がよいことがありうる単一ストレージ・コントローラのクラスター構成）、第一のストレージ・コントローラおよび第二のストレージ・コントローラと対にされるローカルな高可用性ストレージ・コントローラがないことがありうる。そのようなものがあれば、障害を起こしたストレージ・コントローラのデータへの乱されないクライアント・アクセスのために障害を起こしたストレージ・コントローラのための比較的高速なローカルな引き継ぎ〔テイクオーバー〕を提供できたはずである。（たとえば、第一のストレージ・クラスターが、第一のストレージ・コントローラと対になる、高い可用性をもつ第三のストレージ・コントローラを有していたとしたら、第一のストレージ・コントローラに障害が生じた場合には第三のストレージ・コントローラが迅速に第一のストレージ・コントローラのために引き継ぐことができる。）その代わり、ストレージ・コントローラが障害を起こした場合、クラスター横断のスイッチオーバー動作が実行される必要があることがある。ストレージ・コントローラ障害のクラスターを横断してのリモート検出（たとえば、第二のストレージ・クラスター内の第二のストレージ・コントローラが第一のストレージ・クラスター内の第一のストレージ・コントローラの障害を検出すること）は、タイムアウト、手動のスイッチオーバーおよび／またはデータへの十分な乱されないクライアント・アクセスを提供しないかもしれない他の比較的遅いもしくは不正確な技法を利用することがある（たとえば、クライアントは、障害を起こしたストレージ・コントローラから生き残っているストレージ・コントローラへの手動のスイッチオーバーを待っている間、二分よりも長く、データへのアクセスを失うことがありうる）。このように、スイッチオーバー動作の自動的な実装のために、クラスターを横断して、ストレージ・コントローラ障害を迅速でありかつ信頼できる形で検出することが有利でありうる。
【図面の簡単な説明】
【０００５】
【図１】本稿に記載される施策の一つまたは複数に基づく例示的なクラスタリングされたネットワークを示す構成要素ブロック図である。
【図２】本稿に記載される施策の一つまたは複数に基づく例示的なデータ記憶システムを示す構成要素ブロック図である。
【図３】自動スイッチオーバーを実装する例示的方法を示すフローチャートである。
【図４】リモート直接メモリ・アクセス（RDMA）読み取り動作を利用する自動スイッチオーバーを実装するための例示的なコンピューティング装置を示す構成要素ブロック図である。
【図５】リモート直接メモリ・アクセス（RDMA）読み取り動作およびディスク・メールボックスを利用する自動スイッチオーバーを実装するための例示的なコンピューティング装置を示す構成要素ブロック図である。
【図６】自動スイッチオーバーを実装する例示的方法を示すフローチャートである。
【図７】ディスク・メールボックスを利用する自動スイッチオーバーを実装するための例示的なコンピューティング装置を示す構成要素ブロック図である。
【図８】自動スイッチオーバーを実装する例示的方法を示すフローチャートである。
【図９】サービス・プロセッサ・トラップを利用する自動スイッチオーバーを実装するための例示的なコンピューティング装置を示す構成要素ブロック図である。
【図１０】本稿に記載される施策の一つまたは複数に基づくコンピュータ可読媒体の例である。
【発明を実施するための形態】
【０００６】
特許請求される主題のいくつかの例について、これから図面を参照して述べる。図面において、同様の参照符号は一般にさまざまな図面を通じて同様の要素を指すために使われる。以下の記述では、特許請求される主題の理解を提供するために、説明の目的のために数多くの個別的詳細が記載されるが、特許請求される主題がこうした個別的詳細なしで実施されうることは明白でありうる。この詳細な説明のどの部分も、従来技術として自認されはしない。
【０００７】
自動スイッチオーバー実装のための一つまたは複数の技法および／またはコンピューティング装置が提供される。たとえば、第一のストレージ・クラスター内の第一のストレージ・コントローラが、第二のストレージ・クラスター内の第二のストレージ・コントローラと、災害復旧関係を有していてもよい。それにより、生き残ったストレージ・コントローラが、他方のストレージ・コントローラが障害を起こす場合に、データへのフェイルオーバー・アクセスをクライアントに提供しうる。本願で提供されるところでは、ストレージ・コントローラの障害は、リモート直接メモリ・アクセス（RDMA:  remote  direct  memory  access）読み取り動作、障害を起こしたストレージ・コントローラのディスク・メールボックスからの読み取り動作または障害を起こしたストレージ・コントローラのサービス・プロセッサによって送られたサービス・プロセッサ・トラップの受信を使って、生き残ったストレージ・コントローラによって識別されるハートビート信号に基づいて、クラスターを横断して迅速に識別されうる。障害を起こしたストレージ・コントローラの障害を識別することに応答して、生き残ったストレージ・コントローラは自動的にスイッチオーバー動作を実装してもよい。ここで、生き残ったストレージ・コントローラは、障害を起こしたストレージ・コントローラからストレージの所有権を受け継ぎ、それにより、生き残ったストレージ・コントローラは、そのようなストレージ内のデータへのフェイルオーバー・アクセスをクライアントに提供してもよい。
【０００８】
自動スイッチオーバー実装のためのコンテキストを与えるために、図１は、クラスタリングされたネットワーク環境１００またはネットワーク・ストレージ環境の実施形態を示している。ただし、本稿に記載される技法等はクラスタリングされたネットワーク環境１００、非クラスター・ネットワーク環境および／または多様な他のコンピューティング環境、たとえばデスクトップ・コンピューティング環境内で実装されてもよいことが理解されうる。すなわち、本開示は付属の請求項の範囲も含め、本稿で与えられる例に限定されることは意図されていない。同じまたは同様のコンポーネント、要素、特徴、項目、モジュールなどがのちの図に示されているが前の図に関して前に論じられていた場合には、その同様の（たとえば冗長な）議論は、のちの図を説明するときには（たとえば簡単および理解の容易のため）割愛することがあることが理解されるであろう。
【０００９】
図１は、本稿に記載される技法および／またはシステムの少なくともいくつかの実施形態を実装しうる例示的なクラスタリングされたネットワーク環境１００を示すブロック図である。例示的な環境１００は、クラスター・ファブリック１０６を通じて結合されたデータ記憶システムまたはストレージ・サイト１０２および１０４を有する。クラスター・ファブリック１０６は、記憶システム１０２および１０４（ならびにたとえばノード１１６および１１８のようなその中の一つまたは複数のモジュール、コンポーネントなど）の間の通信を容易にする、プライベートなインフィニバンド（Infiniband）、ファイバーチャネル（FC:  Fibre  Channel）またはイーサネット（登録商標）ネットワークとして具現されたコンピューティング・ネットワークなどである。二つのデータ記憶システム１０２および１０４ならびに二つのノード１１６および１１８が図１に示されているが、任意の好適な数のそのようなコンポーネントが考えられていることは理解されるであろう。一例では、ノード１１６、１１８は、ホスト装置１０８、１１０のようなクライアント装置に、データ記憶装置１２８、１３０内に記憶されたデータへのアクセスを提供するストレージ・コントローラを有する（たとえばノード１１６は一次またはローカルなストレージ・コントローラを有していてもよく、ノード１１８は二次またはリモートなストレージ・コントローラを有していてもよい）。同様に、本稿で特に断わりのない限り、本稿で言及されるおよび／または付属の図面に示される他のモジュール、要素、特徴、項目などについても同じことがいえる。すなわち、本稿に開示されるコンポーネント、モジュール、要素、特徴、項目などの特定の数は、限定するものとして解釈されることは意図されていない。
【００１０】
クラスタリングされたネットワークがいかなる特定の地理的エリアにも限定されず、ローカルおよび／またはリモートにクラスタリングできることもさらに理解されるであろう。こうして、ある実施形態では、クラスタリングされたネットワークは、複数の地理的位置に位置する複数の記憶システムおよび／またはノードにわたって分散されることができる。一方、別の実施形態では、クラスタリングされたネットワークは、単一の地理的位置に（たとえば複数のデータ記憶装置の単一のオンサイト・ラックに）存在するデータ記憶システム（たとえば１０２、１０４）を含むことができる。
【００１１】
図示した例では、一つまたは複数のホスト装置１０８、１１０は、たとえばクライアント装置、パーソナル・コンピュータ（PC）、記憶のために使われるコンピューティング装置（たとえばストレージ・サーバー）および他のコンピュータもしくは周辺装置（たとえばプリンター）を含んでいてもよく、ストレージ・ネットワーク接続１１２、１１４によってそれぞれのデータ記憶システム１０２、１０４に結合される。ネットワーク接続は、たとえばローカル・エリア・ネットワーク（LAN）または広域ネットワーク（WAN）を有していてもよく、データ・パケットを交換するために共通インターネット・ファイル・システム（CIFS:  Common  Internet  File  System）プロトコルまたはネットワーク・ファイル・システム（NFS:  Network  File  System）プロトコルのようなネットワーク・アタッチト・ストレージ（NAS:  Network  Attached  Storage）プロトコルを利用する。例示的には、ホスト装置１０８、１１０はアプリケーションを実行する汎用のコンピュータであってもよく、情報の交換のためのクライアント／サーバー・モデルを使ってデータ記憶システム１０２、１０４と対話してもよい。すなわち、ホスト装置はデータ記憶システムからのデータ（たとえば、ホスト装置によって発される記憶装置のためのI/Oコマンドを処理するよう構成されたネットワーク・ストレージ制御によって管理される記憶装置上のデータ）を要求してもよく、データ記憶システムは該要求の結果をホスト装置に、一つまたは複数のネットワーク接続１１２、１１４を介して返してもよい。
【００１２】
クラスタリングされたデータ記憶システム１０２、１０４上のノード１１６、１１８は、たとえばリモートな諸位置を有する企業などへのデータ記憶および管理サービス、クラウド記憶（たとえばストレージ・エンドポイントがデータ・クラウド内に記憶されてもよい）などを提供するためにクラスターとして相互接続されているネットワークまたはホスト・ノードを有することができる。データ記憶および管理ネットワーク・クラスター環境１００におけるそのようなノードは、たとえば接続ポイント、再分配ポイントまたは通信エンドポイントとしてネットワークに取り付けられた装置であることができる。ノードは、ネットワーク通信チャネルを通じて情報を送信、受信および／または転送することができてもよく、これらの基準のいずれかまたは全部を満たすいかなる装置を含むこともできる。ノードの一例は、ネットワークに取り付けられたデータ記憶および管理サーバーであってもよい。ここで、該サーバーは、データ記憶および管理システムにおいてサーバーとして動作するよう特に構成された汎用コンピュータまたはコンピューティング装置を含むことができる。
【００１３】
一例では、ノード１１６、１１８のようなノードの第一のストレージ・クラスター（たとえば、一つまたは複数の記憶装置の第一の論理的なグループ化を含む第一のストレージ集合体へのアクセスを提供するよう構成されたストレージ・コントローラの第一の集合）が第一のストレージ・サイトに位置していてもよい。図示されていないノードの第二のストレージ・クラスターが第二のストレージ・サイトに位置していてもよい（たとえば、一つまたは複数の記憶装置の第二の論理的なグループ化を含む第二のストレージ集合体へのアクセスを提供するよう構成されたストレージ・コントローラの第二の集合）。ノードの第一のストレージ・クラスターおよびノードの第二のストレージ・クラスターは、災害復旧構成に従って構成されてもよい。ここで、生き残ったノード・クラスターが、災害ノード・クラスターを有する災害ストレージ・サイトで災害が発生する場合に災害ノード・クラスターの記憶装置へのスイッチオーバー・アクセスを提供する（たとえば、第二のストレージ・サイトにおいて災害が発生した場合に、ノードの第一のストレージ・クラスターが、第二のストレージ集合体の記憶装置へのスイッチオーバー・データ・アクセスをクライアント装置に提供する）。
【００１４】
例示的な環境１００に示されているように、ノード１１６、１１８は、クラスターのための分散した記憶アーキテクチャーを提供するよう協調するさまざまな機能コンポーネントを有することができる。たとえば、ノードは、ネットワーク・モジュール１２０、１２２とデータ・モジュール１２４、１２６を有することができる。ネットワーク・モジュール１２０、１２２は、ノード１１６、１１８（たとえば、ネットワーク・ストレージ・コントローラ）がたとえばネットワーク接続１１２、１１４を通じてホスト装置１０８、１１０と接続することを許容し、ホスト装置１０８、１１０が分散式記憶システムに記憶されているデータにアクセスすることを許容するよう構成されることができる。さらに、ネットワーク・モジュール１２０、１２２は、クラスター・ファブリック１０６を通じて一つまたは複数の他のコンポーネントとの接続を提供することができる。たとえば、図１において、第一のノード１１６の第一のネットワーク・モジュール１２０は、第二のノード１１８の第二のデータ・モジュール１２６を通じて要求を送ることによって、第二のデータ記憶装置１３０にアクセスすることができる。
【００１５】
データ・モジュール１２４、１２６は、一つまたは複数のデータ記憶装置１２８、１３０、たとえばディスクまたはディスクのアレイ、フラッシュメモリまたは他の何らかの形のデータ記憶をノード１１６、１１８に接続するよう構成されることができる。ノード１１６、１１８はたとえばクラスター・ファブリック１０６によって相互接続されることができ、クラスター中のそれぞれのノードが、クラスター中の異なるノードに接続されたデータ記憶装置１２８、１３０上のデータにアクセスすることを許容する。しばしば、データ・モジュール１２４、１２６はデータ記憶装置１２８、１３０とストレージ・エリア・ネットワーク（SAN:  storage  area  network）プロトコル、たとえば小型コンピュータ・システム・インターフェース（SCSI）またはファイバーチャネル・プロトコル（FCP）に従って通信する。このように、ノード１１６、１１８上のオペレーティング・システムから見ると、データ記憶装置１２８、１３０は、オペレーティング・システムにローカルに取り付けられているように見えることができる。このようにして、異なるノード１１６、１１８などが、抽象的ファイルを明示的に要求するのではなく、オペレーティング・システムを通じて、データ・ブロックにアクセスしうる。
【００１６】
例示的実施形態１００は等しい数のネットワークおよびデータ・モジュールを示しているが、他の実施形態は異なる数のこれらのモジュールを有していてもよいことを理解しておくべきである。たとえば、ネットワーク・モジュールとデータ・モジュールの間の一対一対応をもたないクラスターにおいて相互接続された複数のネットワーク・モジュールおよびデータ・モジュールがあってもよい。すなわち、異なるノードが異なる数のネットワークおよびデータ・モジュールを有することができ、同じノードがデータ・モジュールとは異なる数のネットワーク・モジュールをもつことができる。
【００１７】
さらに、ホスト装置１０８、１１０は、ネットワーク接続１１２、１１４を通じて、クラスター中のノード１１６、１１８とネットワーク接続されることができる。例として、クラスターにネットワーク接続されるそれぞれのホスト装置１０８、１１０はクラスター中のノード１１６、１１８のサービス（たとえばデータ・パケットの形の情報の交換）を要求してもよく、ノード１１６、１１８は、要求されたサービスの結果をホスト装置１０８、１１０に返すことができる。ある実施形態では、ホスト装置１０８、１１０は、データ記憶システム１０２、１０４内のノード（たとえばネットワーク・ホスト）１１６、１１８に存在するネットワーク・モジュール１２０、１２２と情報を交換することができる。
【００１８】
ある実施形態では、データ記憶装置１２８、１３０はボリューム１３２を有する。ボリュームは、情報の記憶を、たとえばデータのためのファイル・システムとしてディスク・ドライブまたはディスク・アレイまたは他のストレージ（たとえばフラッシュ）上に実装したものである。ボリュームは、たとえばディスクの一部、ディスクの集合体、または複数のディスクの一部にまたがることができ、典型的には、記憶システムにおけるディスク・スペース上のファイル記憶の全体的な論理的な位置を定義することができる。ある実施形態では、ボリュームは、記憶されているデータを、ボリューム内で階層的なディレクトリー構造で存在する一つまたは複数のファイルとして有することができる。
【００１９】
ボリュームは典型的には、特定の記憶システムに関連付けられていてもよいフォーマットで構成され、それぞれのボリューム・フォーマットは典型的にはそれらのボリュームに機能を提供する、たとえば複数のボリュームがクラスターを形成する能力を提供する特徴を有する。たとえば、第一の記憶システムはそのボリュームのために第一のフォーマットを利用してもよく、第二の記憶システムはそのボリュームのために第二のフォーマットを利用してもよい。
【００２０】
例示的環境１００において、ホスト装置１０８、１１０は、ボリューム１３２からのデータを記憶および取得するためにデータ記憶システム１０２、１０４を利用することができる。この実施形態では、ホスト装置１０８は、データ・パケットを、データ記憶システム１０２内のノード１１６内のネットワーク・モジュール１２０に送ることができる。ノード１１６は該データをデータ・モジュール１２４を使ってデータ記憶装置１２８に転送することができ、データ記憶装置１２８はボリューム１３２Aを有する。このようにして、この例では、ホスト装置は、ネットワーク接続１１２によって接続されたデータ記憶システム１０２を使って、データを記憶するおよび／または取り出すためにストレージ・ボリューム１３２Aにアクセスすることができる。さらに、この実施形態において、ホスト装置１１０は、（たとえばデータ記憶システム１０２からリモートであってもよい）データ記憶システム１０４内のホスト１１８内のネットワーク・モジュール１２２とデータを交換することができる。ホスト１１８は、データ・モジュール１２６を使ってデータ記憶装置１３０にデータを転送することができ、それによりデータ記憶装置１３０に関連付けられたボリューム１３２Bにアクセスすることができる。
【００２１】
自動スイッチオーバー実装がクラスタリングされたネットワーク環境１００内で実装されうることが理解されうる。一例では、ノード１１６（たとえば第一のストレージ・コントローラ）がクラスターを横断して（たとえば、クラスター・ファブリック１０６または別のネットワークを通じて）ノード１１８（たとえば第二のストレージ・コントローラ）の障害を、リモート直接メモリ・アクセス（RDMA）読み取り動作、ノード１１８のディスク・メールボックスからの読み取り動作および／またはノード１１８のサービス・プロセッサによって送られたサービス・プロセッサ・トラップを通じて得られるハートビート情報を使って、検出しうる。このようにして、ノード１１６は、スイッチオーバー動作を自動的に実装しうる。自動スイッチオーバー実装は、いかなる型のコンピューティング環境についておよび／またはいかなる型のコンピューティング環境の間で実装されてもよく、物理的な装置（たとえばノード１１６、ノード１１８など）および／またはクラウド・コンピューティング環境（たとえば、クラスタリングされたネットワーク環境１００に対してリモート）の間で移転可能であってもよいことは理解されうる。
【００２２】
図２は、本稿に記載される技法および／またはシステムの一つまたは複数を実装しうるコンポーネントの実施形態のさらなる詳細を与えるデータ記憶システム２００（たとえば図１における１０２、１０４）の例示的な例である。例示的なデータ記憶システム２００はノード２０２（たとえば図１におけるホスト・ノード１１６、１１８）およびデータ記憶装置２３４（たとえば図１におけるデータ記憶装置１２８、１３０）を有する。ノード２０２は、ストレージ・サーバーとして動作するよう特に構成された、たとえば汎用コンピュータまたは他の何らかのコンピューティング装置であってもよい。データ記憶装置２３４に記憶されているファイルおよび／または他のデータへのアクセスを提供するために、ホスト装置２０５（たとえば図１における１０８、１１０）が、たとえばネットワーク２１６を通じてノード２０２に接続されることができる。一例では、ノード２０２は、ホスト装置２０５のようなクライアント装置に、データ記憶装置２３４内に記憶されているデータへのアクセスを提供するストレージ・コントローラを有する。
【００２３】
データ記憶装置２３４は、ディスク・アレイ２１８、２２０、２２２のディスク２２４、２２６、２２８のような大容量記憶装置を有することができる。本稿に記載される技法およびシステムがこの例示的実施形態によって限定されないことは理解されるであろう。たとえば、ディスク２２４、２２６、２２８は、いかなる型の大容量記憶装置を有していてもよく、磁気ディスク・ドライブ、フラッシュメモリおよびたとえばデータ（D）および／またはパリティー（P）情報を含む情報を記憶するよう適応された他の任意の同様の媒体を含むがそれに限られない。
【００２４】
ノード２０２は、一つまたは複数のプロセッサ２０４、メモリ２０６、ネットワーク・アダプター２１０、クラスター・アクセス・アダプター２１２およびストレージ・アダプター２１４を有する。これらはシステム・バス２４２によって相互接続される。記憶システム２００は、ノード２０２のメモリ２０６にインストールされたオペレーティング・システム２０８をも含む。これはたとえば、アレイにおける障害を起こしたディスクのデータの再構成プロセスを最適化するための独立な（または安価な）ディスクの冗長アレイ（RAID:  Redundant  Array  of  Independent  (またはInexpensive)  Disks）最適化技法を実装することができる。
【００２５】
オペレーティング・システム２０８は、データ記憶システムのための通信およびクラスタリングされたネットワーク内にあってもよくたとえばクラスター・ファブリック２１５（たとえば図１における１０６）に取り付けられていてもよい他のデータ記憶システムの間の通信を、管理することもできる。こうして、ネットワーク・ストレージ・コントローラのようなノード２０２は、ホスト装置要求に従ってデータ記憶装置２３４（たとえばまたは追加的なクラスタリングされた装置）上のデータを管理するためのホスト装置要求に応答することができる。オペレーティング・システム２０８はしばしば、データ記憶システム２００上に一つまたは複数のファイル・システムを確立することができる。ここで、ファイル・システムは、たとえばファイルおよびディレクトリーの恒久的な階層式の名前空間を実装するソフトウェア・コードおよびデータ構造を含むことができる。一例として、クラスタリングされたネットワーク・システムに新たなデータ記憶装置（図示せず）が追加されるとき、オペレーティング・システム２０８は、既存のディレクトリー・ツリーのどこに、該新たなデータ記憶装置に関連付けられた新たなファイルが記憶されるべきかを通知される。これはしばしば、ファイル・システムを「マウントする」と称される。
【００２６】
例示的なデータ記憶システム２００では、メモリ２０６は、関係したソフトウェア・アプリケーション・コードおよびデータ構造を記憶するためにプロセッサ２０４およびアダプター２１０、２１２、２１４によってアドレッシング可能な記憶位置を含むことができる。プロセッサ２０４およびアダプター２１０、２１２、２１４はたとえば、該ソフトウェア・コードを実行し、該データ構造を操作するよう構成された処理要素および／または論理回路を含んでいてもよい。オペレーティング・システム２０８の諸部分が典型的にはメモリ２０６に常駐し、処理要素によって実行され、オペレーティング・システム２０８は、中でも、記憶システムによって実装されるファイル・サービスをサポートする記憶動作を呼び出すことによって、記憶システムを機能的に組織化する。本稿に記載される技法に関するアプリケーション命令を記憶および／または実行するために、さまざまなコンピュータ可読媒体を含む他の処理およびメモリ機構が使用されうることは当業者には明白であろう。たとえば、オペレーティング・システムは、仮想マシンのプロビジョニングにおいて支援するために一つまたは複数の制御ファイル（図示せず）を利用することもできる。
【００２７】
ネットワーク・アダプター２１０は、コンピュータ・ネットワーク２１６を通じてデータ記憶システム２００をホスト装置２０５に接続するために必要とされる機械的、電気的および信号伝達用の回路を含む。ネットワーク２１６は、中でも、ポイントツーポイント接続または共有される媒体、たとえばローカル・エリア・ネットワークを含んでいてもよい。ホスト装置２０５（たとえば図１における１０８、１１０）は、アプリケーションを実行するよう構成された汎用コンピュータであってもよい。上記のように、ホスト装置２０５は、情報送達のクライアント／ホスト・モデルに従って、データ記憶システム２００と対話してもよい。
【００２８】
ストレージ・アダプター２１４は、ホスト装置２０５によって要求された情報にアクセスする（たとえば、ネットワーク・ストレージ・コントローラによって管理される記憶装置上のデータにアクセスする）ために、ノード２０２上で実行されるオペレーティング・システム２０８と協働する。該情報は、書き込み可能媒体、たとえば磁気ディスク・ドライブ、フラッシュメモリおよび／または情報を記憶するよう適応された他の任意の同様の媒体のいかなる型の取り付けられたアレイに記憶されていてもよい。例示的なデータ記憶システム２００では、情報は、ディスク２２４、２２６、２２８上のデータ・ブロックにおいて記憶されることができる。ストレージ・アダプター２１４は、I/O相互接続装置、たとえばストレージ・エリア・ネットワーク（SAN）プロトコル（たとえば小型コンピュータ・システム・インターフェース（SCSI）、iSCSI、ハイパーSCSI、ファイバーチャネル・プロトコル（FCP））を通じてディスクに結合する入出力（I/O）インターフェース回路に記憶されることができる。情報は、ストレージ・アダプター２１４によって取り出され、必要であれば、システム・バス２４２を通じてネットワーク・アダプター２１０（および／またはクラスター内の他のノードに送る場合にはクラスター・アクセス・アダプター２１２）に転送される前に、一つまたは複数のプロセッサ２０４（またはストレージ・アダプター２１４自身によって）によって処理される。ここで、情報はデータ・パケットに整形され、ネットワーク接続２１６を通じてホスト装置２０５に返される（および／またはクラスター・ファブリック２１５を通じてクラスターに取り付けられた別のノードに返される）。
【００２９】
ある実施形態では、アレイ２１８、２２０、２２２上の情報の記憶は、ディスク・スペースの全体的な論理的配置を定義するディスク２２４、２２６、２２８のクラスターから構成される一つまたは複数のストレージ「ボリューム」２３０、２３２として実装されることができる。一つまたは複数のボリュームを含むディスク２２４、２２６、２２８は典型的にはRAIDの一つまたは複数のグループとして編成される。例として、ボリューム２３０は、ディスク２２４および２２６のクラスターを含むディスク・アレイ２１８および２２０の集合体を有する。
【００３０】
ある実施形態では、ディスク２２４、２２６、２２８へのアクセスを容易にするために、オペレーティング・システム２０８は、情報をディスク上のディレクトリーおよびファイルの階層的な構造として論理的に編成するファイル・システム（たとえばどこにでも書けるファイル・システム）を実装してもよい。この実施形態では、それぞれのファイルは、情報を記憶するよう構成された一組のディスク・ブロックとして実装されてもよく、一方、ディレクトリーは、他のファイルおよびディレクトリーについての情報が記憶されている特別なフォーマットのファイルとして実装されてもよい。
【００３１】
このデータ記憶システム２００内の基礎になる物理的な構成が何であれ、データは物理的および／または仮想的なボリューム内のファイルとして記憶されることができ、それらのボリュームはファイル・システム識別子のようなそれぞれのボリューム識別子と関連付けられることができる。識別子は一例では32ビットの長さであることができる。
【００３２】
物理的なボリュームは、そのアドレス、アドレッシング可能な空間、位置などは変化しない物理的な記憶装置（たとえば独立な（または安価な）ディスクの冗長アレイ（RAIDシステム））の少なくとも一部に対応し、たとえば一つまたは複数のデータ記憶装置２３４の少なくとも一部である。典型的には、物理的なボリュームの位置は、それにアクセスするために使われるアドレス（の範囲）が一般に一定のままであるという意味において、変化しない。
【００３３】
対照的に、仮想ボリュームは、異なる物理的な記憶装置の別個の部分の集合体に記憶される。仮想ボリュームは異なる物理的な記憶装置位置の異なる利用可能な部分、たとえばディスク２２４、２２６および／または２２８のそれぞれからのいくらかの利用可能なスペースの集まりであってもよい。仮想ボリュームはどの一つの特定の記憶装置にも「結びつけられて」いないため、仮想ボリュームは、抽象化または仮想化の層を含むと言うことができることが理解されるであろう。このため仮想ボリュームはサイズ変更されるおよび／またはいくつかの点で柔軟であることが許容される。
【００３４】
さらに、仮想ボリュームは、一つまたは複数の論理ユニット番号（LUN:  logical  unit  number）２３８、ディレクトリー２３６、Q木２３５およびファイル２４０を含むことができる。中でも、これらの特徴、より特定的にはLUNSは、データが記憶される別個のメモリ位置がたとえば同定され、データ記憶ユニットとしてグループ化されることを許容する。よって、LUN  ２３８は、仮想ディスクまたはドライブを構成すると特徴付けられてもよく、それに基づき、当該仮想ボリューム内のデータは当該集合体内に記憶される。たとえば、LUNはしばしば仮想ドライブと称され、よって、実際にはボリュームのさまざまな部分に記憶されたデータ・ブロックを有しつつ、汎用コンピュータからのハードドライブをエミュレートする。
【００３５】
ある実施形態では、一つまたは複数のデータ記憶装置２３４は一つまたは複数の物理的なポートをもつことができる。各物理的なポートは、ターゲット・アドレス（たとえばSCSIターゲット・アドレス）を割り当てられることができる。データ記憶装置上に記憶されたそれぞれのボリュームを表現するために、データ記憶装置上のターゲット・アドレスが一つまたは複数のLUN  ２３８を同定するために使われることができる。こうして、たとえば、ノード２０２がボリューム２３０、２３２にストレージ・アダプター２１４を通じて接続するとき、ノード２０２と当該ボリュームの基礎になる前記一つまたは複数のLUN  ２３８との間の接続が生成される。
【００３６】
ある実施形態では、それぞれのターゲット・アドレスは複数のLUNを同定することができる。それにより、ターゲット・アドレスは、複数のボリュームを表わすことができる。ストレージ・アダプター２１４内の回路および／またはソフトウェアとしてまたはメモリ２０６に存在し、プロセッサ２０４によって実行される実行可能なコードとして実装されることのできるI/Oインターフェースは、たとえば、LUN  ２３８を同定する一つまたは複数のアドレスを使うことによって、ボリューム２３０に接続することができる。
【００３７】
自動スイッチオーバー実装は、データ記憶システム２００について実装されてもよいことが理解されうる。一例では、ノード２０２（たとえば第一のストレージ・コントローラ）がクラスターを横断して（たとえば、クラスター・ファブリック２１５または別のネットワークを通じて）第二のノード（たとえば第二のストレージ・コントローラ）の障害を、リモート直接メモリ・アクセス（RDMA）読み取り動作、第二のノードのディスク・メールボックスからの読み取り動作および／または第二のノードのサービス・プロセッサによって送られたサービス・プロセッサ・トラップを通じて得られるハートビート情報を利用して、検出しうる。自動スイッチオーバー実装は、いかなる型のコンピューティング環境についておよび／またはいかなる型のコンピューティング環境の間で実装されてもよく、物理的な装置（たとえばノード２０２、ホスト２０５など）および／またはクラウド・コンピューティング環境（たとえば、ノード２０２および／またはホスト２０５に対してリモート）の間で転送可能であってもよいことは理解されうる。
【００３８】
自動スイッチオーバー実装のある実施形態が図３の例示的方法３００によって例解される。第一のストレージ・クラスターは、クライアントに、第一の記憶装置および／または他の記憶装置内に記憶されているデータへの一次アクセスを提供するよう構成された第一のストレージ・コントローラを有していてもよい。一例では、第一のストレージ・クラスターは単一コントローラ・クラスター構成を有していて、第一のストレージ・クラスターは単に前記第一のストレージ・コントローラを有する（だがたとえばローカルなフェイルオーバーのための第一のストレージ・クラスターと対にされたローカルな高い可用性のコントローラはない）のでもよい。第二のストレージ・クラスターは、第一のストレージ・コントローラのための災害復旧パートナーとして構成された第二のストレージ・コントローラを有していてもよい。たとえば、第一のストレージ・コントローラの障害（たとえば第一のストレージ・クラスターにおける災害）を検出すると、第二のストレージ・コントローラは、第一のストレージ・コントローラによって所有されていた記憶装置の所有権を獲得するよう、スイッチオーバー動作を実行してもよい。それにより、第二のストレージ・コントローラは、スイッチオーバー動作に基づいて今や第二のストレージ・コントローラによって所有されているそのような記憶装置へのフェイルオーバー・アクセスをクライアントに提供しうる。第一のストレージ・コントローラの復旧に際して、記憶装置の所有権をもとの第一のストレージ・コントローラに返し、第一のストレージ・コントローラがそのような記憶装置への一次アクセスをクライアントに提供できるようにするスイッチバック動作が実行されてもよい。一例では、第二のストレージ・クラスターは、単一コントローラ・クラスター構成を有していて、第二のストレージ・クラスターは単に前記第二のストレージ・コントローラを有する（たとえばローカルな高い可用性のコントローラ・パートナーはない）のでもよい。
【００３９】
本願で提供するところでは、生き残っているストレージ・コントローラが、クラスターを横断して、リモートのストレージ・コントローラの障害を効率的に検出しうる（たとえば第二のストレージ・コントローラが第一のストレージ・コントローラの障害を検出）。それにより、クライアントの乱されない動作のメトリックを満足する仕方で（たとえば記憶装置内のデータへのクライアント・アクセスの中断が二分未満）、自動スイッチオーバーが実行されうる。
【００４０】
３０２において、方法３００が始まる。３０４では、第一のストレージ・コントローラから第二のストレージ・コントローラへのハートビート情報交換のためにメモリ・セクション（第一のストレージ・コントローラに関連付けられたメモリの一部）が指定されてもよい。ハートビート情報交換は、第一のストレージ・コントローラの動作上の健康情報を第二のストレージ・コントローラに伝えるために、第一のストレージ・コントローラによって使われてもよい。たとえば、第一のストレージ・コントローラは、第一のストレージ・コントローラの進行を示すために時間を追って一連のシーケンス番号を記憶してもよい（たとえば、一連のシーケンス番号が閾値時間以内に更新されなかった場合、第二のストレージ・コントローラは第一のストレージ・コントローラが障害を起こした可能性があると判別してもよい。障害はたとえば、ソフトウェア・パニック、ストレージ・コントローラ停止、ストレージ・コントローラ再起動および／または正常な動作状態から障害状態への第一のストレージ・コントローラの他の状態遷移）。このようにして、ハートビート状態情報が前記メモリ・セクションを通じて第二のストレージ・コントローラに伝達されうる。
【００４１】
３０６では、第二のストレージ・コントローラは、第一のストレージ・コントローラの現在のハートビート状態を得るために前記メモリ・セクションにアクセスするためのリモート直接メモリ・アクセス（RDMA）読み取り動作を実行してもよい。現在のハートビート状態は、第一のストレージ・コントローラの進行を示す新しいシーケンス番号、第一のストレージ・コントローラによる進行の欠如を示す以前のシーケンス番号、正常動作状態の指示、状態遷移の指示、ソフトウェア・パニックの指示、ストレージ・コントローラ停止の指示、ストレージ・コントローラ再起動の指示などを含みうる。
【００４２】
３０８では、現在のハートビート状態が第一のストレージ・コントローラの障害を示すことに応答して、自動スイッチオーバー動作が実行されてもよい。たとえば、第二のストレージ・コントローラが、第一のストレージ・コントローラによって所有されている記憶装置の所有権を獲得するスイッチオーバー動作を自動的にトリガーしてもよい。このようにして、第二のストレージ・コントローラは、クライアントに、記憶装置へのフェイルオーバー・アクセスを提供でき、それにより、クライアントは、データへの乱されないアクセスを提供される。
【００４３】
一例では、自動スイッチオーバー動作をトリガーする前に、一つまたは複数の検査が実行されてもよい。たとえば、通信信号が第二のストレージ・コントローラから第一のストレージ・クラスターに送られてもよい。障害が偽トリガーであるかどうかを判定するために、通信信号への応答性が評価されてもよい（たとえば、第一のストレージ・クラスターは、第一のストレージ・コントローラが動作状態にあるとの指示をもって応答してもよい）。障害が偽トリガーであれば、自動スイッチオーバーは実行されなくてもよい。障害が偽トリガーでなければ、自動スイッチオーバー動作が実行されてもよく、および／または他の検査が実行されてもよい。たとえば、障害が偽トリガーではないとの判定に応答して、第一のストレージ・クラスターのストレージおよび／またはメイン・コントローラ（たとえばメイン・ボックス）が利用可能であるかどうかについて判定がなされてもよい。該ストレージおよび／またはメイン・コントローラが利用可能でないことに応答して、自動スイッチオーバー動作の代わりに手動のスイッチオーバー動作が実行されてもよい。ストレージおよび／またはメイン・コントローラが利用可能であることに応答して、自動スイッチオーバー動作が実行されてもよく、および／または他の検査が実行されてもよい。たとえば、第一のストレージ・コントローラと第二のストレージ・コントローラとの間の書き込みキャッシング同期状態が評価されてもよい（たとえば、第一のストレージ・コントローラは書き込み要求のようなクライアントI/O動作に関係する情報を、ディスクにフラッシュする前に一時的に書き込み要求キャッシュに記憶することがあり、それは第二のストレージ・コントローラにミラーされてもよい。よって、まだディスクにフラッシュされていない最新のキャッシュされたクライアントI/O動作が、スイッチオーバーの場合に第二のストレージ・コントローラによって考慮に入れられる）。書き込みキャッシング同期状態は、第一のストレージ・コントローラの第一のディスク・メールボックスから読まれてもよい（たとえば、第二のストレージ・コントローラではなく第一のストレージ・コントローラによって所有されている、第一のディスク・メールボックスをホストする記憶装置に対して、生の読み取りが実行されてもよい）。書き込みキャッシング同期状態が同期している状態を示すことに応答して、自動スイッチオーバーが実行されてもよい。書き込みキャッシング同期状態が同期していない状態を示すことに応答して、自動スイッチオーバーが実行されなくてもよい。
【００４４】
一例では、ハートビート状態情報は、第二のストレージ・コントローラではなく第一のストレージ・コントローラによって所有されている前記記憶装置に対応する第一のディスク・メールボックスからも得られてもよい。第二のストレージ・コントローラが第一のディスク・メールボックスをホストする記憶装置を所有していなくても、第二のストレージ・コントローラは、ハートビート状態情報を得るために、第一のディスク・メールボックスに対して生の読み取り動作を実行してもよい。たとえば、第二の現在のハートビート状態が第一のディスク・メールボックスから読まれてもよい。現在のハートビート状態および／または第二の現在のハートビート状態が障害を示すことに応答して、自動スイッチオーバー動作が実装されてもよい（たとえば、第二の現在のハートビート状態が、第一のストレージ・コントローラの電力喪失障害を示してもよい）。たとえば、第二の現在のハートビート状態が障害を示すことからある閾値タイムアウト後に、自動スイッチオーバー動作が開始されてもよい。３１０において、方法３００は終了する。
【００４５】
図４は、自動スイッチオーバー実装のためのシステム４００の例を示している。第一のストレージ・クラスター４０６は第一のストレージ・コントローラ４０２を有していてもよく、第二のストレージ・クラスター４１４は第二のストレージ・コントローラ４１０を有していてもよい。第一のストレージ・コントローラ４０２および第二のストレージ・コントローラ４１０は災害復旧パートナーとして構成されてもよい。第一のストレージ・クラスター４０６および第二のストレージ・クラスター４１４はネットワーク４０８によって接続されていてもよい。第一のストレージ・コントローラ４０２は、第一のストレージ・コントローラ４０２の進行を示す一連のシーケンス番号、状態遷移情報、動作状態情報などのようなハートビート状態情報を、第一のメモリ・セクション４０４内に記憶してもよい。第二のストレージ・コントローラ４１０は、第一のストレージ・コントローラ４０２の現在のハートビート状態情報を得るために、第一のメモリ・セクション４０４に対してリモート直接メモリ・アクセス（RDMA）読み取り動作を実行してもよい。現在のハートビート状態情報が第一のストレージ・コントローラ４０２の障害を示すことに応答して、第二のストレージ・コントローラ４１０は、障害前にはそれまで第一のストレージ・コントローラ４０２によって処理されていたクライアントI/O要求を処理することを引き継ぐスイッチオーバー動作を自動的に実装してもよい。
【００４６】
第二のストレージ・コントローラ４１０は、第二のストレージ・コントローラ４１０の進行を示す一連のシーケンス番号、状態遷移情報、動作状態情報などのようなハートビート状態情報を、第二のメモリ・セクション４１２内に記憶してもよい。第一のストレージ・コントローラ４０２は、第二のストレージ・コントローラ４１０の現在のハートビート状態情報を得るために、第二のメモリ・セクション４１２に対してリモート直接メモリ・アクセス（RDMA）読み取り動作を実行してもよい。現在のハートビート状態情報が第二のストレージ・コントローラ４１０の障害を示すことに応答して、第一のストレージ・コントローラ４０２は、障害前にはそれまで第二のストレージ・コントローラ４１０によって処理されていたクライアントI/O要求を処理することを引き継ぐスイッチオーバー動作を自動的に実装してもよい。
【００４７】
図５は、自動スイッチオーバー実装のためのシステム５００の例を示している。第一のストレージ・クラスター５０６は第一のストレージ・コントローラ５０２を有していてもよく、第二のストレージ・クラスター５１４は第二のストレージ・コントローラ５１０を有していてもよい。第一のストレージ・コントローラ５０２および第二のストレージ・コントローラ５１０は災害復旧パートナーとして構成されてもよい。第一のストレージ・クラスター５０６および第二のストレージ・クラスター５１４はネットワーク５０８によって接続されていてもよい。
【００４８】
第二のストレージ・コントローラ５１０にハートビート状態情報を伝達する一例において、第一のストレージ・コントローラ５０２は、第一のストレージ・コントローラ５０２の進行を示す一連のシーケンス番号、状態遷移情報、動作状態情報などのようなハートビート状態情報を、第一のメモリ・セクション５０４内に記憶してもよい。第二のストレージ・コントローラ５１０は、第一のストレージ・コントローラ５０２の現在のハートビート状態情報を得るために、第一のメモリ・セクション５０４に対してリモート直接メモリ・アクセス（RDMA）読み取り動作を実行してもよい。第二のストレージ・コントローラ５１０にハートビート状態情報を伝達する別の例において、第一のストレージ・コントローラ５０２は、第二のハートビート状態情報を、第一のディスク・メールボックス５１６（たとえば、第一のストレージ・コントローラ５０２によって所有されている記憶装置であって、該記憶装置の所有者でない第二のストレージ・コントローラによって、生の読み取り動作を通じてアクセス可能であるもの）内に記憶してもよい。第二のストレージ・コントローラ５１０は、第一のストレージ・コントローラ５０２の第二の現在のハートビート状態情報を得るために、第一のディスク・メールボックス５１６に対して生の読み取り動作を実行してもよい。このようにして、第一のメモリ・セクション５０４および第一のディスク・メールボックス５１６の両方が、第一のストレージ・コントローラ５０２の健康情報を伝達するために使われる。現在のハートビート状態情報および／または第二の現在のハートビート状態情報が第一のストレージ・コントローラ５０２の障害を示すことに応答して、第二のストレージ・コントローラ５１０は、障害前にはそれまで第一のストレージ・コントローラ５０２によって処理されていたクライアントI/O要求を処理することを引き継ぐスイッチオーバー動作を自動的に実装してもよい。
【００４９】
第一のストレージ・コントローラ５０２にハートビート状態情報を伝達する一例において、第二のストレージ・コントローラ５１０は、第二のストレージ・コントローラ５１０の進行を示す一連のシーケンス番号、状態遷移情報、動作状態情報などのようなハートビート状態情報を、第二のメモリ・セクション５１２内に記憶してもよい。第一のストレージ・コントローラ５０２は、第二のストレージ・コントローラ５１０の現在のハートビート状態情報を得るために、第二のメモリ・セクション５１２に対してリモート直接メモリ・アクセス（RDMA）読み取り動作を実行してもよい。第一のストレージ・コントローラ５０２にハートビート状態情報を伝達する別の例において、第二のストレージ・コントローラ５１０は、第二のハートビート状態情報を、第二のディスク・メールボックス５２０内に記憶してもよい。第一のストレージ・コントローラ５０２は、第二のストレージ・コントローラ５１０の第二の現在のハートビート状態情報を得るために、第二のディスク・メールボックス５２０に対して生の読み取り動作を実行してもよい。このようにして、第二のメモリ・セクション５１２および第二のディスク・メールボックス５２０の両方が、第二のストレージ・コントローラ５１０の健康情報を伝達するために使われる。現在のハートビート状態情報および／または第二の現在のハートビート状態情報が第二のストレージ・コントローラ５１０の障害を示すことに応答して、第一のストレージ・コントローラ５０２は、障害前にはそれまで第二のストレージ・コントローラ５１０によって処理されていたクライアントI/O要求を処理することを引き継ぐスイッチオーバー動作を自動的に実装してもよい。
【００５０】
自動スイッチオーバー実装のある実施形態が図６の例示的方法６００によって例解される。第一のストレージ・クラスターは、クライアントに、一つまたは複数の記憶装置内に記憶されているデータへの一次アクセスを提供するよう構成された第一のストレージ・コントローラを有していてもよい。一例では、第一のストレージ・クラスターは単一コントローラ・クラスター構成を有していて、第一のストレージ・クラスターは単に前記第一のストレージ・コントローラを有していて、ローカルな高い可用性のパートナー・コントローラは有していないのでもよい。第二のストレージ・クラスターは、第一のストレージ・コントローラのための災害復旧パートナーとして構成された第二のストレージ・コントローラを有していてもよい。たとえば、第一のストレージ・コントローラの障害を検出すると、第二のストレージ・コントローラは、第一のストレージ・コントローラによって所有されていた記憶装置の所有権を獲得するよう、スイッチオーバー動作を実行してもよい。それにより、第二のストレージ・コントローラは、スイッチオーバー動作に基づいて今や第二のストレージ・コントローラによって所有されているそのような記憶装置へのフェイルオーバー・アクセスをクライアントに提供しうる。一例では、第二のストレージ・クラスターは、単一コントローラ・クラスター構成を有していて、第二のストレージ・クラスターは単に前記第二のストレージ・コントローラを有していて、ローカルな高い可用性のパートナー・コントローラを有していないのでもよい。本願で提供するところでは、生き残っているストレージ・コントローラが、クラスターを横断して、リモートのストレージ・コントローラの障害を効率的に検出しうる。それにより、クライアントの乱されない動作のメトリックを満足する仕方で自動スイッチオーバーが実行されうる。
【００５１】
６０２において、方法６００が始まる。６０４では、第一のストレージ・コントローラから第二のストレージ・コントローラへのハートビート情報交換の使用のために第一のディスク・メールボックスが指定されてもよい。たとえば、第一のストレージ・コントローラは、第一のストレージ・コントローラによる進行を示す一連のシーケンス番号、状態遷移（たとえば、ソフトウェア・パニック、ストレージ・コントローラ停止、ストレージ・コントローラ再起動などへの遷移）、正常動作状態の指示などを、第一のディスク・メールボックス内に記憶してもよい。第一のディスク・メールボックスは、第二のストレージ・コントローラではなく、第一のストレージ・コントローラによって所有されていてもよい。第二のストレージ・コントローラは第一のディスク・メールボックスを所有していないが、第二のストレージ・コントローラは、６０６において、第一のディスク・メールボックスから現在のハートビート状態を得るために、読み取り動作（たとえば生の読み取り動作）を実行してもよい。
【００５２】
６０８では、現在のハートビート状態が第一のストレージ・コントローラの障害を示すことに応答して、自動スイッチオーバー動作が実行されてもよい。たとえば、第二のストレージ・コントローラが、第一のストレージ・コントローラによって所有されている記憶装置の所有権を獲得するスイッチオーバー動作を自動的にトリガーしてもよい。このようにして、第二のストレージ・コントローラは、クライアントに、記憶装置へのフェイルオーバー・アクセスを提供でき、それにより、クライアントは、データへの乱されないアクセスを提供される。
【００５３】
一例では、自動スイッチオーバー動作をトリガーする前に、一つまたは複数の検査が実行されてもよい。たとえば、通信信号が第二のストレージ・コントローラから第一のストレージ・クラスターに送られてもよい。障害が偽トリガーであるかどうかを判定するために、通信信号への応答性が評価されてもよい（たとえば、第一のストレージ・クラスターは、第一のストレージ・コントローラが動作状態にあるとの指示をもって応答してもよい）。障害が偽トリガーであれば、自動スイッチオーバーは実行されなくてもよい。障害が偽トリガーでなければ、自動スイッチオーバー動作が実行されてもよく、および／または他の検査が実行されてもよい。たとえば、障害が偽トリガーではないとの判定に応答して、第一のストレージ・クラスターのストレージおよび／またはメイン・コントローラ（たとえばメイン・ボックス）が利用可能であるかどうかについて判定がなされてもよい。該ストレージおよび／またはメイン・コントローラが利用可能でないことに応答して、自動スイッチオーバー動作の代わりに手動のスイッチオーバー動作が実行されてもよい。ストレージおよび／またはメイン・コントローラが利用可能であることに応答して、自動スイッチオーバー動作が実行されてもよく、および／または他の検査が実行されてもよい。たとえば、第一のストレージ・コントローラと第二のストレージ・コントローラとの間の書き込みキャッシング同期状態が評価されてもよい。書き込みキャッシング同期状態は、第一のストレージ・コントローラの第一のディスク・メールボックスから読まれてもよい（たとえば、第二のストレージ・コントローラではなく第一のストレージ・コントローラによって所有されている、第一のディスク・メールボックスをホストする記憶装置に対して、生の読み取りが実行されてもよい）。書き込みキャッシング同期状態が第一のストレージ・コントローラの第一の書き込みキャッシュと第二のストレージ・コントローラの第二の書き込みキャッシュとの間の同期している状態を示すことに応答して、自動スイッチオーバーが実行されてもよい。書き込みキャッシング同期状態が同期していない状態を示すことに応答して、自動スイッチオーバーが実行されなくてもよい。
【００５４】
一例では、ハートビート状態情報は、第一のストレージ・コントローラのあるメモリ・セクションからも得られてもよい。たとえば、第二のストレージ・コントローラは、第一のストレージ・コントローラの第二の現在のハートビート状態を得るために、前記メモリ・セクションに対してリモート直接メモリ・アクセス（RDMA）読み取り動作を実行してもよい。現在のハートビート状態および／または第二の現在のハートビート状態が障害を示すことに応答して、自動スイッチオーバー動作が実装されてもよい。６１０において、方法６００は終了する。
【００５５】
図７は、自動スイッチオーバー実装のためのシステム７００の例を示している。第一のストレージ・クラスター７０６は第一のストレージ・コントローラ７０２を有していてもよく、第二のストレージ・クラスター７１４は第二のストレージ・コントローラ７１０を有していてもよい。第一のストレージ・コントローラ７０２および第二のストレージ・コントローラ７１０は災害復旧パートナーとして構成されてもよい。第一のストレージ・クラスター７０６および第二のストレージ・クラスター７１４はネットワーク７０８によって接続されていてもよい。
【００５６】
第一のストレージ・コントローラ７０２は、第一のストレージ・コントローラ７０２の進行を示す一連のシーケンス番号、状態遷移情報、動作状態情報などのようなハートビート状態情報を、第一のディスク・メールボックス７０４（たとえば、第一のストレージ・コントローラ７０２によって所有されている記憶装置であって、該記憶装置の所有者でない第二のストレージ・コントローラによって、生の読み取り動作を通じてアクセス可能であるもの）内に記憶してもよい。第二のストレージ・クラスターは、第一のストレージ・コントローラのための災害復旧パートナーとして構成された第二のストレージ・コントローラを有していてもよい。たとえば、第一のストレージ・コントローラの障害を検出したら、第二のストレージ・コントローラは、第一のストレージ・コントローラによって所有されていた記憶装置の所有権を獲得するよう、スイッチオーバー動作を実行してもよい。それにより、第二のストレージ・コントローラは、スイッチオーバー動作に基づいて今や第二のストレージ・コントローラによって所有されているそのような記憶装置へのフェイルオーバー・アクセスをクライアントに提供しうる。一例では、第二のストレージ・クラスターは、単一コントローラ・クラスター構成を有していて、第二のストレージ・クラスターは単に前記第二のストレージ・コントローラを有し、ローカルな高い可用性のコントローラ・パートナーを有さない。第二のストレージ・コントローラは第二のストレージ・プロセッサ（たとえば、オペレーティング・システム、第二のストレージ・コントローラの健康状態をモニタリングするために使われる機能および／または第二のストレージ・コントローラが電力を失った場合の電力のためのバッテリーを有するマイクロコントローラ）を有していてもよい。本願で提供するところでは、生き残っているストレージ・コントローラが、クラスターを横断して、リモートのストレージ・コントローラの障害を効率的に検出しうる。それにより、クライアントの乱されない動作のメトリックを満足する仕方で、自動スイッチオーバーが実行されうる。
【００５７】
８０２において、方法８００が始まる。８０４では、第二のストレージ・コントローラ（たとえば、および／または第二のサービス・プロセッサ）のインターネット・プロトコル（IP）アドレスおよび／または他の通信情報（たとえばポート番号、共有される秘密などの認証情報など）が第一のストレージ・コントローラによって、たとえば第一のサービス・プロセッサにとってアクセス可能な位置に記憶されてもよい。８０６では、第一のストレージ・プロセッサは、第一のストレージ・コントローラの健康状態をモニタリングしてもよい。８０８では、第一のストレージ・コントローラの障害（たとえば電力喪失。第一のストレージ・プロセッサは予備電力のためのバッテリーを有することがあるので、これは第一のストレージ・プロセッサに影響しないことがある）を検出することに応答して、サービス・プロセッサ・トラップが第一のサービス・プロセッサによって前記IPアドレスおよび／またはポート番号に送られてもよい。一例では、サービス・プロセッサ・トラップは、第二のストレージ・コントローラによる認証のための認証情報を含んでいてもよい。サービス・プロセッサ・トラップは、スイッチオーバー前に第一のストレージ・コントローラを通じてクライアントにとってそれまでアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、第一のストレージ・コントローラから第二のストレージ・コントローラへの自動スイッチオーバー動作を開始するよう第二のストレージ・コントローラをトリガーしてもよい。８１０において、方法８００は終了する。
【００５８】
図９は、自動スイッチオーバー実装のためのシステム９００の例を示している。第一のストレージ・クラスター９０６は第一のストレージ・コントローラ９０２を有していてもよく、第二のストレージ・クラスター９１４は第二のストレージ・コントローラ９１０を有していてもよい。第一のストレージ・コントローラ９０２および第二のストレージ・コントローラ９１０は災害復旧パートナーとして構成されてもよい。第一のストレージ・クラスター９０６および第二のストレージ・クラスター９１４はネットワーク９０８によって接続されていてもよい。
【００５９】
第一のストレージ・コントローラ９０２は、第一のストレージ・コントローラ９０２の健康状態をモニタリングするよう構成された第一のサービス・プロセッサ９０４を有していてもよく、それにより、第一のサービス・プロセッサ９０４は第二のストレージ・コントローラ９１０および／または第二のサービス・プロセッサ９１２に、第一のストレージ・コントローラ９０２の障害についてアラートを発することができる。たとえば、第一のサービス・プロセッサ９０４は、第二のストレージ・コントローラ９１０および／または第二のサービス・プロセッサ９１２と通信するために使用されるIPアドレス、ポート番号および／または認証情報を記憶してもよい。第一のサービス・プロセッサ９０４が第一のストレージ・コントローラ９０２の障害、たとえば電力喪失を検出することに応答して、第一のサービス・プロセッサ９０４は第二のストレージ・コントローラ９１０および／または第二のサービス・プロセッサ９１２に、前記IPアドレス、ポート番号および／または認証情報を使って、サービス・プロセッサ・トラップを送ってもよい。サービス・プロセッサ・トラップは、スイッチオーバー前に第一のストレージ・コントローラ９０２を通じてクライアントにとってそれまでアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、第一のストレージ・コントローラ９０２から第二のストレージ・コントローラ９１０への自動スイッチオーバー動作を開始するよう第二のストレージ・コントローラ９１０をトリガーしてもよい。
【００６０】
第二のストレージ・コントローラ９１０は、第二のストレージ・コントローラ９１０の健康状態をモニタリングするよう構成された第二のサービス・プロセッサ９１２を有していてもよく、それにより、第二のサービス・プロセッサ９１２は第一のストレージ・コントローラ９０２および／または第一のサービス・プロセッサ９０４に、第二のストレージ・コントローラ９１０の障害についてアラートを発することができる。たとえば、第二のサービス・プロセッサ９１２は、第一のストレージ・コントローラ９０２および／または第一のサービス・プロセッサ９０４と通信するために使用されるIPアドレス、ポート番号および／または認証情報を記憶してもよい。第二のサービス・プロセッサ９１２が第二のストレージ・コントローラ９１０の障害、たとえば電力喪失を検出することに応答して、第二のサービス・プロセッサ９１２は第一のストレージ・コントローラ９０２および／または第一のサービス・プロセッサ９０４に、前記IPアドレス、ポート番号および／または認証情報を使って、サービス・プロセッサ・トラップを送ってもよい。サービス・プロセッサ・トラップは、スイッチオーバー前に第二のストレージ・コントローラ９１０を通じてクライアントにとってそれまでアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、第二のストレージ・コントローラ９１０から第一のストレージ・コントローラ９０２への自動スイッチオーバー動作を開始するよう第一のストレージ・コントローラ９０２をトリガーしてもよい。
【００６１】
さらにもう一つの実施形態は、本稿に呈示される技法の一つまたは複数を実装するよう構成されたプロセッサ実行可能命令を有するコンピュータ可読媒体に関わる。このように工夫されたコンピュータ可読媒体またはコンピュータ可読デバイスの例示的実施形態が図１０に示されている。ここで、実装１０００はCD-R、DVD-R、フラッシュドライブ、ハードディスクドライブの円盤などのようなコンピュータ可読媒体を有しており、そこにコンピュータ可読データ１００６がエンコードされている。このコンピュータ可読データ１００６は、0または1の少なくとも一つを含むバイナリー・データなどであり、本稿に記載される原理の一つまたは複数に従って動作するよう構成された一組のコンピュータ命令１００４を有する。いくつかの実施形態では、プロセッサ実行可能なコンピュータ命令１００４は、方法１００２、たとえば図３の例示的方法３００の少なくとも一部、図６の例示的方法６００の少なくとも一部および／または図８の例示的方法８００の少なくとも一部を実行するよう構成される。いくつかの実施形態では、プロセッサ実行可能命令１００４は、システム、たとえば図４の例示的システム４００の少なくとも一部、図５の例示的システム５００の少なくとも一部、図７の例示的システム７００の少なくとも一部および／または図９の例示的システム９００の少なくとも一部を実装するよう構成される。多くのそのようなコンピュータ可読媒体が、本稿に呈示される技法に従って動作することが考えられる。
【００６２】
本稿に記載されるプロセス、アーキテクチャーおよび／または手順がハードウェア、ファームウェアおよび／またはソフトウェアで実装されることができることが理解されるであろう。本稿に記載された施策が任意の型の特殊目的コンピュータ（たとえば、ファイル・ホスト、ストレージ・サーバーおよび／またはストレージ・サービス用機器）および／またはスタンドアローンのコンピュータまたはその一部を含む汎用コンピュータであって、記憶システムとして具現されているまたは記憶システムを含むものに適用されうることも理解されるであろう。さらに、本稿の教示は、ネットワーク・アタッチト・ストレージ環境および／またはストレージ・エリア・ネットワークならびにクライアントまたはホスト・コンピュータに直接取り付けられたディスク・アセンブリーを含むがそれに限られない多様な記憶システムに構成されることができる。したがって、記憶システムは、記憶機能を実行するよう構成され、他の設備もしくはシステムに関連付けられた任意のサブシステムに加えて、そのような構成を含む広義に理解されるべきである。
【００６３】
いくつかの実施形態では、本開示に記載および／または例解される方法は、全体的または部分的に、コンピュータ可読媒体上に実現されてもよい。コンピュータ可読媒体は、本稿に呈示される方法の一つまたは複数を実装するよう構成されたプロセッサ実行可能命令を含むことができ、その後コンピュータ・システムによって読まれることができるこのデータを記憶するための任意の機構を含みうる。コンピュータ可読媒体の例は、（ハード）ドライブ（たとえばネットワーク・アタッチト・ストレージ（NAS）を介してアクセス可能）、ストレージ・エリア・ネットワーク（SAN）、揮発性および不揮発性メモリ、たとえば読み出し専用メモリ（ROM）、ランダムアクセスメモリ（RAM）、EEPROMおよび／またはフラッシュメモリ、CD-ROM、CD-R、CD-RW、DVD、カセット、磁気テープ、磁気ディスク記憶、光学式もしくは非光学式データ記憶デバイスおよび／またはデータを記憶するために使用できる他の任意の媒体を含む。
【００６４】
主題は、構造的な特徴または方法論的な工程に固有の言辞で記述されてきたが、付属の請求項において定義される主題は必ずしも上記の個別的な特徴または工程に限定されないことは理解される。むしろ、上記の個別的な特徴および工程は、請求項の少なくとも一部を実装する例示的な形として開示されている。
【００６５】
本稿では実施形態のさまざまな動作が提供されている。これらの動作の一部または全部が記述される順序は、これらの動作が必ず順序依存であることを含意するものとして解釈されるべきではない。本稿の恩恵を与えられれば、代替的な順序が認識されるであろう。さらに、すべての動作が本稿で与えられる各実施形態において必ず存在するとは限らないことが理解されるであろう。また、いくつかの実施形態ではすべての動作が必要とは限らないことが理解されるであろう。
【００６６】
さらに、特許請求される主題は、開示される主題を実装するようコンピュータを制御するためのソフトウェア、ファームウェア、ハードウェアまたはそれらの任意の組み合わせを生じる標準的なアプリケーションまたはエンジニアリング技法を使う方法、装置または製造物として実装される。本稿で使われるところの用語「製造物」は、任意のコンピュータ可読デバイス、担体または媒体からアクセス可能なコンピュータ・アプリケーションを包含することが意図されている。むろん、特許請求される主題の範囲または精神から外れることなくこの構成に対して多くの修正がなされうる。
【００６７】
本願で使われるところでは、用語「コンポーネント」「モジュール」「システム」「インターフェース」などは一般に、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアのいずれであろうと、コンピュータに関係したエンティティを指すことが意図されている。たとえば、コンポーネントは、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能物、実行のスレッド、アプリケーションまたはコンピュータを含む。例として、コントローラ上で実行中のアプリケーションおよび該コントローラの両方がコンポーネントであることができる。プロセスまたは実行スレッド内に存在する一つまたは複数のコンポーネントおよびコンポーネントは、一つのコンピュータ上に局在化されてもよく、あるいは二つ以上のコンピュータの間で分散されてもよい。
【００６８】
さらに、「例示的」は本稿では、例、事例、例解などのはたらきをすることを意味するために使われており、必ずしも有利ではない。本願で使われるところでは、「または」は排他的な「または」ではなく、包含的な「または」を意味することが意図されている。さらに、本願で使われる単数表現は、そうでないことが指定されているまたは単数形に向けられていることが文脈から明らかであるのでない限り、一般に「一つまたは複数」を意味すると解釈される。また、AおよびBの少なくとも一つおよび／またはその他は一般に、AまたはBおよび／またはAとBの両方を意味する。さらに、「含む」「もつ」「有する」またはそれらの変形が使われる限りにおいて、そのような用語は用語「有する／含む」と同様の仕方で包含的であることが意図される。
【００６９】
特許請求される主題の範囲または精神から外れることなく、多くの修正が本開示に対してなされうる。そうでないことが指定されるのでない限り、「第一」「第二」などは時間的側面、空間的側面、順序付けなどを含意することは意図されない。むしろ、そのような用語は単に、特徴、要素、項目などについての識別子、名称などとして使われる。たとえば、第一の組の情報および第二の組の情報は一般に情報の集合Aおよび情報の集合Bまたは二つの異なるもしくは二つの同一の情報の集合または同じ情報の集合に対応する。
【００７０】
また、本開示は一つまたは複数の実装との関連で図示され、記述されてきたが、本明細書および付属の図面を読み、理解することに基づいて、等価な代替および修正が当業者には思いつくであろう。本開示は、そのようなすべての修正および変更を含み、請求項の範囲によってのみ制限される。上記のコンポーネント（たとえば要素、資源など）によって実行されるさまざまな機能に関し、そのようなコンポーネントを記述するために使われる用語は、特に断わりのない限り、開示される構造と構造的に等価でなくても、記述されるコンポーネントの指定された機能を実行する（たとえば機能的に等価な）任意のコンポーネントに対応することが意図されている。さらに、本開示の特定の特徴がいくつかの実装のうちの一つのみとの関連で開示されていることがありうるが、そのような特徴は、任意の所与のまたは具体的な用語について所望されうるまたは有利でありうるように、他の実装と一つまたは複数の他の特徴と組み合わされてもよい。
いくつかの態様を記載しておく。
〔態様１〕
ストレージ・サーバーが、第一のストレージ・クラスター内の第一のストレージ・コントローラから第二のストレージ・クラスター内の第二のストレージ・コントローラへのハートビート情報交換のためにメモリ・セクションを指定する段階であって、前記第二のストレージ・コントローラは前記第一のストレージ・コントローラのための災害復旧パートナーとして構成されている、段階と；
前記第一のストレージ・コントローラの現在のハートビート状態を得るために前記メモリ・セクションにアクセスするためのリモート直接メモリ・アクセス読み取り動作を実行する段階と；
前記現在のハートビート状態が前記第一のストレージ・コントローラの障害を示すことに応答して、スイッチオーバー前にそれまで前記第一のストレージ・コントローラを通じてクライアントにとってアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、前記災害復旧パートナーである前記第二のストレージ・コントローラに基づく、前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへの自動スイッチオーバー動作を開始する段階とを含む、
方法。
〔態様２〕
前記現在のハートビート状態が、ソフトウェア・パニック、ストレージ・コントローラ停止またはストレージ・コントローラ再起動のうちの少なくとも一つを前記障害として特定する、態様１記載の方法。
〔態様３〕
前記現在のハートビート状態が、前記第一のストレージ・コントローラの正常動作状態または動作遷移のうちの少なくとも一つを特定する、態様１記載の方法。
〔態様４〕
前記ハートビート情報交換が、前記第一のストレージ・コントローラの進行を示すために使われる一連のシーケンス番号に対応する、態様１ないし３のうちいずれか一項記載の方法。
〔態様５〕
自動スイッチオーバー動作を開始する前記段階が：
前記現在のハートビート状態が前記障害を示すことに応答して、前記第二のストレージ・コントローラから前記第一のストレージ・クラスターに通信信号を送り；
前記障害が偽トリガーであるかどうかを判定するために前記通信信号への応答性を評価し；
前記障害が偽トリガーでないと判定することに応答して、前記自動スイッチオーバー動作を開始し；
前記障害が偽トリガーであると判定することに応答して、前記自動スイッチオーバー動作を開始することを控えることを含む、
態様１ないし４のうちいずれか一項記載の方法。
〔態様６〕
前記障害が偽トリガーでないと判定することに応答して、前記第一のストレージ・クラスターのストレージおよびメイン・コントローラが利用可能であるかどうかを判定し；
前記ストレージおよび前記メイン・コントローラが利用可能でないことに応答して、前記自動スイッチオーバー動作ではなく手動スイッチオーバー動作を開始し；
前記ストレージおよび前記メイン・コントローラが利用可能であることに応答して、前記自動スイッチオーバー動作を開始することを含む、
態様５記載の方法。
〔態様７〕
自動スイッチオーバー動作を開始する前記段階が：
前記第一のストレージ・コントローラと前記第二のストレージ・コントローラとの間の書き込みキャッシュ同期状態を評価し；
前記書き込みキャッシュ同期状態が同期している状態を示すことに応答して、前記自動スイッチオーバー動作を開始し；
前記書き込みキャッシュ同期状態が同期していない状態を示すことに応答して、前記自動スイッチオーバー動作を開始することを控えることを含む、
態様１ないし６のうちいずれか一項記載の方法。
〔態様８〕
書き込みキャッシュ同期状態を評価することが：
前記第一のストレージ・コントローラの第一のディスク・メールボックスから前記書き込みキャッシュ同期状態を読み取ることを含む、
態様７記載の方法。
〔態様９〕
前記第一のストレージ・クラスターが単一コントローラ・クラスター構成に従って構成されており、前記第二のストレージ・クラスターが単一コントローラ・クラスター構成に従って構成されている、態様１ないし８のうちいずれか一項記載の方法。
〔態様１０〕
自動スイッチオーバー動作を開始する前記段階が：
前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへのハートビート情報交換のために第一のディスク・メールボックスが使われることを指定し；
前記第一のディスク・メールボックスから第二の現在のハートビート状態を読み取り；
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記障害を示すことに応答して、前記自動スイッチオーバー動作を開始することを含む、
態様１ないし９のうちいずれか一項記載の方法。
〔態様１１〕
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記障害を示すことに応答して、前記障害を電力喪失障害として判別することを含む、態様１０記載の方法。
〔態様１２〕
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記障害を示すことに応答して、閾値タイムアウト後に前記自動スイッチオーバー動作を開始することを含む、態様１０または１１記載の方法。
〔態様１３〕
少なくとも一つの機械によって実行されたときに態様１ないし１２のうちいずれか一項記載の方法を前記機械に実行させる機械実行可能コードを有する、方法を実行するための命令が記憶されている非一時的な機械可読媒体。
〔態様１４〕
機械実行可能コードを有する、方法を実行するための命令が記憶されている非一時的な機械可読媒体であって、前記機械実行可能コードは、少なくとも一つの機械によって実行されたときに、前記機械に：
第一のストレージ・クラスター内の第一のストレージ・コントローラから第二のストレージ・クラスター内の第二のストレージ・コントローラへのハートビート情報交換のために第一のディスク・メールボックスが使われることを指定する段階であって、前記第二のストレージ・コントローラは前記第一のストレージ・コントローラのための災害復旧パートナーとして構成されている、段階と；
前記第一のディスク・メールボックスから現在のハートビート状態を読む段階と；
前記現在のハートビート状態が前記第一のストレージ・コントローラの障害を示すことに応答して、スイッチオーバー前にそれまで前記第一のストレージ・コントローラを通じてクライアントにとってアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、前記災害復旧パートナーである前記第二のストレージ・コントローラに基づく、前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへの自動スイッチオーバー動作を開始する段階とを実行させるものである、
非一時的な機械可読媒体。
〔態様１５〕
前記機械実行可能コードは、前記機械に：
前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへのハートビート情報交換のためのメモリ・セクションを指定する段階と；
前記第一のストレージ・コントローラの第二の現在のハートビート状態を得るために前記メモリ・セクションにアクセスするためのリモート直接メモリ・アクセス読み取り動作を実行する段階と；
前記現在のハートビート状態および前記第二の現在のハートビート状態の両方が前記障害を示すことに応答して、前記自動スイッチオーバー動作を開始する段階を実行させるものである、
態様１４記載の非一時的な機械可読媒体。
〔態様１６〕
前記機械実行可能コードは、前記機械に：
タイムアウト後に前記自動スイッチオーバー動作を実行させる、
態様１４または１５記載の非一時的な機械可読媒体。
〔態様１７〕
前記機械実行可能コードは、前記機械に：
前記現在のハートビート状態が前記障害を示すことに応答して、前記第二のストレージ・コントローラから前記第一のストレージ・クラスターに通信信号を送り；
前記障害が偽トリガーであるかどうかを判定するために前記通信信号への応答性を評価し；
前記障害が偽トリガーでないと判定することに応答して、前記自動スイッチオーバー動作を開始し；
前記障害が偽トリガーであると判定することに応答して、前記自動スイッチオーバー動作を開始することを控えることを実行させる、
態様１４ないし１６のうちいずれか一項記載の非一時的な機械可読媒体。
〔態様１８〕
前記機械実行可能コードは、前記機械に：
前記障害が偽トリガーでないと判定することに応答して、前記第一のストレージ・クラスターのストレージおよびメイン・コントローラが利用可能であるかどうかを判定し；
前記ストレージおよび前記メイン・コントローラが利用可能でないことに応答して、前記自動スイッチオーバー動作ではなく手動スイッチオーバー動作を開始し；
前記ストレージおよび前記メイン・コントローラが利用可能であることに応答して、前記自動スイッチオーバー動作を開始することを実行させる、
態様１７記載の非一時的な機械可読媒体。
〔態様１９〕
自動スイッチオーバー動作を開始する前記段階が：
前記第一のストレージ・コントローラと前記第二のストレージ・コントローラとの間の書き込みキャッシュ同期状態を評価し；
前記書き込みキャッシュ同期状態が同期している状態を示すことに応答して、前記自動スイッチオーバー動作を開始し；
前記書き込みキャッシュ同期状態が同期していない状態を示すことに応答して、前記自動スイッチオーバー動作を開始することを控えることを含む、
態様１４ないし１８のうちいずれか一項記載の非一時的な機械可読媒体。
〔態様２０〕
自動スイッチオーバー動作を実装する方法を実行するための命令が記憶されている、機械実行可能コードを含む機械可読媒体を含むメモリと；
前記機械実行可能コードを実行するよう構成されている、前記メモリに結合されたサービス・プロセッサとを有するコンピューティング装置であって、前記機械実行可能コードは前記サービス・プロセッサに：
第二のストレージ・クラスター内にある第二のストレージ・コントローラのインターネット・プロトコル（IP）アドレスを記憶する段階であって、前記第二のストレージ・コントローラは、第一のストレージ・クラスター内にある第一のストレージ・コントローラのための災害復旧パートナーとして構成されている、段階と；
前記第一のストレージ・コントローラの健康状態をモニタリングする段階と；
前記第一のストレージ・コントローラの障害を検出することに応答して、前記IPアドレスにサービス・プロセッサ・トラップを送る段階であって、前記サービス・プロセッサ・トラップは、スイッチオーバー前にそれまで前記第一のストレージ・コントローラを通じてクライアントにとってアクセス可能であったデータへのフェイルオーバー・アクセスをクライアントに提供するために、前記第二のストレージ・コントローラが、前記第一のストレージ・コントローラから前記第二のストレージ・コントローラへの自動スイッチオーバー動作を開始することをトリガーする、段階とを実行させるものである、
コンピューティング装置。
〔態様２１〕
前記サービス・プロセッサが、前記第一のストレージ・コントローラが電力を喪失する場合に前記サービス・プロセッサに電力を与えるために使われるバッテリーを有する、態様２０記載のコンピューティング装置。
〔態様２２〕
態様１ないし１２のうちいずれか一項記載の方法を実行するよう構成された態様２０または２１記載のコンピューティング装置。
【図１】
0006476348.tif 000002
【図２】
0006476348.tif 000003
【図３】
0006476348.tif 000004
【図４】
0006476348.tif 000005
【図５】
0006476348.tif 000006
【図６】
0006476348.tif 000007
【図７】
0006476348.tif 000008
【図８】
0006476348.tif 000009
【図９】
0006476348.tif 000010
【図１０】
0006476348.tif 000011