(57)【要約】コンピュータ・プログラム製品を含むシステム及び方法が、サーバ・システムにおいて高可用性を提供する。１つの実施において、サーバ・システムは、各々が１つ又はそれ以上の仮想サーバを実行する２つ又はそれ以上の自律的サーバ・ノードのクラスターである。ノードとクライアントとの間の接続は仮想ＩＰアドレスに基づいており、各々の仮想サーバは、１つ又はそれ以上の仮想ＩＰアドレスを有する。仮想サーバにフェイルオーバー優先順位をつけることができ、フェイルオーバーにおいて、高い優先順位の仮想サーバを低い優先順位のものより前に移動させることができる。仮想サーバを故障したノードから多数の異なるノードに分散させることによって、負荷を平衡させることができる。ノード内のポートが故障した際には、良好なポートがなくなるまで、故障したポートから該ノード上の他のポートに仮想ＩＰアドレスを再割り当てすることができ、それから初めて仮想サーバを別のノードに移動させる。【特許請求の範囲】
【請求項１】
各々が２つ又はそれ以上の仮想サーバを作動させるように構成された２つ又はそれ以上のノードを備え、各々の仮想サーバが、専用リソースとして、クライアントへの仮想インターフェースと１つ又はそれ以上のファイル・システムとを有することを特徴とするファイル・サーバ・システム。
【請求項２】
前記仮想インターフェースが１つの仮想ＩＰアドレスを含むことを特徴とする請求項１に記載のシステム。
【請求項３】
前記仮想インターフェースが２つ又はそれ以上の仮想ＩＰアドレスを含むことを特徴とする請求項１に記載のシステム。
【請求項４】
クライアントが、ＮＦＳ又はＣＩＦＳプロコトルを用いて前記ファイル・システムにアクセスすることを特徴とする請求項１に記載のシステム。
【請求項５】
前記システムに、
第１のノードの故障を検知させ、
前記第１のノード上の仮想サーバの各々を前記システム内の異なるノードに移動させる、
ために実行されるように作動するフェイルオーバー・コンピュータ・プログラム命令をさらに含むことを特徴とする請求項１に記載のシステム。
【請求項６】
各々の仮想サーバが関連したフェイルオーバー優先順位を有し、前記フェイルオーバー命令が、それぞれの優先順位の順序で仮想サーバを移動させる命令をさらに含むことを特徴とする請求項５に記載のシステム。
【請求項７】
前記フェイルオーバー命令が、
ノードの故障の場合に移動されないものとして識別される仮想サーバを認識し、それが故障したノード上にある場合には、そのように識別された仮想サーバの移動を防止するための命令をさらに含むことを特徴とする請求項５に記載のシステム。
【請求項８】
前記システムに、
第１のクライアントへのネットワーク接続を有する第１のノードに接続された第１のサブネット内の故障を検知させ、
前記第１のクライアントへのネットワーク接続と、第２の異なるサブネットを通じた前記第１のノードへの接続とを有する第２のノードを識別させ、
前記検知された故障に応答して前記第２のノードをルータとして用い、前記第１のクライアントと前記第１のノードとの間のデータを経路指定させる、
ために実行されるように作動する再経路指定コンピュータ・プログラム命令をさらに含むことを特徴とする請求項１に記載のシステム。
【請求項９】
前記第１のサブネット内の故障の前、前記第１のクライアントと前記第１のノードとの間の前記接続が該第１のノード上のポートに割り当てられた第１の仮想ＩＰアドレスを通じたものであり、前記再経路指定命令が、
前記第１の仮想ＩＰアドレスを前記第２のサブネットに接続された前記第２のノード上のポートに移動させる命令をさらに含むことを特徴とする請求項８に記載のシステム。
【請求項１０】
前記システムに、
第１のノード上の物理ポートの故障を検知させ、
前記第１のノード上の他の物理ポートが良好かどうかを判断させ、
こうした良好なポートがある場合には、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを前記第１のノード上の良好な物理ポートに移動させ、
前記第１のノード上にこうした良好なポートがない場合には、こうした仮想ＩＰアドレスに付けられた全ての仮想サーバと共に、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを異なる第２のノードに移動させる、
ために実行されるように作動するフェイルオーバー・コンピュータ・プログラム命令をさらに含むことを特徴とする請求項１に記載のシステム。
【請求項１１】
前記故障した物理ポートが第１のサブネット上にあり、前記良好な物理ポートが異なる第２のサブネット上にあることを特徴とする請求項１０に記載のシステム。
【請求項１２】
前記システムが、該システムに、
故障したノードを除く該システムのノードにわたる仮想サーバ負荷の平衡した分散を計算させ、
１つ又はそれ以上の仮想サーバを大きく負荷がかかったノードからあまり負荷がかかっていないノードに移動させることによって負荷を平衡させる、
ために実行されるように作動する負荷平衡コンピュータ・プログラム命令を含むことを特徴とする請求項１に記載のシステム。
【請求項１３】
前記第１のノード上の物理ポートの各々にかかる負荷を判断し、
前記物理ポートにわたって負荷を平衡させるために、前記第１のノードの該物理ポートの中で該第１のノード上の仮想インターフェースを再分散する、
ために、第１のノード上で実行されるように作動するコンピュータ・プログラム命令をさらに含むことを特徴とする請求項１に記載のシステム。
【請求項１４】
前記システムに、
第１のノード上で共用ストレージ・ユニットにアクセスできないことを検知させ、
前記共用ストレージ・ユニットにアクセスできないことの検知に応答して、こうした別のノードが前記システム内に存在する場合には、該共用ストレージ・ユニット上のファイル・システムを含む全ての仮想サーバを、該ストレージにアクセスできる別のノードに移動させる、
ために実行されるように作動するコンピュータ・プログラム命令をさらに含むことを特徴とする請求項１に記載のシステム。
【請求項１５】
前記負荷平衡命令が、各々の仮想サーバにかかる負荷を判断するためにさらに作動することを特徴とする請求項１２に記載のシステム。
【請求項１６】
前記負荷平衡命令が、各々の物理サーバにかかる負荷を判断するためにさらに作動することを特徴とする請求項１２に記載のシステム。
【請求項１７】
前記ノードがマスター・ノードを含み、前記負荷平衡命令が前記マスター・ノード上で実行されるように作動することを特徴とする請求項１２に記載のシステム。
【請求項１８】
前記負荷平衡命令が、第１の仮想サーバ及び第２の仮想サーバを第１のノードから移動させるように作動し、前記第１の仮想サーバは前記システムの第２のノードに移動させられ、前記第２の仮想サーバは該システムの異なる第３のノードに移動させられることを特徴とする請求項１２に記載のシステム。
【請求項１９】
前記負荷平衡命令が、フェイルオーバー・プロセスの一部としてシステムの負荷を平衡するように作動することを特徴とする請求項１２に記載のシステム。
【請求項２０】
前記負荷平衡命令が、生じる如何なるフェイルオーバーにも関係なく、システムの負荷を平衡するように作動することを特徴とする請求項１２に記載のシステム。
【請求項２１】
前記システムに、
ユーザの介入なしで、第１のファイル・システムのファイル・システム劣化を検知させ、
前記劣化の検知に応答して、前記第１のファイル・システムへのアクセスをブロックさせ、該第１のファイル・システムを修復させ、全くユーザの介入なしで該第１のファイル・システムにアクセスすることを可能にする、
ために実行されるように作動されるコンピュータ・プログラム命令をさらに含むことを特徴とする請求項１に記載のシステム。
【請求項２２】
２つ又はそれ以上の同時にアクティブな仮想ＩＰアドレスを有する仮想サーバと共に構成されたノードを備えることを特徴とするファイル・サーバ・システム。
【請求項２３】
前記ノードが、２つ又はそれ以上の他の同時にアクティブな仮想ＩＰアドレスを有する第２の仮想サーバと共に構成されたことを特徴とする請求項２２に記載のシステム。
【請求項２４】
各々が仮想ＩＰアドレスを有する仮想サーバを作動させるように構成され、各々が２つ又はそれ以上の物理ポートを備えるように構成された、２つ又はそれ以上のノードを備え、
第１のノードが、
前記第１のノード上の物理ポートの故障を検知し、
前記第１のノード上のいずれの他の物理ポートが良好かを判断し、
そのような良好なポートがある場合には、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを良好な物理ポートに移動し、
前記第１のノード上にそのような良好なポートがない場合には、そのような仮想ＩＰアドレスに付けられた全ての仮想サーバと共に、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを、異なる第２のノードに移動する、
ようにさらに構成されたことを特徴とするファイル・サーバ・システム。
【請求項２５】
ファイル・サーバ・システム・クラスターの多数のノードにおける実行のための、コンピュータ可読媒体又は伝播信号上に明確に格納されるコンピュータ・プログラム製品であって、
プログラム可能なプロセッサに、
前記クラスターの第１のノードの故障を検知させ、
前記第１のノード上の多数の仮想サーバの各々を前記クラスター内の異なるノードに移動させる、
ように作動する命令を含むことを特徴とする製品。
【請求項２６】
仮想サーバをそれぞれの優先順位の順序で移動させるための命令をさらに備えることを特徴とする請求項２５に記載の製品。
【請求項２７】
ノードの故障の場合に移動されないものとして識別される仮想サーバを認識し、それが故障したノード上にある場合には、そのように識別された仮想サーバの移動を防止するための命令をさらに備えることを特徴とする請求項２５に記載の製品。
【請求項２８】
第１のクライアントへのネットワーク接続を有する第１のノードに接続された第１のサブネット内の故障を検知し、
前記第１のクライアントへのネットワーク接続と、第２の異なるサブネットを通じた前記第１のノードへの接続とを有する第２のノードを識別し、
前記検知された故障に応答して前記第２のノードをルータとして用い、前記第１のクライアントと前記第１のノードとの間のデータを経路指定する、
ための命令をさらに含むことを特徴とする請求項２５に記載の製品。
【請求項２９】
前記クラスターの第１のノード上の物理ポートの故障を検知し、
前記第１のノード上の他の物理ポートが良好かどうかを判断し、
そのような良好なポートがある場合には、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを前記第１のノード上の良好な物理ポートに移動し、
前記第１のノード上にそのような良好なポートがない場合には、そのような仮想ＩＰアドレスに付けられた全ての仮想サーバと共に、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを、異なる第２のノードに移動する、
ための命令をさらに含むことを特徴とする請求項２５に記載の製品。
【請求項３０】
前記第１のサブネット内の故障の前、前記第１のクライアントと前記第１のノードとの間の前記接続が該第１のノード上のポートに割り当てられた第１の仮想ＩＰアドレスを通じたものであり、前記経路指定命令が、
前記第１の仮想ＩＰアドレスを前記第２のサブネットに接続された前記第２のノード上のポートに移動させる、
ための命令をさらに含むことを特徴とする請求項２９に記載の製品。
【請求項３１】
各々の仮想サーバによりもたらされた負荷を判断し、
故障したノードを除く前記サーバの前記ノードにわたる前記仮想サーバの負荷の平衡した分散を計算し、
１つ又はそれ以上の仮想サーバを大きく負荷がかかったノードからあまり負荷がかかっていないノードに移動させることによって負荷を平衡させる、
ための負荷平衡命令をさらに含むことを特徴とする請求項２５に記載の製品。
【請求項３２】
前記ノードがマスター・ノードを含み、前記負荷平衡命令が前記マスター・ノード上で実行されるために作動することを特徴とする請求項３１に記載のシステム。
【請求項３３】
第１の仮想サーバ及び第２の仮想サーバを第１のノードから移動するように作動し、前記第１の仮想サーバが前記システムの第２のノードに移動され、前記第２の仮想サーバが該システムの異なる第３のノードに移動されることを特徴とする請求項３１に記載のシステム。
【請求項３４】
仮想サーバが物理ポートと関連した仮想ＩＰアドレスを有するファイル・サーバ・システム・クラスターのノードにおける実行のために、コンピュータ可読媒体又は伝播信号上に明確に格納されたコンピュータ・プログラム製品であって、前記製品が、プログラム可能なプロセッサに、
前記クラスターの第１のノード上の物理ポートの故障を検知させ、
前記第１のノード上の他の物理ポートが良好かどうかを判断させ、
そのような良好なポートがある場合には、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを前記第１のノード上の良好な物理ポートに移動させ、
前記第１のノード上にそのような良好なポートがない場合には、そのような仮想ＩＰアドレスに付けられた全ての仮想サーバと共に、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを異なる第２のノードに移動させる、
ために作動する命令を含むことを特徴とするコンピュータ・プログラム製品。
【請求項３５】
１つ又はそれ以上の仮想サーバの各々が、物理ポートと関連した１つ又はそれ以上の仮想ＩＰアドレスを有するファイル・サーバ・ノードにおける実行のために、コンピュータ可読媒体又は伝播信号上に明白に格納されたコンピュータ・プログラム製品であって、前記製品が、プログラム可能なプロセッサに、
２つ又はそれ以上の物理ポートを有し、各々が物理ポートと関連した１つ又はそれ以上の仮想ＩＰアドレスをもつ１つ又はそれ以上の仮想サーバを有するファイル・サーバ・ノード上の物理ポートの故障を検知させ、
良好なものとして前記ファイル・サーバ・ノード上の１つ又はそれ以上の他の物理ポートを識別させ、
前記故障した物理ポートと関連した仮想ＩＰアドレスの各々を前記ファイル・サーバ・ノード上の良好な物理ポートに移動させる、
ために作動する命令を含むことを特徴とするコンピュータ・プログラム製品。
【請求項３６】
前記第１のノード上の物理ポートの各々にかかる負荷を判断し、
前記故障した物理ポートと関連した仮想ＩＰアドレスを前記ファイル・サーバ・ノード上の前記良好な物理ポートに移動させる際に、該良好な物理ポートにわたる負荷を平衡させるために前記判断された負荷を用いる、
ための命令をさらに含むことを特徴とする請求項３５に記載の製品。
【請求項３７】
前記ファイル・サーバ・ノードの物理ポートの各々が複数のサブネットの１つの中にあり、
仮想ＩＰアドレスが、前記故障した物理ポートと同じサブネット内にある良好な物理ポートに優先的に移動されることを特徴とする請求項３５に記載の製品。
【請求項３８】
２つ又はそれ以上の物理ノードを含み、
前記ノードが、各々が専用リソースとしてクライアントへの仮想インターフェースと１つ又はそれ以上のファイル・システムとを有する２つ又はそれ以上の仮想サーバを作動させるように構成され、各々の仮想インターフェースが仮想ＩＰアドレスを含み、
前記ノードが、第１の物理ポートの故障を検知し、該ノードの他の物理ポートが正常であるかを判断し、前記故障した物理ポートと関連した全ての仮想ＩＰアドレスを前記第１のノード上の良好な物理ポートに移動するように構成されたことを特徴とするファイル・サーバ・ノード。
【請求項３９】
各々の物理ポートにかかる負荷を判断し、前記故障した物理ポートと関連した前記仮想ＩＰアドレスを前記ノードの前記良好な物理ポートに移動する際に、該良好な物理ポートにわたる負荷を平衡させるために前記判断された負荷を用いるようにさらに構成されたことを特徴とする請求項３８に記載のファイル・サーバ・ノード。
【請求項４０】
前記ファイル・サーバ・ノードの物理ポートの各々が複数のサブネットの１つの中にあり、
仮想ＩＰアドレスが、前記故障した物理ポートと同じサブネット内にある良好な物理ポートに優先的に移動されることを特徴とする請求項３８に記載のファイル・サーバ・ノード。
【発明の詳細な説明】
【０００１】
（技術分野）
本発明は、口語的にファイル・サーバと呼ばれる高可用性ファイル・サーバ・システムに関する。
【０００２】
（背景技術）
高可用性サーバ・システムは、システムのハードウェア又はソフトウェアの損傷後でも機能し続けるシステムである。高可用性を提供する通常の方法は、システム・コンポーネントを複製することである。幾つかのコンポーネントが使用できなくなった場合には、代わりに別のコンポーネントを用いることができる。頑丈な高可用性システムは、単一障害ポイントを有していない。単一障害ポイントは、その故障によりシステムが使用できなくなるコンポーネントである。高可用性ファイル・サーバ・システムは、一般に、２つ又はそれ以上のサーバ（ノード）のクラスターからなる。クラスターのノードは、ノード自体とクライアントとの間のネットワーク接続を有し、各々のノードは、１つ又はそれ以上のディスク・ストレージ・ユニットに直接又は間接的に接続される。
高可用性の実施は、共用ディスク・モデル又は非共用ディスク・モデルに基づくことができる。共用ディスク・モデルにおいては、データは、クラスター・ノードにより同時に共有され、ロック・マネージャーがアクセス制御のために用いられる。非共用ディスク・モデルにおいては、データへのアクセスは共有されるが、いずれかの時点で、各々のディスク。ボリュームがノードのうちの１つによって永久的に所有される。共用ディスク・モデルは、最もよく使用される手法である。ディスクが共有されない場合には、２つの組の非共用ディスクの間でデータを複製しなければならず、このことは幾らかの危険及び複雑性を付加する。
【０００３】
高可用性システム内のノードは、典型的には、１つ又はそれ以上の命令プロセッサ（一般にＣＰＵと呼ばれる）、ディスク、メモリ、電源、マザーボード、拡張スロット、及びインターフェース・ボードからなる。マスタ・スレーブ設計において、システム・クラスターの１つのノードが、１次サーバ又はマスタ・サーバと呼ばれ、他のものは、２次サーバ、テークオーバー・サーバ、又はスレーブ・サーバと呼ばれる。１次及び２次ノードは、類似したハードウェアを有し、同じ作動システムを実行し、同じパッチがインストールされ、同じ２進法の実行形式をサポートし、同じか又は非常に類似した設定を有する。１次及び２次ノードは、同じネットワークに接続され、該ネットワークを通じて互いと通信し、クライアントと通信する。両方の種類のノードは、フェイルオーバー・ソフトウェアの両立性があるバージョンを実行する。幾つかの設定においては、共用ディスクに加えて、各々のノードがそれぞれの専用ディスクを有する。専用ディスクは、一般に、ブート情報、作動システム、ネットワーク利用ソフトウェア、及びフェイルオーバー・ソフトウェアを含む。幾つかの実施において、専用ディスクはミラーリングされるか、又は冗長ディスクが設けられる。
【０００４】
システムのノードは、各々のノードが他のノードの状態を知っているように互いに連続的に監視する。この監視は、ハートビート・ネットワークと呼ばれる通信リンクを用いて行うことができる。何らかの信頼性の高い接続を通じて、ハートビート・ネットワークを実施することができる。多くの実施において、ハートビートは、イーサネット（登録商標）接続に基づいている。ハートビート・ネットワークは、ＰＰＰ（２地点間プロトコル）又はＳＬＩＰ（シリアル・ライン・インターネット・プロトコル）のようなシリアル・プロトコルを実行するシリアル・ラインのようなものを用いて実施することもできる。共用ディスクを通じてハートビートを提供することもでき、そこでディスク又はディスク・スライスがディスク・ベースのハートビートの交換のために設けられる。ハートビートが停止したときに、サーバは、ハートビート・パートナーの故障について知る。単一障害ポイントを回避するために、１つ以上のハートビート・ネットワークを実施することができる。幾つかの実施は、プライベート・ネットワーク上でハートビートを実行し（すなわち、ネットワークが、ハートビート通信のためにだけ用いられた）、他の実施は、公衆ネットワークでハートビートを実行する。ハートビートが停止すると、生き残っているノード上で動作しているフェイルオーバー・ソフトウェアにより、自動フェイルオーバーがトランスペアレントに生じ得る。
【０００５】
フェイルオーバー後、正常なノードは、故障したノードが持っていたものと同じデータにアクセスし、同じサービスを提供することができる。このことは、正常なノードに、故障したノードと同じネットワーク識別を想定させ、故障したノードをロックアウトしながら、正常なノードに共用ディスク内のデータへのアクセスを与えることによって達成される。
ＮＩＣ（ネットワーク・インターフェース・カード）は、時々故障する。幾つかの高可用性システムは、バックアップ用ＮＩＣを提供することによって、冗長ネットワーク接続を有する。ＮＩＣは、１つ又はそれ以上のネットワーク・ポートを有することができる。ネットワーク・ポートが故障した場合には、故障したネットワーク・ポートにより提供されるネットワーク・サービスは、バックアップ用ポートに移動される。この状況においては、別のノードへのフェイルオーバーに対する必要性はない。公衆ハートビート・ネットワーク及びプライベート・ハートビート・ネットワークの両方に対して、冗長ネットワーク接続を提供することができる。
【０００６】
幾つかの高可用性システムは、１つ以上のＩＰ（インターネット・プロトコル）アドレスが同じ物理ポートに割り当てられる仮想ネットワーク・インターフェースをサポートする。サービスは、ネットワーク識別（仮想ネットワーク・インターフェース）及びファイル・システム（ストレージ）と関連する。ノード（物理サーバ）内のハードウェアは、ネットワーク利用のために必要とされる計算リソース及びファイル・システムを提供する。仮想ＩＰアドレスは、クライアントを特定の物理サーバと接続していず、クライアントを、特定の物理サーバ上で実行している特定のサービスと接続する。ディスク及びストレージ装置は、特定の物理サービスと関連していない。それらは、ファイル・システムと関連している。ノード内に故障がある場合には、仮想ネットワーク・インターフェース及びファイル・システムが正常なノードに移動される。これらのサービスが物理サーバと関連していないので、クライアントは、どの物理サーバがサービスを提供しているかについて無関心である。仮想ＩＰアドレスを設定する際、又は仮想ＩＰアドレスを１つの物理ポートから別の物理ポートに移動する際、無償ＡＲＰ（アドレス解決プロトコル）パケットが生成される。このことは、クライアント、ハブ、及びスイッチが、それらのキャッシュにおいて、仮想ＩＰアドレスの位置に対応するＭＡＣ（メディア・アクセス制御）アドレスを更新することを可能にする。
【０００７】
全てのフェイルオーバーは、幾らかのクライアントの混乱を引き起こす。場合によっては、フェイルオーバーが完了した後、システムがフェイルオーバー前より低い機能を有する。このことは、正常なノードがそれ自体のサービスに加えて故障したノードにより与えられるサービスを提供する責任を負うときに生じ得る。
【０００８】
（発明の開示）
一般に、１つの態様において、本発明は、ストレージ装置に接続された、ノード又は物理サーバと呼ばれる２つ又はそれ以上の自律的サーバのクラスターを有する高可用性のクラスター・サーバ・システム、コンピュータ・プログラム製品、及びこうしたシステムを作動させる方法を提供する。ノードの１つはマスターになり、残りはスレーブになる。各々のノードは、１つ又はそれ以上の仮想サーバを実行する。仮想サーバは、ネットワーク・リソース及びファイル・システムからなる。ノードの１つが故障した際には、仮想サーバは、１つ又はそれ以上の他のノードにトランスペアレントに転送される。このことは、２つの組のシームレス接続を提供することによって達成される。第１の組は、ノードとクライアントとの間である。第２の組は、ノードとストレージ・システムとの間である。第１の接続は、クライアントとノードとの間の仮想ＩＰ技術に基づいている。ファイバー・チャネル、ＳＣＳＩ（スモール・コンピュータ・システム・インターフェース）、ｉＳＣＳＩ（ＩＰを通じたスモール・コンピュータ・システム・インターフェース）、ＩｎｆｉｎｉＢａｎｄ（登録商標）、アーキテクチャ、又は何らかのこのような技術を用いて、或いはこれらの組み合わせを用いて、第２の接続すなわちバックエンド接続を実施することができる。
【０００９】
ノードは、ハートビート・ネットワークを通して互いに通信し、互いの健康状態を判断する。ハートビートは、ＩＰ又はＳＡＮ（ストレージ・エリア・ネットワーク）インフラストラクチャを通じて、或いは両方を通じて作動し、ノードの可用性を判断することができる。ノードの１つ又はそのコンポーネントの１つが故障し、そのノード内で動作している仮想サーバが停止した場合には、フェイルオーバーが起こる。
フェイルオーバーにおいて、故障したノードの仮想サーバは、別のノードに移動される。一定の故障条件のもとで、シームレス接続、冗長ハードウェア及びソフトウェア・コンポーネントにより、フェイルオーバー・プロセスを呼び出すことなく、ファイル・システムへのアクセスを保持することが可能になる。仮想サーバに優先順位をつけることができ、フェイルオーバーに続いて低い優先順位のものより前に高い優先順位の仮想サーバを立ち上げることができる。故障したノードから多数の異なるノードに仮想サーバを分散させることによって、負荷を平衡させることができる。
【００１０】
一般に、別の態様において、本発明は、１つ以上の仮想サーバが単一の物理サーバ上にあるシステム、プログラム、及び方法を提供する。各々の仮想サーバは、１つ又はそれ以上のファイル・システム及び１つ又はそれ以上の仮想ＩＰアドレスを独占的に所有し、他の仮想サーバにより独占的に所有されたリソースを見ることができない。仮想サーバは、別個のエンティティとして管理され、物理サーバ上の物理リソースを共有する。
一般に、別の態様において、本発明は、重要でないサービスを故障したノードから任意に移動することができないシステム、プログラム、及び方法を提供する。仮想サーバの優先順位を設定し、重要でない仮想サーバの移動を防止することは、管理者の設定により行われる。
【００１１】
一般に、別の態様において、本発明は、他より負荷がかかっていないノードを識別するようにノードの負荷を監視するシステム、プログラム、及び方法を提供する。この情報を用いて負荷を平衡させる。フェイルオーバー後、仮想サーバは、大きい負荷がかけられているノードに優先して、小さな負荷がかけられているノードに移動される。ノードが多数の仮想サーバをサポートするので、通常の作動中及び故障がない場合でさえ、このように負荷を平衡させることができる。
一般に、別の態様において、本発明は、フェイルオーバーの発生を最小にするために、各々のノードが単一のサブネット又は異なるサブネット内に多数のネットワーク・ポートを有するシステム、プログラム、及び方法を提供する。（サブネットは、同じ接頭部を有するＩＰアドレスを提供することによって共通のアドレス・コンポーネントを共有するネットワークの一部分である。）ポートの１つが故障した場合には、サービスは、生き残っているポートの１つに移動される。このことは、フェイルオーバーを呼び出すことなく、多数のネットワーク・ポートの故障が生じることを可能にするので、フェイルオーバーは、生き残っているポートがない場合にだけ起こる。
【００１２】
本発明の実施は、次の利点の１つ又はそれ以上を実現させることができる。フェイルオーバーが最後の手段としてだけ用いられ、その結果フェイルオーバーにより引き起こされる混乱が制限される。負荷の平衡を通してシステム全体の性能が改善される。故障が生じたとき、低い優先順位のサービスを任意に排除することによって、システム全体の性能が改善される。
本発明の１つ又はそれ以上の実施形態の詳細が、添付の図面及び下記の説明において述べられる。本発明の他の特徴及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
【００１３】
（発明を実施するための最良の形態）
種々の図面における同じ参照記号は、同じ要素を示す。
図１は、本発明による高可用性サーバのコンポーネントを示す。このサーバは、ノードのクラスター、すなわちノードＡ１０１、ノードＢ１０２、・・・、ノードＪ１０３を有する。各々のノードは、１つ又はそれ以上の仮想サーバを有する。ノードＡは、ＶＳＡ１、ＶＳＡ２、・・・ＶＳＡｎ１と表記されたｎ１個の仮想サーバを有する。ノードＢは、ＶＳＢ１、ＶＳＢ２、・・・ＶＳＢｎ２と表記されたｎ２個の仮想サーバを有する。ノードＪは、ＶＳＪ１、ＶＳＪ２、及びＶＳＪｎ３と表記されたｎ３個の仮想サーバを有する。各々のノードは、ストレージ・ネットワーク１１０を通じて１つ又はそれ以上のストレージ・システムに接続される。サーバは、ある数のストレージ・システム１２１、１２２、１２３を有する。図１に示されるように、各々の仮想サーバは、１つ又はそれ以上のファイル・システム１２１ａ、１２１ｂ、１２１ｃ、１２２ａ、１２２ｂ、１２２ｃ、１２３ａ、１２３ｂ、１２３ｃを所有する。全てのノードにアクセス可能な共用ディスク１２４がある。この共用ディスクは、スクリブル・ディスク（scribble disk）と呼ばれ、状態及び設定データを含む。ストレージ・ネットワーク１１０は、ファイバー・チャネル、ＳＣＳＩ、ｉＳＣＳＩ、ＩｎｆｉｎｉＢａｎｄ、又は他のこのような技術とすることができる。クライアント１０５、１０６、及び１０７は、ネットワーク１、ネットワーク２、・・・ネットワークＮといった１つ又はそれ以上のネットワーク１０４を通じてノードに接続される。各々のノードは少なくとも１つの物理ポートを有し、１つ以上の仮想アドレスが同じ物理ポート上にあってもよい。ＲＡＩＤストレージ・インターフェース１１２が、全てのノードに論理ボリュームのサポートを提供する。各々の論理ボリュームは、例えば、ＲＡＩＤ０、１、５、１＋０、又は５＋０設定のような多数のディスクから成っていてもよい。
【００１４】
仮想サーバは、他の仮想サーバ専用のファイル・システム及び仮想ＩＰアドレスを所有する。仮想サーバは、物理サーバ上で他の物理ソースを共有する。仮想サーバは、他の仮想サーバが専有するリソースを見ることができず、そのリソースは、別個のエンティティとして管理される。リソース（仮想ＩＰアドレス及びファイル・システム）をグループ化するために仮想サーバを用いることは、フェイルオーバー中にリソースを移動させることを容易にし、各々のリソースを個々に取り扱うより効率的である。
各々のノードは、物理ＩＰポート（ＰＩＰ）とも呼ばれる多数のネットワーク・ポートを有することができる。１つのノードが故障した場合には、ノードは、該ノード上に正常なネットワーク・ポートがある限り回復する。ノード上の最後のポートの故障により、正常なノードへのフェイルオーバーがもたらされる。
クラスター内のノードは、マスター又はスレーブのいずれかとして働く。マスターは１つしかなく、残りのノードはスレーブである（或いは、例えば、移動状態においては、いずれでもない）。マスターは、スレーブの活動を調整する。スレーブは、該スレーブが制御するリソースをマスターに報告する。スレーブ・サーバは、それぞれのリソース及び状態だけを知っている。マスターは、クラスター全体についての状態情報を保持する。マスターは、サーバの負荷についての情報も保持し、それらは、システムがその仕事を多かれ少なかれ均等に正常なノード内に分割しようとする負荷の平衡中に用いられる。
【００１５】
通常の操作中、各々のノードはそのＣＰＵの使用及びそのＩＯＰＳ（「１秒当たりのＩ／Ｏ操作」）の総数を測定する。ＩＯＰＳの数は、クライアントにアクセスされたときノードにかかる全体の負荷を示す。この情報は、共用ディスク又はネットワークによってマスターに伝えられる。特定のノード上のＣＰＵ使用及び／又はＩＯＰＳの数がしきい値を超えた場合には、マスターは他のノードの負荷を調べる。より多くの仕事を取り扱うことができるノードがシステム内にある場合には、マスターは仮想サーバの一部をそのノードに移動させる。その目的は、仕事を正常なノードの間に多かれ少なかれ均等に分けることである。負荷の平衡をトリガするＣＰＵ及び／又はＩＯＰＳ負荷についてのしきい値は設定可能なパラメータであり、このしきい値は、システムへの管理インターフェースを通じて制御することができる。
同じノードの中で、正常なネットワーク・ポートの中で仮想インターフェースを再分配することによって、ネットワーク・ポート間にかかる負荷を平衡させることができる。ノード内のソフトウェアは、該ノードの物理ポートにかかる負荷を監視する。あるポートが実質的に他のポートより多いネットワーク・トラフィックを取り扱っている場合には、仮想インターフェースの一部が、あまり混んでいないポートに移動させられる。どの仮想インターフェースを移動させるかについての選択は、各々の仮想インターフェースがどれだけの量のトラフィックを実行しているかに基づくことができる。
【００１６】
クラスターにおいて、リソースは、ノード間のネットワーク接続及び共用ディスクを通じて作動し、各々のサーバの可用性を定めるハートビート・プロトコルによって監視される。ノードは、該ノードがハートビート・メッセージの受信を停止するとき、別のノードの故障について知る。ネットワーク接続を通じたハートビートは、ピング及び／又はＲＰＣ（遠隔手続呼び出し）コールを用いてスレーブを調べるマスターに基づいている。プライベート・ネットワーク又は公衆ネットワークのいずれかで、ピングを実施することができる。公衆ネットワークを用いて、ＲＰＣに基づいたハートビートを送ることができる。
マスターが特定の時間（例えば、３秒）以内にスレーブからの応答を受け取らない場合には、スレーブに到達できないか、又はスレーブに他の問題がある。マスターがピング又はＲＰＣを送るのを停止した場合には、スレーブは、マスターに到達できなかったか、マスターに他の問題があると推測する。クラスター内の生き残っているノードの１つが、接続性がある又はノードの１つに他の問題があると判断した場合には、該生き残っているノード、他のノードが本当に死んだのか、又は単に到達不能であるのかを依然として判断しなければならない。
【００１７】
ピング及び／又はＲＰＣを通じたハートビートがノードの故障を検知した後、共用ディスクを通じたハートビートを用いて、故障したノードが本当に死んだのか、又は単に到達不能であるのかを見出す。死んだノードがマスターである場合には、スレーブの１つが新しいマスターになる。全てのネットワーク接続を失う可能性を取り扱うために、共用ディスク（スクリブル・ディスク）を通じたハートビートが実施される。スクリブルすることによって、言い換えれば、スクリブル・ディスクに書き込み、これを読み取ることによって、ノードは、該ノードの状態についての情報を交換する。マスター及びスレーブについてのスクリブル期間は、クラスターの状態によって変わる。通常の作動中、マスターは、例えば６０秒当たり１スクリブルの速度で、ゆっくりとスクリブルする。マスターがスレーブを失う場合には、該マスターは、例えば３秒毎に１スクリブルの速度で迅速にスクリブルする。マスターにより制御されるスレーブはスクリブルしない。最近マスターを失ったスレーブは、例えば３秒毎に１スクリブルの速度で迅速にスクリブルする。
【００１８】
図２は、１つの実施がどのようにネットワークの故障を取り扱うかを示す。ノードが多数のネットワーク・ポートを有し、そのポートの１つが故障した場合には、ノードはフェイルオーバーなしに回復する。図２は、ノード１、ノード２、・・・、ノードＮを示す。ノード１は、１ＰＩＰ１、１ＰＩＰ２、１ＰＩＰ３、・・・、１ＰＩＰｎ−１、１ＰＩＰｎ１と表記されたｎ１のネットワーク・ポートを有する。ノード２は、２ＰＩＰ１、２ＰＩＰ２、２ＰＩＰ３、・・・、２ＰＩＰｎ−１、２ＰＩＰｎ２と表記されたｎ２のネットワーク・ポートを有する。ノードＮは、ＮＰＩＰ１、ＮＰＩＰ２、ＮＰＩＰ３、・・・、ＮＰＩＰｎｎと表記されたｎｎ個のネットワーク・ポートを有する。例として、ノード１が、仮想サーバに付けられた仮想ＩＰアドレスを有すると仮定する。矢印で示されるように、ポート１ＰＩＰ１が故障した場合、ＶＩＰ１が１ＰＩＰ２に移動させられる。これは同じノード1内であるので、このことによってフェイルオーバーは起きない。１ＰＩＰ２、１ＰＩＰ３、・・・１ＰＩＰｎ−１が故障した場合にも同じことが起こる。しかしながら、ノード１の他の全てのＰＩＰが故障した後に１ＰＩＰｎ１が故障した場合、フェイルオーバーが起こり、ＶＩＰ１はノード２内の２ＰＩＰ１に移動させられる。同じことが他のノードについても起きる、すなわち、同じノード内では仮想ＩＰアドレスは別の物理ポートに移動し、現在のノード内の全ての物理ポートが故障したときにだけフェイルオーバーが起こる。ノード内又は他の場合では、故障したポートと同じサブネット内のポート又は異なるサブネット内のポートに、仮想ＩＰアドレスを移動させることができる。１つの実施においては、異なるサブネット内のポートに優先して、同じサブネット内のポートが選択される。
上記の例においては、仮想サーバは１つの仮想ＩＰアドレスだけを有するものとして説明された。しかしながら、単一の仮想サーバを１つ以上のＩＰアドレスに付けることができ、ノードが多くの物理及び仮想ＩＰアドレスを有することができる。
【００１９】
図３及び図４は、フェイルオーバーを強制することなく、仮想ネットワーク・インターフェースを移動させるための別の技術を示す。この図は、２つの組の仮想サーバ、すなわちＶＳＡ１、・・・、ＶＳＡｎ１及びＶＳＢ１、・・・、ＶＳＢｎ２を実行する２つのノードを示す。図３において、２つの仮想ＩＰアドレス、ＶＡ１１及びＶＡ１２が、仮想サーバＶＳＡ１に付けられる。図を簡単化するために、他の仮想サーバに付けられた仮想ＩＰアドレスは示されていない。Ｎｅｔ１及びＮｅｔ２は、異なるサブネットである。クライアント３０５は、Ｎｅｔ１に接続されたクライアントであり、クライアント３０６は、Ｎｅｔ２に接続されたクライアントである。ＨＢ１及びＨＢ２は、ネットワーク・ハブ又はスイッチである。クライアント３０６は、Ｎｅｔ２を通じてノードＡ内の仮想サーバと通信する。
図４は、Ｎｅｔ２を通じた通信が故障したときに何が起こるかを示す。仮想ＩＰアドレスＶＡ１２は、ノードＡ３１０からノードＢ３２０内の物理ポートＰＩＰ３に移動される。ネットワーク・フェイルスルーはクライアントにあまり混乱を与えないので、仮想サーバのフェイルオーバーではなく、ネットワーク・フェイルスルーが用いられる。先に述べたように、仮想ＩＰアドレスが物理インターフェースに付けられる時はいつでも、また、仮想アドレスが別のインターフェースに移動される時には、無償ＡＲＰパケットが生成される。
【００２０】
図４に示されるように、Ｎｅｔ２の故障後、クライアント３０６からのデータが、ＶＡ１２が移動されたＰＩＰ３を通してノードＢにより受け取られる。ノードＢ内の経路指定（ルーティング）ソフトウェア３２２が、ＰＩＰ４によりデータをノードＡに送る。ノードＡからのデータは、ノードＢ内のＰＩＰ４及びＰＩＰ３によって、ＰＩＰ１を通してクライアント３０６に送られる。
ＮＦＳファイル・システムをサポートする１つの実施において、ＮＦＳファイル・ロックが、共用ディスク内に格納される。各々の仮想サーバは、対応するＮＦＳファイル・ロックを所有する。フェイルオーバー中、ロックの所有権は、仮想サーバに従う。したがって、仮想サーバ及び対応するＮＦＳロックは、正常なノードに移動される。結果として、クライアントがＮＦＳロックを管理する必要性はない。
【００２１】
図５は、上にクラスターが形成された基礎になるストレージ・インフラストラクチャを詳しく説明する。ノード７００、７０２、・・・、及び７７０は、クラスターのノードである。これらのノードは、適切なプロトコルのバス・アダプタを配置し、ＳＣＳＩ、ファイバー・チャネル・アービトレート型ループ、ファイバー・チャネル・ファブリック、ＩｎｆｉｎｉＢａｎｄ、ｉＳＣＳＩ、又は他の適切なバス又はファブリックのような、共用ストレージ・バス又はファブリック７０４に接続する。多数のリンク７０６及び７０８、７１０及び７１２、７２０及び７２２は、各々のノードを共用バス又はファブリック７０４に接続させる。こうした多数のリンクは、システムが１つのリンク故障を許容することを可能にする。さらに別のリンクを設けることもできる。共用ストレージ・ユニット（多数のストレージ・システム）７１８は、少なくとも２つのリンク７１４及び７１８によってバス又はファブリック７０４に接続された１つ又はそれ以上の故障許容度の共用ストレージ・ユニット（ＲＡＩＤ５又はＲＡＩＤ１アレイのような）としてもよい。このインフラストラクチャは、単一障害ポイントを生き延びる。多数の故障は、共用ストレージ・ユニット７１８へのアクセスを完全に失わせる。
１つの有利な実施において、クラスター・ノード内の二重ファイバー・チャネル・アービトレート型ループのホスト・バス・アダプタが、二重ファイバー・チャンネル・アービトレート型ループに接続する。このことは、ＦＣ−ＡＬ（ファイバー・チャネル・アービトレート型ループ）ＲＡＩＤ（独立ディスクの冗長アレイ）ボックスのようなファイバー・チャネル・ターゲットがファイバー・チャネル・アービトレート型ループ・ホストに付けられることを可能にする。ＲＡＩＤ５（パリティ）又はＲＡＩＤ１（ミラー）アレイのような共用ストレージ・ユニットは、ＲＡＩＤボックス上に定められる。
【００２２】
共用ストレージ・ユニット７１８には、各々のクラスター・ノードからアクセスできるが、一般に、異なるノードについては異なるルートによる。したがって、各々のノード上の共用ストレージの各々をクラスター全体の名前と共に認識することは有利である。同じストレージ空間への経路が、異なるクラスター・ノードにおいて異なるので、経路情報を反映するローカル・デバイス名を用いる場合に、デバイス名を共用ストレージ空間に結びつける困難が未然に防がれる。このことを達成するために、各々の共用ストレージ・ユニット７１８に関連した固有識別子が用いられる。適切な識別子は、共用ストレージ・ユニット７１８が定義されるＦＣ  ＲＡＩＤコントローラのワールドワイドＩＤ（ＷＷＩＤ）である。グローバルにアクセス可能なネーム・サーバ・データベースを用いて、管理者が選択した名前を共用ストレージ・ユニットの各々の固有識別子と関連させる。データベースは、スクリブル・ディスク内、クラスターの外側であるが全てのクラスター・ノードにアクセス可能なサーバ内といった、便利でグローバルにアクセス可能な場所に格納することができる。クラスター・ノードが共用ストレージ・ユニットを見つけ、該共用ストレージ・ユニットの固有識別子について問い合わせた後、該クラスター・ノードは、ネーム・サーバに相談する。ネーム・サーバに相談することによって、クラスター・ノードは、共用ストレージ・ユニット（１つ以上であってもよく、一般的には１つ以上である）をクラスター全体の装置名に対して解釈する。
【００２３】
クラスター・ノードが共用ストレージ・ユニットへの多数の経路を有するので、同じ共用ストレージ・ユニットへの、しかしながら異なる経路によるＩ／Ｏ（すなわち、入力／出力又はデータ転送）要求を交互させることによって、負荷を平衡させることができる。例えば、クラスター・ノード７００は、リンク７０６と７０８との間でデータ転送要求を交互させることによって負荷を平衡させることができる。このことは、共用ストレージ・ユニットにアクセスするのに利用可能な全体の帯域幅を増加させることによって、クラスター・ノードのためになる。
単一障害ポイント又は２つ以上の障害ポイントを生き延びるように設計を構成することができる。設計の頑丈さは、３つの要因によって決まる。第１は、各々のノードと共用ストレージ・バス又はファブリック７０４との間のリンクの数である。第２の要因は、共用ストレージ・バス又はファブリック７０４とデータ・ストレージ・ユニット７１８との間のリンクの数である。図５に示されるように各々の対の要素の間に２つのリンクだけしかない場合には、設計は、単一障害ポイントを許容することができる。クラスター・ノード内に多数のバス・アダプタがある場合には、バス・アダプタが故障することがあり、共用ストレージ・ユニットへのデータ転送要求が半分の帯域幅性能で継続することができる。関連した物理インターフェース（ケーブルのような）が故障することもある。ケーブルの如何なる単一障害ポイントも同様に許容される。リンクの数が２つであるために、リンクの数を増加させることによって、単一障害ポイントの許容をより高いものに改善することができる。共用ストレージ・ユニットは、メンバー・ドライブの故障を許容することができる故障許容度のＲＡＩＤアレイである。同じ共用ストレージ・ユニットを制御するために多数のＲＡＩＤコントローラが用いられる場合には、ＲＡＩＤコントローラの故障が許容される。
【００２４】
共用ストレージ・ユニットは、独占的なノード使用を保証するようにロックするノードの所有権によって保護される。各々のノードは、他のノードの共用ストレージ・ユニット所有権を知っている。共用ストレージ・ユニットが他のノードにより所有されていることとノードが判断した場合には、該ノードは、そのノード上で利用できないものとして該共用ストレージ・ユニットをマークする。
仮想ストレージ技術のようなストレージ抽象化は、ノードが、多数の共用ストレージ・ユニットにわたる仮想ストレージ・ユニットに及ぶことを可能にする。このことは、故障許容度及び性能を改善する。多数の共用ストレージ・ユニットを用いて、仮想ストレージ装置をノード上に形成することができる。これらの仮想ストレージ装置は、異なるストレージ・コントローラにより制御された多数の共用ストレージ・ユニット間にわたり、効率的なデータ保護及びデータ転送性能特徴をサポートすることができる。仮想ストレージ・ユニットを、多数の共用ストレージ・ユニットの連結、ミラー、又はストライプとすることができる。
連結が提供する利点は、ボリュームの拡張である。共用ストレージ・ユニットが別の共用ストレージ・ユニットと連結される際には、第１のものが一杯になると、第２の共用ストレージ・ユニットが用いられる。
【００２５】
共用ストレージ・ユニットのストライプを用いる場合、連続的なＩ／Ｏ要求が種々のメンバーの共用ストレージ・ユニットの中で交互に起こる。ストライプされた仮想ストレージ装置により、拡張及び機能がもたらされる。データ転送要求は、異なる共用ストレージ・ユニットにわたってパラレルに分散されるので、ノードは、単一の共用ストレージ・ユニットの使用と比べて高い処理能力を有する。
２つの異なる共用ストレージ・ユニットの仮想ストレージ・ミラー（ＲＡＩＤ１）を用いる場合、Ｉ／Ｏ作業は、各々のメンバーの共用ストレージ・ユニット上に複製される。ミラーからの読み取り作業は、所定の最小シーク時間でメンバーから読み取ることによって増強される。ミラーが損傷し、損傷した部材が正しく交換されたと判断された場合には、ミラーの同期化が自動的に行われる。ミラーリングされた仮想ストレージ装置は、共用ストレージ・ユニットを完全に失うことを許容することによって、故障許容度の別の層をもたらす。ミラーリングされた仮想ストレージ装置を配置することによって、クラスターの故障許容能力が２倍に増加される。
【００２６】
図６は、本発明による高可用性システムの初期化を示す。段階１１００において、システム・クラスター内の全てのノードは、スクリブル・ディスクとして用いられる同じ共用ストレージ・ユニットの方を指すように設定される。段階１１０１において、１つのノードが割り当てられ、スクリブル・ディスクを初期化する。初期化は、設定ファイルからデータを取り出すことを含む。段階１１０２において、高可用性ソフトウェアが、ノードの１つにおいて開始される。このノードは、クラスターのマスター・サーバになる。段階１１０３において、高可用性ソフトウェアが、全ての他のノード上で開始される。これらのノードは、クラスターのスレーブである。段階１１０４において、マスターは、仮想サーバをスレーブに割り当てる。所望であれば、この段階を手作業で行うことができる。
【００２７】
図７は、多数のネットワーク・ポートを有するノードがどのようにネットワーク障害を検知し、取り扱うかを示す。ここに説明されるように、ノードは、ポートの各々を試験することによってこのことを行う。段階１２００において、ノードは、試験されたポートを用いて、ピンジ・パケットを前に到達された外部ポートに頻繁に（３秒毎といった）送る。ピンギングの頻度は設定可能である。決定段階１２０２において、ノードは、ピングへの応答が処置の待ち時間（２５０ｍｓｅｃ（ミリ秒））内に受け取られたかどうかを判断する。待ち時間もまた同様に設定可能である。段階１２０１において、応答が受け取られた際には、試験されたポートを良好なものとしてマークする。他の場合には、段階１２０３において、ノードに知られている到達可能な外部ＩＰアドレスがグループに分けられる。グループ内のアドレスの総数は設定可能である。段階１２０４において、ピング・メッセージが、１度に１グループ、各々のグループ内のアドレスに送られる。ブロードキャストはより費用がかかるので、このことは、ブロードキャストを用いずに行われる。決定段階１２０５において、ノードは、グループ内のいずれかのアドレスが待ち時間内に到達したかどうかを判断する。１つが到達した場合には、試験されたポートを良好なものとしてマークし、段階１２０１において実行が継続する。全てのグループ内のアドレスが到達できなかった場合には、段階１２０６において実行が継続する。段階１２０６において、ブロードキャスト・メッセージが送られる。決定段階１２０７において、待ち時間内に何らかの応答を受け取った場合には、試験されたポートを良好なものとしてマークし、段階１２０１において実行が継続する。他の場合には、ノードは、試験されたポートが不良なものであり、段階１２０８においてそのポートを不良なものとしてマークすることを決定する。
【００２８】
決定段階１３０２において、ノードは、該ノード内に正常なネットワーク・ポートがあるかどうかを判断する。ある場合には、段階１３０４において、故障したノードの仮想アドレスが正常なネットワーク・ポートに移動される。他の場合には、段階１３０３において、クラスター内の別のノードにフェイルオーバーが起動される。
図７のプロセスは、ノードが良好なものとしてマークされた物理ポートの各々について行われる。
ネットワーク・ポートの故障は、フェイルオーバーを呼び出す予想される理由の１つにすぎない。フェイルオーバーを引き起こし得る他のイベントは、ハードウェアの故障、ノード又はストレージ・システムの１つにおける電源の故障、ノードとストレージ・システムとの間のリンクの故障、ストレージ・バス又はファブリック内の回復不能な故障、及び共用ストレージ・ユニットとストレージ・バス又はファブリックとの間のリンクの故障を含む。フェイルオーバーを手動で開始することもできる。フェイルオーバーをもたらした問題を修正した後、手動でフェイルバック命令を実行し、仮想サーバをそれらの元のノードに移動することができる。
【００２９】
例えば、ファイル・システムを含む共用ストレージ・ユニットがノードによる何らかの理由のためにアクセス不能である場合には（例えば、図５に示される特定の設定におけるノード７００に関連した、リンク７０６とリンク７０８との間の故障のような、ノードとユニットとの間の接続の完全な破損のために）、アクセス不能なファイル・システムを含む仮想サーバは、そのような代替的なノードが存在する場合には、ストレージ・システムに、よってファイル・システムにアクセスできる別の物理ノードに移動される。
図８は、別のノードへの移動前に、仮想サーバがノード内で停止したときに実行される段階を示す。この例において、仮想サーバは、ＮＦＳファイル・システム及びＣＩＦＳファイル・システムの両方を有する。段階１４０１において、仮想サーバに属する全ての仮想インターフェースが停止される。段階１４０２において、いずれのＮＦＳ共有も消去される。段階１４０３において、ＮＦＳロック終結処理が行われる。段階１４０４において、仮想ＣＩＦＳ（共通インターネット・ファイル・システム）サーバ及び共有が消去される。段階１４０５において、仮想サーバに属する全てのファイル・システムがアンマウントされる。
【００３０】
図９は、仮想サーバを立ち上げるのに必要とされる段階を示す。再び、この例において仮想サーバは、ＮＦＳファイル・システム及びＣＩＦＳファイル・システムの両方を有する。段階１５０１において、ノードは、故障した仮想サーバに属する全てのファイル・システムをマウントする。段階１５０２において、仮想サーバに属する仮想インターフェースが立ち上げられる。段階１５０３において、ＮＦＳ共有が初期化される。段階１５０４において、ＮＦＳロックの回復が行われる。段階１５０５において、仮想ＣＩＦＳサーバ及び共有が初期化される。
システムは、同時に様々なファイル・システムを供給することができる。ファイル・システムは、ファイル・システムの劣化と呼ばれることもある内部のファイル・システムのメタデータの不整合のために故障することがある。システムの１つの実施において、劣化が検知された場合（これは、通常、ファイル・システム自体によって行われる）、ノード内のソフトウェアは、ＮＦＳプロトコルを用いてファイル・システムにアクセスしているクライアントに全面的な混乱を与えることなく、該ファイル・システムの修復を取り扱う。ファイル・システムの劣化の場合には、該ファイル・システムへのアクセスは、ＮＦＳクライアントに対して一時的にブロックされる。ＮＦＳプロトコルは、本質的にサーバに要求を送り続ける。ＮＦＳアクセスに対してファイル・システムをブロックした後、ソフトウェアは、クライアントがファイル・システムにアクセスするのを防止し、次にそれを修復する（例えば、ｆｓｃｋのようなユーティリティを実行することによって）。ファイル・システムを修復した後、ソフトウェアは、該ファイル・システムを再びクライアントにアクセスできるようにする。次に、ＮＦＳのブロッキングが解除され、クライアントからのＮＦＳ要求を再び供給することができるようになる。その結果、クライアント上のアプリケーションは、故障することなくしばらくの間フリーズするが、一旦ファイル・システムがオンラインにもどると再開する。
【００３１】
システムの管理設定を何らかの従来の方法で行うことができる。例えば、システム・ノード上又は独立したパーソナル・コンピュータ上で動作するアプリケーション・プログラムは、システムの設定及び作動を制御するのに用いられるパラメータを定義し、修正することができる。上述の実施において、こうしたパラメータは、スクリブル・ディスク上に配置された設定ファイル内に格納されるが、設定データは、データベース内又は他の方法で如何なる数のファイル内にも格納することができ、何らかの適切な手段を通じてシステムに提供することができる。
特定の態様において、プログラム可能なプロセッサによって実行するための機械可読ストレージ装置で確実に具体化されるコンピュータ・プログラム製品において、本発明を実施することができ、本発明の方法段階は、入力データを操作し、出力を生成することによって本発明の機能を実行する命令のプログラムを実行するプログラム可能なプロセッサにより実行することができる。例として、適切なプロセッサには、汎用マイクロプロセッサ及び特殊用途マイクロプロセッサが含まれる。一般に、プロセッサは、読取り専用メモリ及び／又はランダム・アクセス・メモリから命令及びデータを受け取る。コンピュータ・プログラム命令及びデータを明確に具体化するのに適切なストレージ装置は、例として、半導体メモリ装置、内部のハードウェア及び着脱可能なディスクのような磁気ディスク、光磁気ディスク、及びＣＤ−ＲＯＭディスクを含む全ての形態の不揮発性メモリを含む。前述のいずれも、ＡＳＩＣ（特定用途向け集積回路）によって補うことができ、或いは、ＡＳＩＣ内に組み込むことができる。
【００３２】
ユーザとの対話を提供するために、情報をユーザに表示するためのモニタ又はＬＣＤスクリーンのような表示装置、及びユーザがコンピュータ・システムに入力することができるキーボード及びマウス又はトラックボールのような位置指示装置を有するコンピュータ・システム上で本発明の態様を実施することができる。コンピュータ・システムをプログラムし、コンピュータ・プログラムがユーザと対話するグラフィカル・ユーザ・インターフェースを提供することもできる。
本発明は、特定の実施形態に関して説明された。他の実施形態は、上記の特許請求の範囲の範囲内にある。例えば、本発明の段階を異なる順序で実行し、依然として望ましい結果を達成することができる。
【図面の簡単な説明】
【００３３】
【図１】本発明の１つの態様による高可用性サーバ・システムのブロック図である。
【図２】ネットワーク・フェイルオーバーが、どのように仮想サーバのフェイルオーバーの前に用いられるかを示す図である。
【図３】仮想サーバ・フェイルオーバーの前のネットワーク・フェイルスルーに基づいた本発明の実施形態である。
【図４】フェイルオーバー後の図３に示されたものと同じ実施形態である。
【図５】高可用性サーバ・クラスターのためのストレージ・インフラストラクチャを示す。
【図６】高可用性サーバ・クラスターの初期化を示すフローチャートである。
【図７】ネットワーク・ポートの故障回復を示すフローチャートである。
【図８】仮想サーバの停止を示すフローチャートである。
【図９】仮想サーバの立ち上げを示すフローチャートである。
【図１】
2004537126.tif 000002
【図２】
2004537126.tif 000003
【図３】
2004537126.tif 000004
【図４】
2004537126.tif 000005
【図５】
2004537126.tif 000006
【図６】
2004537126.tif 000007
【図７】
2004537126.tif 000008
【図８】
2004537126.tif 000009
【図９】
2004537126.tif 000010
【国際公開パンフレット】
2004537126.tif 000011
2004537126.tif 000012
2004537126.tif 000013
2004537126.tif 000014
2004537126.tif 000015
2004537126.tif 000016
2004537126.tif 000017
2004537126.tif 000018
2004537126.tif 000019
2004537126.tif 000020
2004537126.tif 000021
2004537126.tif 000022
2004537126.tif 000023
2004537126.tif 000024
2004537126.tif 000025
2004537126.tif 000026
2004537126.tif 000027
2004537126.tif 000028
2004537126.tif 000029
2004537126.tif 000030
2004537126.tif 000031
2004537126.tif 000032
2004537126.tif 000033
2004537126.tif 000034
2004537126.tif 000035
2004537126.tif 000036
2004537126.tif 000037
2004537126.tif 000038
2004537126.tif 000039
【国際調査報告】
2004537126.tif 000040
2004537126.tif 000041