(57)【特許請求の範囲】
【請求項１】
複数の計算機と、ネットワークを介して前記複数の計算機に接続される記憶装置と、を備える計算機システムであって、
前記複数の計算機は、第１計算機、第２計算機及び第３計算機を含み、
前記第１計算機は、前記ネットワークに接続される第１インターフェースと、前記第１インターフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１メモリと、を備え、
前記第２計算機は、前記ネットワークに接続される第２インターフェースと、前記第２インターフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２メモリと、を備え、
前記第３計算機は、前記ネットワークに接続される第３インターフェースと、前記第３インターフェースに接続される第３プロセッサと、前記第３プロセッサに接続される第３メモリと、を備え、
前記第１計算機は、
前記複数の計算機に接続されたクライアント計算機から前記記憶装置内の記憶領域へのアクセス要求を受信すると、前記要求されたアクセスを実行し、
前記アクセス要求に対する応答を前記クライアント計算機に送信し、
前記第２計算機は、
前記第１計算機に障害が発生したか否かを判定し、
前記第２計算機の負荷情報を取得し、
前記第３計算機から前記第３計算機の負荷情報を取得し、
前記第３計算機の負荷情報と前記第２計算機の負荷情報とを比較し、前記第３計算機の負荷が前記第２計算機の負荷より低いと判定された場合、前記第３計算機に、前記第１計算機が提供していたサービスの引き継ぎ手の変更要求を送信し、
前記第３計算機は、
前記第２計算機に障害が発生したか否かを判定し、
前記第２計算機から前記引き継ぎ手の変更要求を受信したか、又は、前記第２計算機に障害が発生したと判定した場合、前記第１計算機に障害が発生したか否かを判定することを特徴とする計算機システム。
【請求項２】
前記第２計算機は、前記第１計算機に障害が発生した場合、
前記引き継ぎ手の変更要求を前記第３計算機に送信し、
クライアント計算機から前記記憶装置内の記憶領域へのアクセス要求を受信すると、前記要求されたアクセスを実行し、
前記アクセス要求に対する応答を前記クライアント計算機に送信することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記第１計算機に障害が発生したと判定された場合、前記第２計算機は、前記クライアント計算機からの前記アクセス要求の宛先として前記第１計算機に設定されていたアドレスと同一のアドレスを前記第２計算機に設定することを特徴とする請求項２に記載の計算機システム。
【請求項４】
前記複数の計算機は、さらに第４計算機を含み、
前記第４計算機は、前記ネットワークに接続される第４インターフェースと、前記第４インターフェースに接続される第４プロセッサと、前記第４プロセッサに接続される第４メモリと、を備え、
前記第２計算機は、さらに、
前記第４計算機から前記第４計算機の負荷情報を取得し、
前記第４計算機の負荷情報と前記第３計算機の負荷情報とを比較し、
前記第３計算機の負荷が前記第４計算機の負荷より低く、かつ、前記第３計算機の負荷が前記第２計算機の負荷より低いと判定された場合、前記第３計算機に前記引き継ぎ手の変更要求を送信し、
前記第４計算機の負荷が前記第３計算機の負荷より低く、かつ、前記第４計算機の負荷が前記第２計算機の負荷より低いと判定された場合、前記第４計算機に前記引き継ぎ手の変更要求を送信し、
前記第４計算機は、
前記第２計算機から前記引き継ぎ手の変更要求を受信すると、前記第１計算機に障害が発生したか否かを判定することを特徴とする請求項１に記載の計算機システム。
【請求項５】
前記第２計算機は、
前記第３計算機の負荷が前記第４計算機の負荷より低いと判定された場合、前記第３計算機を識別する情報を含む優先情報を前記第３計算機及び前記第４計算機に送信し、
前記第３計算機は、
前記第２計算機に障害が発生したと判定され、かつ、前記第２計算機から最後に受信した前記優先情報が前記第３計算機を識別する情報を含む場合、前記第１計算機に障害が発生したか否かを判定することを特徴とする請求項４に記載の計算機システム。
【請求項６】
前記第１計算機は、所定のタイミングで所定の信号を送信し、
前記第２計算機は、所定のタイミングで前記所定の信号を受信できなかった場合、前記第１計算機に障害が発生したと判定し、
前記第２計算機は、所定のタイミングで前記第３計算機及び前記第４計算機に負荷情報取得要求を送信し、前記第３計算機及び前記第４計算機から前記負荷情報を含む応答を受信することによって、前記第３計算機及び前記第４計算機の負荷情報を取得し、
前記第３計算機は、所定のタイミングで前記負荷情報取得要求を受信できなかった場合、前記第２計算機に障害が発生したと判定することを特徴とする請求項５に記載の計算機システム。
【請求項７】
前記計算機システムに、前記複数の計算機の一つとして、前記ネットワークに接続される第４インターフェースと、前記第４インターフェースに接続される第４プロセッサと、前記第４プロセッサに接続される第４メモリと、を備える第４計算機が追加された場合、
前記第４計算機は、
前記第２計算機に前記第４計算機の負荷情報を送信し、
前記第２計算機から前記引き継ぎ手の変更要求を受信すると、前記第１計算機に障害が発生したか否かを判定することを特徴とする請求項１に記載の計算機システム。
【請求項８】
前記第１計算機は、第１ユーザによる前記記憶装置内の第１記憶領域に対する前記アクセス要求に応答する第１サービスを提供し、
前記第２計算機は、
前記第１サービスを提供する前記第１計算機に対する第１障害監視要求を送信し、
前記第１計算機から前記第１障害監視要求に対する応答を所定のタイミングで受信できなかった場合、前記第１計算機に障害が発生したと判定し、
前記複数の計算機のうち一つは、第２ユーザによる前記記憶装置内の第２記憶領域に対するアクセス要求に応答する第２サービスを提供させる指示を受信した場合、
前記第２サービスを提供する前記複数の計算機の少なくとも一つに対する第２障害監視要求を送信し、
前記複数の計算機のうち一つ以上の前記計算機の負荷情報を取得し、
前記第２障害監視要求に対する応答を所定のタイミングで受信できなかった場合、前記一つ以上の計算機のうち負荷が最も低いものに前記引き継ぎ手の変更要求を送信し、
前記第２サービスを提供することを特徴とする請求項１に記載の計算機システム。
【請求項９】
前記各計算機の負荷情報は、前記各計算機の負荷を示す値を含み、
前記各計算機の負荷を示す値は、前記各計算機が備えるプロセッサの使用率、前記各計算機が備えるメモリの使用率、前記各計算機による前記ネットワークの使用率、前記各計算機による前記記憶装置に対するアクセス回数、及び、前記各計算機において稼動するプロセスの数の少なくとも一つを含むことを特徴とする請求項１に記載の計算機システム。
【請求項１０】
複数の計算機と、ネットワークを介して前記複数の計算機に接続される記憶装置と、を備える計算機システムの制御方法であって、
前記複数の計算機は、第１計算機、第２計算機及び第３計算機を含み、
前記第１計算機は、前記ネットワークに接続される第１インターフェースと、前記第１インターフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１メモリと、を備え、
前記第２計算機は、前記ネットワークに接続される第２インターフェースと、前記第２インターフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２メモリと、を備え、
前記第３計算機は、前記ネットワークに接続される第３インターフェースと、前記第３インターフェースに接続される第３プロセッサと、前記第３プロセッサに接続される第３メモリと、を備え、
前記方法は、
前記第１計算機が、前記複数の計算機に接続されたクライアント計算機から前記記憶装置内の記憶領域へのアクセス要求を受信すると、前記要求されたアクセスを実行する手順と、
前記第１計算機が前記アクセス要求に対する応答を前記クライアント計算機に送信する手順と、
前記第２計算機が前記第１計算機に障害が発生したか否かを判定する手順と、
前記第２計算機が前記第２計算機の負荷情報を取得する手順と、
前記第２計算機が前記第３計算機から前記第３計算機の負荷情報を取得する手順と、
前記第２計算機が、前記第３計算機の負荷情報と前記第２計算機の負荷情報とを比較する手順と、
前記比較の結果、前記第３計算機の負荷が前記第２計算機の負荷より低いと判定された場合、前記第２計算機が前記第３計算機に、前記第１計算機が提供していたサービスの引き継ぎ手の変更要求を送信する手順と、
前記第３計算機が前記第２計算機に障害が発生したか否かを判定する手順と、
前記第３計算機が前記第２計算機から前記引き継ぎ手の変更要求を受信したか、又は、前記第２計算機に障害が発生したと判定した場合、前記第３計算機が前記第１計算機に障害が発生したか否かを判定する手順と、を含むことを特徴とする方法。
【請求項１１】
前記方法は、さらに、
前記第１計算機に障害が発生した場合、前記第２計算機が前記引き継ぎ手の変更要求を前記第３計算機に送信する手順と、
前記第１計算機に障害が発生した場合、前記第２計算機が、前記クライアント計算機からの前記アクセス要求の宛先として前記第１計算機に設定されていたアドレスと同一のアドレスを前記第２計算機に設定する手順と、
前記第２計算機が前記設定されたアドレスを宛先とするアクセス要求を受信すると、前記第２計算機が前記要求されたアクセスを実行する手順と、
前記第２計算機が前記アクセス要求に対する応答を前記クライアント計算機に送信する手順と、を含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記複数の計算機は、さらに第４計算機を含み、
前記第４計算機は、前記ネットワークに接続される第４インターフェースと、前記第４インターフェースに接続される第４プロセッサと、前記第４プロセッサに接続される第４メモリと、を備え、
前記方法は、さらに、
前記第２計算機が前記第４計算機から前記第４計算機の負荷情報を取得する手順と、
前記第２計算機が前記第４計算機の負荷情報と前記第３計算機の負荷情報とを比較する手順と、を含み、
前記第２計算機が前記第３計算機に前記引き継ぎ手の変更要求を送信する手順は、前記第３計算機の負荷が前記第４計算機の負荷より低く、かつ、前記第３計算機の負荷が前記第２計算機の負荷より低いと判定された場合に実行されることを特徴とする請求項１０に記載の方法。
【請求項１３】
前記方法は、さらに、
前記第３計算機の負荷が前記第４計算機の負荷より低いと判定された場合、前記第２計算機が、前記第３計算機を識別する情報を含む優先情報を前記第３計算機及び前記第４計算機に送信する手順と、
前記第２計算機に障害が発生したと判定され、かつ、前記第２計算機から最後に受信した前記優先情報が前記第３計算機を識別する情報を含む場合、前記第３計算機が、前記第１計算機に障害が発生したか否かを判定する手順と、を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記計算機システムに、前記複数の計算機の一つとして、前記ネットワークに接続される第４インターフェースと、前記第４インターフェースに接続される第４プロセッサと、前記第４プロセッサに接続される第４メモリと、を備える第４計算機が追加された場合、
前記方法は、さらに、前記第４計算機が前記第２計算機に前記第４計算機の負荷情報を送信する手順を含むことを特徴とする請求項１０に記載の方法。
【請求項１５】
前記第１計算機は、第１ユーザによる前記記憶装置内の第１記憶領域に対する前記アクセス要求に応答する第１サービスを提供し、
前記方法は、
前記第２計算機が前記第１サービスを提供する前記第１計算機に対する第１障害監視要求を送信する手順と、
前記第２計算機が前記第１計算機から前記第１障害監視要求に対する応答を所定のタイミングで受信できなかった場合、前記第２計算機が、前記第１計算機に障害が発生したと判定する手順と、
前記複数の計算機のうち一つが、第２ユーザによる前記記憶装置内の第２記憶領域に対するアクセス要求に応答する第２サービスを提供させる指示を受信した場合、前記指示を受信した計算機が、前記第２サービスを提供する前記複数の計算機の少なくとも一つに対する第２障害監視要求を送信し、
前記指示を受信した計算機が、前記複数の計算機のうち一つ以上の前記計算機の負荷情報を取得する手順と、
前記指示を受信した計算機が前記第２障害監視要求に対する応答を所定のタイミングで受信できなかった場合、前記一つ以上の計算機のうち負荷が最も低いものに前記指示を受信した計算機が前記引き継ぎ手の変更要求を送信する手順と、
前記指示を受信した計算機が前記第２サービスを提供する手順と、を含むことを特徴とする請求項１０に記載の方法。
【請求項１６】
複数の計算機と、ネットワークを介して前記複数の計算機に接続される記憶装置と、を備える計算機システムであって、
前記複数の計算機は、第１計算機、第２計算機、第３計算機及び第４計算機を含み、
前記第１計算機は、前記ネットワークに接続される第１インターフェースと、前記第１インターフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１メモリと、を備え、
前記第２計算機は、前記ネットワークに接続される第２インターフェースと、前記第２インターフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２メモリと、を備え、
前記第３計算機は、前記ネットワークに接続される第３インターフェースと、前記第３インターフェースに接続される第３プロセッサと、前記第３プロセッサに接続される第３メモリと、を備え、
前記第４計算機は、前記ネットワークに接続される第４インターフェースと、前記第４インターフェースに接続される第４プロセッサと、前記第４プロセッサに接続される第４メモリと、を備え、
前記第１計算機は、
前記複数の計算機に接続されたクライアント計算機から第１ユーザによる前記記憶装置内の記憶領域へのアクセス要求を受信すると、前記要求されたアクセスを実行し、前記アクセス要求に対する応答を前記クライアント計算機に送信する第１サービスを提供し、
前記第２計算機から、前記第１サービスを提供する前記第１計算機に対する第１障害監視要求を受信すると、前記第１障害監視要求に対する応答を前記第２計算機に送信し、
前記第２計算機は、
前記第１障害監視要求に対する応答を所定のタイミングで受信できなかった場合、前記第１計算機に障害が発生したと判定し、
前記第２計算機の負荷情報を取得し、
所定のタイミングで前記第３計算機及び前記第４計算機に負荷情報取得要求を送信し、前記第３計算機及び前記第４計算機から前記負荷情報を含む応答を受信することによって、前記第３計算機の負荷情報及び前記第４計算機の負荷情報を取得し、
前記第４計算機の負荷情報と前記第３計算機の負荷情報とを比較し、
前記第３計算機の負荷が前記第４計算機の負荷より低いと判定された場合、前記第３計算機の負荷情報と前記第２計算機の負荷情報とを比較し、
前記第３計算機の負荷が前記第２計算機の負荷より低いと判定された場合、前記第３計算機に、前記第１計算機が提供していたサービスの引き継ぎ手の変更要求を送信し、
前記第３計算機の負荷が前記第４計算機の負荷より低いと判定された場合、前記第３計算機を識別する情報を含む優先情報を前記第３計算機及び前記第４計算機に送信し、
記第１計算機に障害が発生したと判定された場合、前記クライアント計算機からの前記アクセス要求の宛先として設定されていたアドレスと同一のアドレスを前記第２計算機に設定し、
前記設定されたアドレスを宛先とするアクセス要求を受信すると、前記要求されたアクセスを実行し、
前記アクセス要求に対する応答を前記クライアント計算機に送信し、
前記第３計算機は、
前記第２計算機に前記第３計算機の負荷情報を送信し、
前記第２計算機から前記引き継ぎ手の変更要求を受信した場合、前記第１計算機に障害が発生したか否かを判定し、
所定のタイミングで前記負荷情報取得要求を受信できなかった場合、前記第２計算機に障害が発生したと判定し、
前記第２計算機に障害が発生したと判定され、かつ、前記第２計算機から最後に受信した前記優先情報が前記第３計算機を識別する情報を含む場合、前記第１計算機に障害が発生したか否かを判定し、
前記第４計算機は、
前記第２計算機に前記第４計算機の負荷情報を送信し、
前記第２計算機から前記引き継ぎ手の変更要求を受信すると、前記第１計算機に障害が発生したか否かを判定し、
前記計算機システムに、前記複数の計算機の一つとして、前記ネットワークに接続される第５インターフェースと、前記第５インターフェースに接続される第５プロセッサと、前記第５プロセッサに接続される第５メモリと、を備える第５計算機が追加された場合、前記第５計算機は、
前記第２計算機に前記第５計算機の負荷情報を送信し、
前記第２計算機から前記引き継ぎ手の変更要求を受信すると、前記第１計算機に障害が発生したか否かを判定し、
前記複数の計算機のうち一つは、第２ユーザによる前記記憶装置内の第２記憶領域に対するアクセス要求に応答する第２サービスを提供させる指示を受信した場合、
前記第２サービスを提供する前記複数の計算機の少なくとも一つに対する第２障害監視要求を送信し、
前記複数の計算機のうち一つ以上の前記計算機の負荷情報を取得し、
前記第２障害監視要求に対する応答を所定のタイミングで受信できなかった場合、前記一つ以上の計算機のうち負荷が最も低いものに前記引き継ぎ手の変更要求を送信し、
前記第２サービスを提供し、
前記各計算機の負荷情報は、前記各計算機の負荷の高さを示す値を含み、
前記各計算機の負荷の高さを示す値は、前記各計算機が備えるプロセッサの使用率、前記各計算機が備えるメモリの使用率、前記各計算機による前記ネットワークの使用率、前記各計算機による前記記憶装置に対するアクセス回数、及び、前記各計算機において稼動するプロセスの数の少なくとも一つを含むことを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書で開示される技術は、ストレージ装置の管理方法に関し、特に、いわゆるＮＡＳにおけるフェールオーバの管理方法に関する。
【背景技術】
【０００２】
ネットワークに接続されたストレージシステムを、そのネットワークに接続された複数のクライアント計算機の共有ディスクとして使用する、ネットワーク接続ストレージ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ、ＮＡＳ）が知られている。ＮＡＳは、ネットワークインターフェース等を含むサーバと、データを格納するディスク装置とによって構成される。ＮＡＳを構成するサーバは、ＮＡＳサーバ又はＮＡＳノードとも呼ばれる（以下の説明では、単にノードと記載する）。
【０００３】
ＮＡＳを構成するハードウェア又はソフトウェアに障害が発生してもサービスを継続的に提供するため、一般的に、二つのノードがクラスタを構成する。クラスタを構成する一方のノードに障害が発生した場合、もう一方のノードが、障害が発生したノードが提供していたサービスを引き継ぐ。その結果、サービス提供が中断せず、顧客への影響が最小限に抑えられる。このような技術は、フェールオーバと呼ばれる。
【０００４】
さらに、三つ以上のノードがクラスタを構成する技術も知られている。この場合、一つの管理サーバが一括してクラスタを管理する。このため、管理サーバに障害が発生すると、クラスタが機能しなくなる。この問題は、Ｓｉｎｇｌｅ  Ｐｏｉｎｔ  Ｆａｉｌｕｒｅと呼ばれる。Ｓｉｎｇｌｅ  Ｐｏｉｎｔ  Ｆａｉｌｕｒｅを回避するために、クラスタ内の管理サーバ以外のノードが管理サーバを監視し、管理サーバに障害が発生すると、別のノードが管理サーバとして動作する技術が開示されている（特許文献１参照）。
【特許文献１】特開２００６−３２３５２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記特許文献１によれば、管理サーバに障害が発生すると、各ノードの負荷に基づいて、新たに管理サーバとして動作するノードが選択される。このため、ノードの負荷を均衡させるために最適なノードを新たな管理サーバとして選択することができる。しかし、この場合、管理サーバに障害が発生してから新たな管理サーバが処理を引き継ぐまでの間に、新たな管理サーバの選択を実行し、さらに、管理サーバとして動作するために必要な管理情報を取得する必要がある。一方、新たな管理サーバとなるべきノードをあらかじめ決定しておけば、現在の管理サーバに障害が発生したときに新たな管理サーバが速やかに処理を引き継ぐことができる。しかし、ノードの負荷は刻々変化するものであるため、あらかじめ選択された管理サーバは、新たな管理サーバとして動作を開始する時点では、ノードの負荷を均衡させるために最適なものでない場合がある。
【課題を解決するための手段】
【０００６】
本願で開示する代表的な発明は、複数の計算機と、ネットワークを介して前記複数の計算機に接続される記憶装置と、を備える計算機システムであって、前記複数の計算機は、第１計算機、第２計算機及び第３計算機を含み、前記第１計算機は、前記ネットワークに接続される第１インターフェースと、前記第１インターフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１メモリと、を備え、前記第２計算機は、前記ネットワークに接続される第２インターフェースと、前記第２インターフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２メモリと、を備え、前記第３計算機は、前記ネットワークに接続される第３インターフェースと、前記第３インターフェースに接続される第３プロセッサと、前記第３プロセッサに接続される第３メモリと、を備え、前記第１計算機は、前記複数の計算機に接続されたクライアント計算機から前記記憶装置内の記憶領域へのアクセス要求を受信すると、前記要求されたアクセスを実行し、前記アクセス要求に対する応答を前記クライアント計算機に送信し、前記第２計算機は、前記第１計算機に障害が発生したか否かを判定し、前記第２計算機の負荷情報を取得し、前記第３計算機から前記第３計算機の負荷情報を取得し、前記第３計算機の負荷情報と前記第２計算機の負荷情報とを比較し、前記第３計算機の負荷が前記第２計算機の負荷より低いと判定された場合、前記第３計算機に、前記第１計算機が提供していたサービスの引き継ぎ手の変更要求を送信し、前記第３計算機は、前記第２計算機に障害が発生したか否かを判定し、前記第２計算機から前記引き継ぎ手の変更要求を受信したか、又は、前記第２計算機に障害が発生したと判定した場合、前記第１計算機に障害が発生したか否かを判定することを特徴とする。
【発明の効果】
【０００７】
本発明の一実施形態によれば、サービスを提供するノードに障害が発生したときに、そのサービスの提供を引き継ぐ引き継ぎ手ノードがあらかじめ決定されている。このため、障害発生時の速やかな引き継ぎが実現される。さらに、障害が発生する前にノードの負荷が変動した場合、最適なノードが引き継ぎ手ノードとなるように引き継ぎ手ノードが変更される。このため、負荷の均衡による安定した動作が実現される。これらの処理はノードによって自動的に実行されるため、運用管理コストを低減することができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施形態を、図面を参照して説明する。
【０００９】
図１は、本発明の実施形態の計算機システムのハードウェア構成を示すブロック図である。
【００１０】
本実施形態の計算機システムは、一つ以上のＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）クライアント１６０、ノード１１０Ａ〜１１０Ｅ及びディスク装置１２０を備える。
【００１１】
ＮＡＳクライアント１６０及びノード１１０Ａ〜１１０Ｅは、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１８０によって接続される。
【００１２】
ノード１１０Ａ〜１１０Ｅ及びディスク装置１２０は、ストレージネットワーク１３０によって接続される。
【００１３】
ノード１１０Ａ〜１１０Ｅは、ディスク装置１２０をＬＡＮ１８０に接続するための計算機（いわゆるＮＡＳサーバ又はＮＡＳノード）である。ノード１１０Ａ等の構成については、後で詳細に説明する（図２参照）。図１のノード１１０Ａ〜１１０Ｅに表示された「ＮＡＳ−００」〜「ＮＡＳ−０４」は、それぞれ、ノード１１０Ａ〜１１０Ｅの識別子である。
【００１４】
ディスク装置１２０は、ＮＡＳクライアント１６０によって書き込まれたデータを格納する装置である。本実施形態のディスク装置１２０は、ディスクコントローラ１２１及び一つ以上のディスクドライブ１２８を備える。
【００１５】
ディスクドライブ１２８は、データの記憶領域を提供する記憶装置である。ディスクドライブ１２８は、例えば、ハードディスクドライブ（ＨＤＤ）であってもよいが、他の種類の装置（例えば、フラッシュメモリ等の半導体記憶装置）であってもよい。ディスク装置１２０は、複数のディスクドライブ１２８を備えてもよい。複数のディスクドライブ１２８は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を構成してもよい。ＮＡＳクライアント１６０によって書き込まれたデータは、最終的に、ディスクドライブ１２８が提供する記憶領域に格納される。
【００１６】
ディスクコントローラ１２１は、ディスク装置１２０を制御する制御装置である。本実施形態のディスクコントローラ１２１は、相互に接続されたインターフェース（Ｉ／Ｆ）１２２、ＣＰＵ１２３、Ｉ／Ｆ１２４及びメモリ１２５を備える。
【００１７】
Ｉ／Ｆ１２２は、ディスクコントローラ１２１をストレージネットワーク１３０に接続するインターフェースである。ディスクコントローラ１２１は、Ｉ／Ｆ１２２を介して、ストレージネットワーク１３０に接続されたノード１１０Ａ等と通信する。
【００１８】
ＣＰＵ１２３は、メモリ１２５に格納されたプログラムを実行するプロセッサである。
【００１９】
Ｉ／Ｆ１２４は、ディスクコントローラ１２１をディスクドライブ１２８に接続するインターフェースである。ディスクコントローラ１２１は、Ｉ／Ｆ１２４を介して、ディスクドライブ１２８へのデータの書き込み及び読み出しを実行する。
【００２０】
メモリ１２５は、例えば半導体メモリであり、ＣＰＵ１２３によって実行されるプログラム及びＣＰＵ１２３によって参照されるデータを格納する。本実施形態のメモリ１２５は、少なくとも、Ｉ／Ｏ処理部１２７を格納する。Ｉ／Ｏ処理部１２７は、ディスクドライブ１２８へのデータの書き込み及び読み出しを制御するプログラムモジュールである。
【００２１】
ディスクコントローラ１２１は、さらに、データを一時的に格納するキャッシュメモリ（図示省略）を備えてもよい。
【００２２】
なお、図１には、ディスク装置１２０が複数のディスクドライブ１２８を備える例を示すが、ディスク装置１２０は、一つのディスクドライブ１２８のみを備えてもよい。あるいは、ディスク装置１２０が、ストレージネットワーク１３０に接続可能なインターフェースを備える一つのディスクドライブ１２８であってもよい。
【００２３】
ストレージネットワーク１３０は、ノード１１０Ａ〜１１０Ｅ及びディスク装置１２０Ａの間の通信を媒介するネットワークである。ストレージネットワーク１３０は、任意の種類のネットワークであってよい。例えば、ストレージネットワーク１３０は、ＰＣＩバス又はＦＣ（ファイバーチャネル）ネットワークであってもよい。
【００２４】
なお、以下の説明において、ノード１１０Ａからノード１１０Ｅまでを特に区別する必要がない場合、これらを総称してノード１１０と記載する。
【００２５】
図１には、五つのノード１１０及び一つのディスク装置１２０を備える計算機システムを示す。しかし、三つ以上の任意の数のノード１１０及び一つ以上の任意の数のディスク装置１２０を備える計算機システムによって本実施形態を実現することができる。
【００２６】
ＮＡＳクライアント１６０は、各種アプリケーションを実行する計算機である。本実施形態のＮＡＳクライアント１６０は、ＣＰＵ１６１、Ｉ／Ｆ１６２及びメモリ１６３を備える。
【００２７】
ＣＰＵ１６１は、メモリ１６３に格納されたプログラムを実行するプロセッサである。
【００２８】
Ｉ／Ｆ１６２は、ＮＡＳクライアント１６０をＬＡＮ１８０に接続するインターフェースである。ＮＡＳクライアント１６０は、ＬＡＮ１８０に接続された装置（例えばノード１１０）と、Ｉ／Ｆ１６２を介して通信する。
【００２９】
メモリ１６３は、例えば半導体メモリであり、ＣＰＵ１６１によって実行されるプログラム及びＣＰＵ１６１によって参照されるデータを格納する。本実施形態のメモリ１６３は、少なくとも、Ｉ／Ｏ要求処理部１６４を格納する。
【００３０】
Ｉ／Ｏ要求処理部１６４は、ＮＡＳクライアント１６０で稼動するオペレーティングシステム（ＯＳ）（図示省略）の一部として提供される。ＮＡＳクライアント１６０のＯＳは、任意のもの（例えば、Ｗｉｎｄｏｗｓ（登録商標）又はＳｏｌａｒｉｓ（登録商標））であってよい。
【００３１】
メモリ１６３は、さらに、ＯＳ上で実行される各種のアプリケーションプログラム（図示省略）を格納する。アプリケーションプログラムが発行した書き込み要求及び読み出し要求は、Ｉ／Ｏ要求処理部１６４によって処理される。
【００３２】
本実施形態の計算機システムは、任意の数のＮＡＳクライアント１６０を備えてもよい。
【００３３】
図２は、本発明の実施形態のノード１１０のハードウェア構成を示すブロック図である。
【００３４】
図２には、例として、ノード１１０Ａのハードウェア構成を示す。ノード１１０Ｂ〜１１０Ｅのハードウェア構成は、ノード１１０Ａのそれと同様であるため、図示及び説明を省略する。
【００３５】
ノード１１０は、相互に接続されたＩ／Ｆ２０１、ＣＰＵ２０２、Ｉ／Ｆ２０３及びメモリ２０４を備える。
【００３６】
Ｉ／Ｆ２０１は、ノード１１０をＬＡＮ１８０に接続するインターフェースである。ノード１１０は、ＬＡＮ１８０に接続された装置（例えばＮＡＳクライアント１６０）と、Ｉ／Ｆ２０１を介して通信する。Ｉ／Ｆ２０１は、例えば、いわゆるネットワークインターフェースカード（ＮＩＣ）である。
【００３７】
ＣＰＵ２０２は、メモリ２０４に格納されたプログラムを実行するプロセッサである。したがって、以下の説明においてメモリ２０４に格納されたプログラム（例えば、後述する各ランクのフェールオーバプログラム２１０及びＦＰ管理プログラム２１１）が実行する処理は、実際には、ＣＰＵ２０２によって実行される。
【００３８】
Ｉ／Ｆ２０３は、ノード１１０をストレージネットワーク１３０に接続するインターフェースである。ノード１１０は、Ｉ／Ｆ２０３を介してディスク装置１２０と通信する。Ｉ／Ｆ２０３は、例えば、いわゆるホストバスアダプタ（ＨＢＡ）である。
【００３９】
メモリ２０４は、例えば半導体メモリであり、ＣＰＵ２０２によって実行されるプログラム及びＣＰＵ２０２によって参照されるデータ等を格納する。本実施形態のメモリ２０４は、ＣＰＵ２０２によって実行されるプログラムモジュールとして、少なくとも、フェールオーバプログラム（ＦＰ）２１０、ファイル共有プログラム２２０、ファイルシステム処理プログラム２３０及びデバイスドライバ２４０を格納する。ファイルシステム処理プログラム２３０及びデバイスドライバ２４０は、ノード１１０において稼動するＯＳ（図示省略）の一部として提供される。
【００４０】
フェールオーバプログラム２１０は、ノード１１０のフェールオーバを管理するためにＣＰＵ２０２によって実行されるプログラムモジュールである。ＦＰ１（２１２）、ＦＰ２（２１３）及びＦＰ３（２１４）は、稼動しているフェールオーバプログラム２１０がとり得るランク（状態）である。フェールオーバプログラム２１０の各ランクは、各ランクに対応するプロセスを生成することによって実現される。ＦＰ管理プログラム２１１は、それらのプロセスの生成及び消滅を管理するプログラムモジュールである。さらに、フェールオーバプログラム２１０は、制御情報２１５を管理する。
【００４１】
以下の説明において、ランクＦＰ１（２１２）のフェールオーバプログラム２１０が稼動することを単にＦＰ１（２１２）が稼動すると記載する。ＦＰ２（２１３）及びＦＰ３（２１４）の稼動についても同様に表現する。
【００４２】
一つのノード１１０において、複数のフェールオーバプログラム２１０が稼動してもよい（後述する図１７等参照）。その場合、それらの複数のフェールオーバプログラム２１０のランクは異なっていてもよい。
【００４３】
各ランクから別のランクへの遷移、ＦＰ管理プログラム２１１が実行する処理、各ランクのフェールオーバプログラム２１０が実行する処理、及び、制御情報２１５については、後で詳細に説明する。
【００４４】
ファイル共有プログラム２２０は、ＬＡＮ１８０に接続されるＮＡＳクライアント１６０にファイル共有プロトコルを提供することによって、ＮＡＳクライアント１６０間のファイル共有機能を提供する。ファイル共有プロトコルは、例えば、ＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）又はＣＩＦＳ（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）であってもよい。ファイル共有プログラム２２０は、ＮＡＳクライアント１６０からファイル単位のＩ／Ｏ（すなわち読み出し又は書き込み）要求を受けると、その要求に対応したファイル単位のＩ／Ｏをファイルシステム（後述）に対して実行する。
【００４５】
ファイルシステム処理プログラム２３０は、上位層に対して階層構造化された論理ビュー（ディレクトリ、ファイル等）を提供するとともに、これらのビューを物理的なデータ構造（ブロックデータ、ブロックアドレス）に変換して下位層に対するＩ／Ｏ処理を実行する。
【００４６】
デバイスドライバ２４０は、ファイルシステム処理プログラム２３０から要求されたブロックＩ／Ｏを実行する。
【００４７】
図３は、本発明の実施形態のフェールオーバプログラム２１０の状態遷移の説明図である。
【００４８】
ここで、フェールオーバについて説明する。
【００４９】
複数のノード１１０のうち少なくとも一つは、ＮＡＳクライアント１６０に対してファイル共有サービスを提供する。サービスを提供しているノード１１０が、例えば障害の発生のためにサービスを提供できなくなった場合、そのノード１１０が提供していたサービスを、他のノード１１０が引き継いで提供する。その結果、ＮＡＳクライアント１６０は、いずれかのノード１１０に障害が発生した場合にも、引き続きディスク装置１２０内のデータにアクセスすることができる。このようなサービス提供の引き継ぎを、フェールオーバと呼ぶ。フェールオーバプログラム２１０は、このようなフェールオーバを実現するプログラムである。フェールオーバの例については、後でより詳細に説明する（図１０等参照）。
【００５０】
次に、フェールオーバプログラム２１０の状態遷移について説明する。
【００５１】
フェールオーバプログラム２１０は、ＦＰ１（２１２）からＦＰ３（２１４）までの各ランクのフェールオーバプログラム２１０が稼動している状態（すなわち、それぞれ、状態３０１から状態３０３）、及び、フェールオーバプログラム２１０が稼動していない状態（すなわち状態３０４）の、いずれかの状態をとり得る。
【００５２】
図３についての以下の説明は、図１に示すように三つ以上のノード１１０を備える計算機システムにおいて、一つのノード１１０においてＦＰ１（２１２）が稼動し、別の一つのノード１１０においてＦＰ２（２１３）が稼動し、残りのノード１１０のうち少なくとも一つにおいてＦＰ３（２１４）が稼動していることを前提としている。
【００５３】
ＦＰ１（２１２）が稼動するノード１１０は、ＮＡＳクライアント１６０に対してサービスを提供する。ＦＰ１（２１２）は、ＦＰ２（２１３）が稼動するノード１１０から障害監視要求を受信すると、それに対する応答を送信する。ＦＰ１（２１２）が稼動するノード１１０に障害が発生した場合、そのノード１１０のフェールオーバプログラム２１０の稼動は停止する。すなわち、ＦＰ１（２１２）が稼動するノード１１０に障害が発生すると、そのノード１１０で稼動するフェールオーバプログラム２１０の状態は、状態３０１から状態３０４に遷移する。
【００５４】
ＦＰ２（２１３）が稼動するノード１１０は、ＦＰ１（２１２）が稼動するノード１１０が提供していたサービスの引き継ぎ手である。すなわち、ＦＰ２（２１３）が稼動するノード１１０は、ＦＰ１（２１２）が稼動するノード１１０を監視し、そのノード１１０に障害が発生した場合に、その障害が発生したノード１１０が提供していたサービスを引き継ぐ。そして、サービスを引き継いだノード１１０で稼動するフェールオーバプログラム２１０のランクは、ＦＰ２（２１３）からＦＰ１（２１２）に遷移する。すなわち、ＦＰ１（２１２）が稼動するノード１１０に障害が発生すると、そのノード１１０を監視するフェールオーバプログラム２１０の状態は、状態３０２から状態３０１に遷移する。以下、ＦＰ２（２１３）が稼動するノード１１０は、引き継ぎ手ノードとも記載される。
【００５５】
さらに、ＦＰ２（２１３）は、ＦＰ３（２１４）が稼動するノード１１０の負荷情報を取得する。具体的には、ＦＰ２（２１３）は、所定のタイミングで、ＦＰ３（２１４）に負荷情報取得要求を送信する。負荷情報が所定の条件を満たす場合、現在ＦＰ２（２１３）が稼動するノード１１０より、現在ＦＰ３（２１４）が稼動するノード１１０の方が引き継ぎ手ノードとして適している。このため、負荷情報が所定の条件を満たす場合、ＦＰ２（２１３）は、ＦＰ３（２１４）に、引き継ぎ手ノードを変更する要求（以下、変更要求と記載する）を送信する。変更要求を送信したＦＰ２（２１３）は、ＦＰ３（２１４）に遷移する。すなわち、変更要求を送信したフェールオーバプログラム２１０の状態は、状態３０２から状態３０３に遷移する。
【００５６】
ＦＰ２（２１３）が稼動するノード１１０に障害が発生した場合、そのノード１１０のフェールオーバプログラム２１０の稼動は停止する。すなわち、ＦＰ２（２１３）が稼動するノード１１０に障害が発生すると、そのノード１１０で稼動するフェールオーバプログラム２１０の状態は、状態３０２から状態３０４に遷移する。
【００５７】
ＦＰ３（２１４）は、ＦＰ２（２１３）から負荷情報取得要求を受信すると、そのＦＰ３（２１４）が稼動しているノード１１０の負荷情報をＦＰ２（２１３）に送信する。
【００５８】
ＦＰ３（２１４）は、ＦＰ２（２１３）から変更要求を受信すると、ＦＰ２（２１３）に遷移する。すなわち、変更要求を受信したフェールオーバプログラム２１０の状態は、状態３０３から状態３０２に遷移する。
【００５９】
ＦＰ３（２１４）は、所定のタイミングで負荷情報取得要求を受信しなかった場合、ＦＰ２（２１３）が稼動するノード１１０に障害が発生したと判定する。この場合、ＦＰ３（２１４）は、ＦＰ２（２１３）に遷移する。すなわち、ＦＰ２（２１３）が稼動するノード１１０の障害を検出したフェールオーバプログラム２１０の状態は、状態３０３から状態３０２に遷移する。ただし、後述するように、複数のノード１１０においてＦＰ３（２１４）が稼動している場合、それらのうち一つのノード１１０のＦＰ３（２１４）がＦＰ２（２１３）に遷移する。
【００６０】
ＦＰ３（２１４）が稼動するノード１１０に障害が発生した場合、そのノード１１０のフェールオーバプログラム２１０の稼動は停止する。すなわち、ＦＰ３（２１４）が稼動するノード１１０に障害が発生すると、そのノード１１０で稼動するフェールオーバプログラム２１０の状態は、状態３０３から状態３０４に遷移する。以下、ＦＰ３（２１４）が稼動するノードは、待機ノードとも記載される。
【００６１】
ノード１１０が障害から回復した場合、そのノード１１０では、最初に、ＦＰ３（２１４）が稼動する。すなわち、障害から回復したノード１１０で稼動するフェールオーバプログラム２１０の状態は、状態３０４から状態３０３に遷移する。
【００６２】
なお、上記のような状態遷移は、プロセスの生成及び消滅によって実行される。例えば、ＦＰ２（２１３）からＦＰ３（２１４）への遷移は、ＦＰ管理プログラム２１１が、ＦＰ２（２１３）に対応するプロセスを終了し、その後、ＦＰ３（２１４）に対応するプロセスを生成することによって実行される。
【００６３】
次に、図３において説明した状態遷移の具体例を説明する。
【００６４】
図４は、本発明の実施形態において実行される処理の前提となる計算機システムの構成を示す説明図である。
【００６５】
ノード１１０Ａ〜１１０Ｄ及び一つ以上のＮＡＳクライアント１６０は、ＬＡＮ１８０を介して相互に接続されている。各ノード１１０では、フェールオーバプログラム２１０が稼動している。ノード１１０Ａ〜１１０Ｄは、さらに、ＳＡＮ１３０を介してディスク装置１２０と接続されている。図４に示す各ノード１１０、ＮＡＳクライアント１６０及びストレージ装置１２０は、図１及び図２に示したものと同様であるが、図４では詳細な構成の図示を省略する。
【００６６】
ディスク装置１２０の記憶領域に格納されたデータは、ファイルシステム処理プログラム２３０によって、一つ以上のファイルシステム（図４の例では、ファイルシステム４０１Ａ及び４０１Ｂ）としてＮＡＳクライアント１６０に提供される。ファイルシステム４０１Ａ及び４０１Ｂの識別子は、それぞれ、「ＦＳ１」及び「ＦＳ２」である。
【００６７】
以下の説明は、主にノード１１０が実行する処理についてのものである。このため、以下の図において、特に必要がない場合、ディスク装置１２０及びＳＡＮ１３０の図示を省略する。
【００６８】
図５は、本発明の実施形態の計算機システムが定常状態である場合に実行される処理の説明図である。
【００６９】
図５の例では、ノード１１０ＡにおいてＦＰ１（２１２）が稼動し、ノード１１０ＢにおいてＦＰ２（２１３）が稼動し、ノード１１０Ｃ及びノード１１０ＤにおいてＦＰ３（２１４）が稼動している。
【００７０】
この場合、ノード１１０Ａは、ＮＡＳクライアント１６０に対してサービスを提供する。すなわち、ノード１１０Ａは、ＮＡＳクライアント１６０からのファイルアクセス要求を処理し、処理結果（例えば、読み出されたユーザデータ）をＮＡＳクライアント１６０に応答する。
【００７１】
ノード１１０Ｂにおいて稼動するＦＰ２（２１３）は、ノード１１０Ａを監視する。具体的には、ＦＰ２（２１３）は、所定のタイミングで（例えば定期的に）障害監視要求をＦＰ１（２１２）に送信する。障害監視要求を受信したＦＰ１（２１２）は、その要求に対する応答を、要求の送信元であるＦＰ２（２１３）送信する。この応答には、例えば、障害情報及び負荷情報が含まれる。障害情報とは、ＦＰ１（２１２）が稼動するノード１１０Ａに障害が発生しているか否かを示す情報である。負荷情報とは、ノード１１０（この例では、ノード１１０Ａ）の負荷を示す情報である。負荷情報は、ノード１１０の負荷を示す情報である限り、どのようなものであってもよい。例えば、負荷情報は、ノード１１０のＣＰＵ２０２の使用率であってもよい。負荷情報の他の例については後述する。
【００７２】
さらに、ノード１１０Ａが提供するサービスに関する情報（以下、サービス情報と記載する）に変更がある場合、その変更の内容を示すサービス変更情報が応答に含まれる。ここで、サービス情報とは、例えば、サービスを受けるユーザの識別子、及び、そのサービスによって提供されるファイルシステムの識別子等を含む（図１０参照）。
【００７３】
なお、ＦＰ１（２１２）は、障害監視要求に対して応答する代わりに、自発的に、上記の応答と同等の情報を所定のタイミングで（例えば定期的に）送信してもよい。
【００７４】
さらに、ＦＰ２（２１３）は、ＦＰ３（２１４）が稼動するノード１１０Ｃ及び１１０Ｄの負荷情報を取得する。具体的には、ＦＰ２（２１３）は、所定のタイミングで（例えば定期的に）負荷情報取得要求をノード１１０Ｃ及び１１０Ｄで稼動するＦＰ３（２１４）に送信する。負荷情報取得要求を受信したＦＰ３（２１４）は、その要求に対する応答を、要求の送信元であるＦＰ２（２１３）に送信する。ノード１１０Ｃで稼動するＦＰ３（２１４）からの応答には、ノード１１０Ｃの負荷情報が含まれる。ノード１１０Ｄで稼動するＦＰ３（２１４）からの応答には、ノード１１０Ｄの負荷情報が含まれる。
【００７５】
ＦＰ２（２１３）は、ＦＰ３（２１４）から取得した各ノード１１０の負荷情報を比較し、最も負荷が低いノード１１０を判定する。例えば、図５に示すように、ノード１１０Ｃの負荷が１０％、ノード１１０Ｄの負荷が９０％である場合、ＦＰ３（２１４）が稼動するノード１１０の中で、ノード１１０Ｃの負荷が最も低いと判定される。この場合、ＦＰ２は、次回の負荷情報取得要求に優先番号「ＮＡＳ−０２」を含めて、ノード１１０Ｃ及びノード１１０Ｄで稼動する各ＦＰ３（２１４）に送信する。「ＮＡＳ−０２」は、ノード１１０Ｃの識別子である。優先番号は、負荷が最も低いと判定されたノード１１０の識別子、又は、その識別子に対応する番号等であってもよい。
【００７６】
仮にノード１１０Ｂに障害が発生した場合、Ｓｉｎｇｌｅ  Ｐｏｉｎｔ  Ｆａｉｌｕｒｅを避けるためには、ノード１１０Ｃ及び１１０Ｄで稼動するＦＰ３（２１４）のいずれかがＦＰ２（２１３）に遷移する必要がある。ＦＰ２（２１３）が稼動するノード１１０は、現在サービスを提供しているノード１１０に障害が発生した場合に、サービスの提供を引き継ぐことになる。したがって、ノード１１０の負荷を均衡させるためには、より負荷が低いノード１１０のＦＰ３（２１４）をＦＰ２（２１３）に遷移させることが望ましい。すなわち、優先番号は、現在引き継ぎ手ノードとなっているノード１１０に障害が発生した場合の新たな引き継ぎ手ノードとして最も適したノード１１０の識別子である。優先番号の具体的な使用方法については後述する（図１３参照）。
【００７７】
なお、ＦＰ２（２１３）がＦＰ１（２１２）からサービス変更情報を取得した場合、ＦＰ２（２１３）は、取得したサービス変更情報を負荷情報取得要求に含めて送信する。負荷情報取得要求を受信したＦＰ３（２１４）は、その要求に含まれるサービス変更情報を保持する。
【００７８】
さらに、ＦＰ２（２１３）は、ＦＰ２（２１３）が稼動するノード１１０Ｂの負荷情報を取得する。
【００７９】
ＦＰ２（２１３）は、取得した負荷情報が所定の条件を満足する場合、引き継ぎ手ノード変更処理を実行する。引き継ぎ手ノード変更処理とは、サービスの引き継ぎ手となるノード１１０を変更する処理である。所定の条件とは、例えば、ＦＰ２（２１３）が稼動するノード１１０の負荷が、ＦＰ３（２１４）が稼動するノード１１０の負荷より高いことである。
【００８０】
例えば、ＦＰ２（２１３）が取得したノード１１０Ｂ、１１０Ｃ及び１１０Ｄの負荷情報（例えばＣＰＵ使用率）が、それぞれ、３０％、１０％及び９０％である場合、ＦＰ２（２１３）が稼動するノード１１０Ｂの負荷が、ＦＰ３（２１４）が稼動するノード１１０Ｃの負荷より高い。このような状況において、ノード１１０Ａに障害が発生した場合、ノード１１０の負荷を均衡させるためには、ノード１１０Ｂよりも、ノード１１０Ｃがサービスを引き継ぐことが望ましい。このように、例えば現在の引き継ぎ手ノードであるノード１１０Ｂより、その他のノード１１０Ｃの方が引き継ぎ手ノードに適していると判定された場合、まだサービスを提供しているノード１１０Ａに障害が発生していなくても、引き継ぎ手ノード変更処理が実行される。
【００８１】
図６は、本発明の実施形態の計算機システムにおいて実行される引き継ぎ手ノード変更処理の説明図である。
【００８２】
具体的には、図６は、図５において説明したように、ノード１１０Ｂよりノード１１０Ｃの方が引き継ぎ手ノードに適していると判定された場合に実行される処理を示す。
【００８３】
この場合、ノード１１０Ｂで稼動するＦＰ２（２１３）は、ノード１１０Ｃで稼動するＦＰ３（２１４）に引き継ぎ手ノード変更要求を送信する。その後、ノード１１０Ｂで稼動するＦＰ２（２１３）は、ＦＰ３（２１４）に遷移する。一方、引き継ぎ手ノード変更要求を受信したノード１１０Ｃで稼動するＦＰ３（２１４）は、ＦＰ２（２１３）に遷移する。
【００８４】
図７は、本発明の実施形態において引き継ぎ手ノード変更処理が実行された後の計算機システムの説明図である。
【００８５】
図６に示す引き継ぎ手ノード変更処理が実行された結果、ノード１１０Ａでは引き続きＦＰ１（２１２）が、ノード１１０Ｂでは新たにＦＰ３（２１４）が、ノード１１０Ｃでは新たにＦＰ２（２１３）が、ノード１１０Ｄでは引き続きＦＰ３（２１４）が稼動する。すなわち、ノード１１０Ｃで稼動するＦＰ２（２１３）が、ノード１１０Ａを監視する。さらに、ノード１１０Ｃで稼動するＦＰ２（２１３）が、ノード１１０Ｂ及び１１０Ｄの負荷情報を取得する。ノード１１０Ａに障害が発生した場合、ノード１１０Ｃがノード１１０Ａからサービスを引き継ぐことになる。
【００８６】
図８は、本発明の実施形態の計算機システムにおいて実行されるサービスの引き継ぎ処理の説明図である。
【００８７】
具体的には、図８は、ＮＡＳクライアント１６０にサービスを提供しているノード１１０に障害が発生した場合に実行されるサービスの引き継ぎ処理を示す。
【００８８】
図５に示すように、ノード１１０ＡにおいてＦＰ１（２１２）が稼動し、ノード１１０ＢにおいてＦＰ２（２１３）が稼動し、ノード１１０Ｃ及びノード１１０ＤにおいてＦＰ３（２１４）が稼動しているときに、サービスを提供しているノード１１０Ａに障害が発生した場合、ＦＰ２（２１３）がその障害を検出する。
【００８９】
例えば、ＦＰ２（２１３）がＦＰ１（２１２）から受信した応答に含まれる障害情報が、ノード１１０Ａにおいて障害が発生したことを示す場合、ＦＰ２（２１３）は、ノード１１０Ａにおいて障害が発生したと判定する。
【００９０】
あるいは、ノード１１０Ａが障害のため停止した場合、ＦＰ１（２１２）は、停止状態（状態３０４）に遷移するため、障害監視要求に応答できなくなる。このため、ＦＰ２（２１３）は、所定のタイミングで障害監視要求に対する応答を受信できない場合、ノード１１０Ａに障害が発生したと判定してもよい。例えば、ＦＰ２（２１３）は、障害監視要求を送信した後、所定の時間が経過しても応答を受信できない場合、ノード１１０Ａに障害が発生したと判定してもよいし、前回の障害監視要求に対する応答を受信した後、所定の時間が経過しても応答を受信できない場合、ノード１１０Ａに障害が発生したと判定してもよい。
【００９１】
この場合、ＦＰ２（２１３）は、現在ＦＰ３（２１４）が稼動しているノード１１０のうち、引き継ぎ手ノードに最も適したノード１１０で稼動するＦＰ３（２１４）に、引き継ぎ手ノード変更要求を送信する。この引き継ぎ手ノード変更要求は、図６において説明したものと同様のものであってもよい。例えば、図８に示すように、ノード１１０Ｃの負荷が２０％、ノード１１０Ｄの負荷が９０％である場合、負荷均衡のためには、ノード１１０Ｄよりノード１１０Ｃが引き継ぎ手ノードとなることが望ましい。したがってこの場合、ＦＰ２（２１３）は、引き継ぎ手ノードに最も適したノード１１０Ｃに引き継ぎ手ノード変更要求を送信する。
【００９２】
引き継ぎ手ノード変更要求を送信した後、ＦＰ２（２１３）は、ＦＰ１（２１２）に遷移する。新たにＦＰ１（２１２）が稼動するノード１１０Ｂは、障害が発生したノード１１０Ａに代わって、ＮＡＳクライアント１６０にサービスを提供する。
【００９３】
引き継ぎ手ノード変更要求を受信したノード１１０Ｃで稼動するＦＰ３（２１４）は、図６において説明したように、ＦＰ２（２１３）に遷移する。
【００９４】
図９は、本発明の実施形態においてサービスの引き継ぎ処理が実行された後の計算機システムの説明図である。
【００９５】
図８に示すサービスの引き継ぎ処理が実行された結果、ノード１１０Ｂでは新たにＦＰ１（２１２）が、ノード１１０Ｃでは新たにＦＰ２（２１３）が、ノード１１０Ｄでは引き続きＦＰ３（２１４）が稼動する。すなわち、ＦＰ１（２１２）が稼動するノード１１０Ｂは、ＮＡＳクライアント１６０にサービスを提供する。ノード１１０Ｃで稼動するＦＰ２（２１３）は、サービスを提供するノード１１０Ｂを監視する。さらに、ノード１１０Ｃで稼動するＦＰ２（２１３）は、ＦＰ３（２１４）が稼動するノード１１０Ｄの負荷情報を取得する。ノード１１０Ｂで障害が発生した場合、ノード１１０Ｃがノード１１０Ｂからサービスを引き継ぐことになる。
【００９６】
図１０は、本発明の実施形態の計算機システムにおいて提供されるファイル共有サービスの具体例の説明図である。
【００９７】
最初に、ＮＡＳが提供するファイル共有サービス、及び、そのサービスを提供するために必要な情報であるサービス情報について説明する。
【００９８】
ＮＡＳは、クライアントに対してファイル共有サービスを提供する。すなわち、あるクライアントがＮＡＳ上のファイルシステムに任意にファイルを格納し、そのファイルを他のクライアントと共有する。
【００９９】
図１０において、ＮＡＳクライアント１６０Ａ〜１６０Ｃの各々は、複数のＮＡＳクライアント１６０のうちの一つである。図１０に表示された「経理部：日立一郎」、「経理部：日立二郎」及び「総務部：日立花子」は、それぞれ、ＮＡＳクライアント１６０Ａ、１６０Ｂ及び１６０Ｃのユーザの識別子である。この例では、各ユーザの識別子は、各ユーザの所属部署名及び氏名からなる。
【０１００】
ＮＡＳ１１０は、ファイルシステム１００１及びファイルシステム１００２をＮＡＳクライアント１６０に提供する。図１０に表示された「ｆｓ−ｋｅｉｒｉ」及び「ｆｓ−ｓｏｕｍｕ」は、それぞれ、ファイルシステム１００１及びファイルシステム１００２の識別子である。この例において、ファイルシステム１００１は経理部に所属するユーザに提供されるデータ格納領域、ファイルシステム１００２は総務部に所属するユーザに提供されるデータ格納領域である。
【０１０１】
例えば、ユーザ「経理部：日立一郎」が作成したファイル「貸借対照表．ｘｌｓ」は、ファイルシステム「ｆｓ−ｋｅｉｒｉ」に格納される。このファイルを、ユーザ「経理部：日立二郎」も参照することができる。一方、ユーザ「総務部：日立花子」が作成したファイルは、ファイルシステム「ｆｓ−ｓｏｕｍｕ」に格納される。
【０１０２】
したがって、ＮＡＳは、ファイル共有サービスを提供するために、少なくとも、ユーザに提供されるデータ格納領域の識別子、及び、各データ格納領域へのアクセスを許されたユーザの識別子の一覧を示す情報を、サービス情報として保持する必要がある。
【０１０３】
ＮＡＳにおいて、ディスク装置１２０の任意の領域にファイルシステムが構築され、それをノード１１０のＯＳが認識する。そして、ＯＳは、ファイルシステム上にユーザのファイルを格納する。ＯＳは、複数のファイルシステムを認識することができる。このため、ＯＳはファイルシステムの識別子（すなわちファイルシステムＩＤ）を用いてファイルシステムを識別し、ユーザは、ファイルを共有する際にファイルシステムＩＤを使用する。
【０１０４】
また、ＮＡＳクライアント１６０がサービスにアクセスするために、ＬＡＮ１８０を使用する。したがって、サービスを提供するためには、サービスを提供するノード１１０のＩＰアドレスが必要となる。
【０１０５】
以上から、サービス情報は、少なくとも、ユーザ情報（すなわちアクセスが許されるユーザの識別子の一覧）、ファイルシステムＩＤ、及び、ノード１１０のＩＰアドレスを含む必要がある。図１０の例では、ノード１１０は、ファイルシステム１００１及び１００２の識別子、ユーザ情報１００３及びＩＰアドレス１００４（「１９２．１６８．１０．１」）をサービス情報として保持する。
【０１０６】
ノード１１０は、ＮＡＳクライアント１６０を使用するユーザからいずれかのファイルシステムへのアクセス要求（すなわち書き込み要求又は読み出し要求）を受信すると、そのユーザの識別子及び要求されたファイルシステムＩＤをサービス情報と照合することによって、そのユーザが要求されたファイルシステムへのアクセスを許可されているか否かを判定する。そのアクセスが許可されていると判定された場合、ノード１１０は、アクセス要求に応じて、データの書き込み又は読み出しを実行し、その結果をＮＡＳクライアント１６０に応答する。
【０１０７】
図１１及び図１２は、本発明の実施形態の計算機システムにおいて実行されるサービスの引き継ぎ処理の詳細な説明図である。
【０１０８】
具体的には、図１１は、サービスが引き継がれる前の状態を示し、図１２は、障害が発生したノード１１０が提供していたサービスを他のノードが引き継いだ状態を示す。
【０１０９】
図１１に示すように、当初、ノード１１０ＡがＮＡＳクライアント１６０にファイル共有サービスを提供する。すなわち、ノード１１０ＡのＩＰアドレスとして例えば図１０に示す「１９２．１６８．１０．１」が設定される。さらに、ノード１１０Ａは、サービス情報として、例えば図１０に示すファイルシステム１００１及び１００２の識別子、及び、ユーザ情報１００３を保持する。この場合、ユーザ情報１００３に登録されたＮＡＳクライアント１６０のユーザは、ＩＰアドレス「１９２．１６８．１０．１」に接続することによって、ファイルシステム内のユーザデータにアクセスすることができる。すなわち、ＩＰアドレス「１９２．１６８．１０．１」は、ＮＡＳクライアント１６０のユーザがファイルシステム１００１及び１００２にアクセスするときに、アクセス要求の宛先として使用される。
【０１１０】
この時点では、ノード１１０ＡにおいてＦＰ１（２１２）が稼動し、ノード１１０ＢにおいてＦＰ２（２１３）が稼動し、ノード１１０Ｃ及びノード１１０ＤにおいてＦＰ３（２１４）が稼動している。
【０１１１】
図５において説明したように、ノード１１０Ａで稼動するＦＰ１（２１２）は、サービス情報に変更があった場合、その変更の内容を、障害監視要求に対する応答に含めて、ノード１１０Ｂで稼動するＦＰ２（２１３）に送信する。このため、ノード１１０Ｂは、ノード１１０Ａが保持するものと同一のサービス情報を保持することができる。
【０１１２】
その後、サービスを提供しているノード１１０Ａに障害が発生すると、ＦＰ２（２１３）が稼動していたノード１１０Ｂがノード１１０Ａからサービスの提供を引き継ぐ。
【０１１３】
具体的には、ノード１１０ＢのＩＰアドレスとして新たに「１９２．１６８．１０．１」（すなわち、サービスを提供していたノード１１０Ａに設定されていたアドレス）が設定される。さらに、ノード１１０Ｂは、ノード１１０Ａが保持していたものと同一のサービス情報を保持している。このため、ユーザ情報１００３に登録されているユーザは、ノード１１０Ａに障害が発生した後も、障害が発生する前と同じＩＰアドレス「１９２．１６８．１０．１」に接続することによって、ファイルシステム内のユーザデータにアクセスすることができる。
【０１１４】
図１３は、本発明の実施形態の計算機システムにおいて引き継ぎ手ノードであるノード１１０に障害が発生した場合に実行される処理の説明図である。
【０１１５】
具体的には、図１３は、図５に示すノード１１０Ｂに障害が発生した場合に実行される処理を示す。
【０１１６】
ノード１１０Ｂに障害が発生すると、ノード１１０Ｂにおいて稼動していたＦＰ２（２１３）が停止する（図３参照）。この状態を放置すると、その後さらにノード１１０Ａに障害が発生した場合、ノード１１０Ａからサービスを引き継ぐノード１１０が存在しないため、サービスの提供が停止する。すなわち、ノード１１０ＡがＳｉｎｇｌｅ  Ｐｏｉｎｔ  Ｆａｉｌｕｒｅとなる。これを防ぐため、ＦＰ２（２１３）が停止した場合、稼動しているＦＰ３（２１４）のうちいずれかがＦＰ２（２１３）に遷移することによって、新たな引き継ぎ手ノードとなる必要がある。図１３は、そのための処理を示す。
【０１１７】
ノード１１０ＢにおいてＦＰ２（２１３）が停止すると、ノード１１０Ｃ及びノード１１０Ｄにおいて稼動するＦＰ３（２１４）は、負荷情報取得要求を所定のタイミングで受信できなくなる。このことから、ＦＰ３（２１４）は、ノード１１０Ｂの障害を検出する。例えば、ＦＰ３（２１４）は、前回負荷情報取得要求を受信してから所定の時間が経過しても次回の負荷情報取得要求を受信しない場合、ＦＰ２（２１３）が稼動するノード１１０に障害が発生したと判定してもよい。
【０１１８】
図５の例では、障害が発生する前、ノード１１０Ｃ及びノード１１０Ｄにおいて稼動するＦＰ３（２１４）は、ＦＰ２（２１３）から優先番号「ＮＡＳ−０２」を受信している。この例において、ノード１１０Ｂに障害が発生した場合、各ＦＰ３（２１４）は、自ＦＰ３（２１４）が稼動する自ノード１１０の識別子と受信した優先番号とを比較する。
【０１１９】
ノード１１０Ｃで稼動するＦＰ３（２１４）は、優先番号「ＮＡＳ−０２」が自ノード１１０Ｃの識別子と同一であるため、ＦＰ２（２１３）に遷移する必要があると判定する。一方、ノード１１０Ｄで稼動するＦＰ３（２１４）は、優先番号「ＮＡＳ−０２」が自ノード１１０Ｄの識別子「ＮＡＳ−０３」と異なるため、ＦＰ２（２１３）に遷移する必要がないと判定する。
【０１２０】
この場合、ノード１１０Ｃで稼動するＦＰ３（２１４）のみが、ＦＰ２（２１３）に遷移する。
【０１２１】
図１４は、本発明の実施形態において引き継ぎ手ノードが変更された後の計算機システムの説明図である。
【０１２２】
具体的には、図１４は、図１３に示すようにノード１１０Ｃで稼動するＦＰ３（２１４）がＦＰ２（２１３）に遷移した後の状態を示す。
【０１２３】
ノード１１０Ｃで新たに稼動するＦＰ２（２１３）は、障害監視要求を送信することによって、ノード１１０Ａを監視する。さらに、ＦＰ２（２１３）は、負荷情報取得要求を送信することによって、ノード１１０Ｄの負荷情報を取得する。その後、ノード１１０Ａに障害が発生した場合、ノード１１０Ｃがノード１１０Ａからサービスを引き継ぐことになる。
【０１２４】
図１５は、本発明の実施形態の計算機システムにおいて待機ノード１１０に障害が発生した場合に実行される処理の説明図である。
【０１２５】
具体的には、図１５は、図５に示す計算機システムにおいて、待機ノード１１０（すなわち、ＦＰ３（２１４）が稼動するノード１１０）の一つであるノード１１０Ｄに障害が発生した場合の処理を示す。
【０１２６】
ノード１１０Ｄに障害が発生すると、ノード１１０Ｄにおいて稼動するＦＰ３（２１４）が停止する（図３参照）。このため、ノード１１０Ｄは、ノード１１０ＢのＦＰ２（２１３）から送信された負荷情報取得要求に応答できなくなる。このことに基づいて、ＦＰ２（２１３）は、ノード１１０Ｄに障害が発生したと判定する。例えば、ＦＰ２（２１３）は、ノード１１０Ｄに負荷情報取得要求を送信した後、所定の時間が経過しても応答を受信しない場合、ノード１１０Ｄに障害が発生したと判定してもよい。
【０１２７】
この場合、障害が発生していないノード１１０で稼動するフェールオーバプログラム２１０において状態遷移は発生しない。したがって、ノード１１０Ａは引き続きサービスを提供し、ノード１１０Ｂで稼動するＦＰ２（２１３）は引き続きノード１１０Ａの監視及びノード１１０Ｃの負荷情報の取得を実行する。
【０１２８】
図１６は、本発明の実施形態の計算機システムにおいてノード１１０が障害から回復した場合に実行される処理の説明図である。
【０１２９】
具体的には、図１６は、図９に示すように、ノード１１０Ａに障害が発生し、ノード１１０Ｂがノード１１０Ａからサービスを引き継いだ後に、ノード１１０Ａが障害から回復した場合に実行される処理を示す。
【０１３０】
障害から回復したノード１１０Ａでは、フェールオーバプログラム２１０が起動する。起動直後に稼動するランクは、ＦＰ３（２１４）である（図３参照）。ノード１１０Ａで稼動するＦＰ３（２１４）は、ノード１１０Ｃで稼動するＦＰ２（２１３）からの負荷情報取得要求に応答する。その後、負荷情報が所定の条件を満たす場合には、図６及び図７等に示したものと同様の手順で、状態遷移が発生し、引き継ぎ手ノードが変更される。
【０１３１】
以上の説明は、ＮＡＳが一つのサービスを提供する場合、すなわち、一つのノード１１０のみがサービスを提供する場合を例としていた。しかし、実際には、ＮＡＳが複数のサービスを提供する場合、すなわち、複数のノード１１０がサービスを提供する場合にも本発明を適用することができる。
【０１３２】
図１７及び図１８は、本発明の実施形態の計算機システムにおいて提供されるサービスが追加された場合に実行される処理の説明図である。
【０１３３】
図１７は、一つのサービスすなわちサービスＡを提供しているＮＡＳに、別のサービスすなわちサービスＢが追加された直後の計算機システムの状態を示す。
【０１３４】
当初、サービスＡのみが提供されている。この時点で、ノード１１０ＡがＮＡＳクライアント１６０にサービスＡを提供し、ノード１１０ＢがサービスＡの引き継ぎ手ノードであり、ノード１１０Ｃ及び１１０ＤがサービスＡのための待機ノードである。以下の説明において、「Ａ」が付されたＦＰ１〜ＦＰ３は、サービスＡのフェールオーバを管理するために稼動するものである。例えば、ノード１１０ＡにおいてＡ−ＦＰ１（２１２Ａ）が、ノード１１０ＢにおいてＡ−ＦＰ２（２１３Ａ）が、ノード１１０Ｃ及び１１０ＤにおいてＡ−ＦＰ３（２１４Ａ）が稼動する。Ａ−ＦＰ１（２１２Ａ）、Ａ−ＦＰ２（２１３Ａ）及びＡ−ＦＰ３（２１４Ａ）は、それぞれ、サービスＡのフェールオーバを管理するために生成されたＦＰ１（２１２）、ＦＰ２（２１３）及びＦＰ３（２１４）である。
【０１３５】
その後、サービスＢの提供が追加される。例えば、ユーザがノード１１０ＢにサービスＢを定義する。具体的には、サービスＢを提供するために必要なサービス情報がユーザによってノード１１０Ｂに入力して、サービスＢの提供を指示する。このとき、ノード１１０ＢのＦＰ管理プログラム２１１は、Ｂ−ＦＰ２（２１３Ｂ）を生成する。以下の説明において、サービスＢのフェールオーバを管理するために稼動するＦＰ１〜ＦＰ３は、「Ｂ」を付して表示される。
【０１３６】
さらに、ノード１１０ＢのＦＰ管理プログラム２１１は、ノード１１０Ａ、１１０Ｃ及び１１０ＤのＦＰ管理プログラム２１１に、サービスＢに関するサービス情報を送信する。このサービス情報を受信した各ノード１１０のＦＰ管理プログラム２１１は、各ノード１１０に、Ｂ−ＦＰ３（２１４Ｂ）を生成する。この時点で、Ｂ−ＦＰ１（２１２Ｂ）が稼動するノード１１０は存在しない。なお、Ｂ−ＦＰ１（２１２Ｂ）、Ｂ−ＦＰ２（２１３Ｂ）及びＢ−ＦＰ３（２１４Ｂ）は、それぞれ、サービスＢのフェールオーバを管理するために生成されたＦＰ１（２１２）、ＦＰ２（２１３）及びＦＰ３（２１４）である。
【０１３７】
異なるサービスのフェールオーバを管理するＦＰ１〜ＦＰ３は、それぞれ独立に稼動し、相互に通信することができない。例えば、Ｂ−ＦＰ２（２１３Ｂ）は、Ｂ−ＦＰ１（２１２Ｂ）及びＢ−ＦＰ３（２１４Ｂ）と通信することができるが、Ａ−ＦＰ１（２１２Ａ）及びＡ−ＦＰ３（２１４Ａ）と通信することはできない。
【０１３８】
稼動を開始したＢ−ＦＰ２（２１３Ｂ）は、負荷情報取得要求を各ノード１１０で稼動するＢ−ＦＰ３（２１４Ｂ）に送信することによって、各ノード１１０の負荷情報を取得する。さらに、Ｂ−ＦＰ２（２１３Ｂ）は、障害監視要求を送信する。しかし、この時点でＢ−ＦＰ１（２１２Ｂ）がいずれのノード１１０でも稼動していないため、Ｂ−ＦＰ２（２１３Ｂ）は障害監視要求に対する応答を受信することができない。この場合、図８及び図９において説明したように、状態遷移が発生する。
【０１３９】
図１８は、図１７から状態遷移した後の計算機システムを示す。
【０１４０】
ノード１１０Ｂで稼動していたＢ−ＦＰ２（２１３Ｂ）は、Ｂ−ＦＰ１（２１２Ｂ）に遷移する。さらに、例えば、ノード１１０Ａ、１１０Ｃ及び１１０Ｄの負荷が、それぞれ、「４０％」、「２０％」及び「９０％」である場合、負荷が最も低いノード１１０Ｃで稼動していたＢ−ＦＰ３（２１４Ｂ）がＢ−ＦＰ２（２１３Ｂ）に遷移する。
【０１４１】
以後、Ａ−ＦＰ１（２１２Ａ）〜Ａ−ＦＰ３（２１４Ａ）の組、及び、Ｂ−ＦＰ１（２１２Ｂ）〜Ｂ−ＦＰ３（２１４Ｂ）の組は、それぞれ独立に、図１６までに示した処理を実行する。
【０１４２】
図１９は、本発明の実施の形態の計算機システムにおいて新たなノード１１０が追加された場合に実行される処理の説明図である。
【０１４３】
具体的には、図１９は、図１８に示す計算機システムに、識別子「ＮＡＳ−０４」によって識別されるノード１１０Ｅが追加される例を示す。
【０１４４】
この場合、ノード１１０ＥのＦＰ管理プログラム２１１は、ノード１１０Ａ〜１１０ＤのＦＰ管理プログラムからサービス情報を取得する。図１９の例では、ノード１１０ＡのＦＰ管理プログラム２１１が、Ａ−ＦＰ１（２１２Ａ）が管理しているサービスＡに関するサービス情報をノード１１０ＥのＦＰ管理プログラム２１１に送信する。さらに、ノード１１０ＢのＦＰ管理プログラム２１１が、Ｂ−ＦＰ１（２１２Ｂ）が管理しているサービスＢに関するサービス情報をノード１１０ＥのＦＰ管理プログラム２１１に送信する。
【０１４５】
これらのサービス情報を受信することによって、ノード１１０ＥのＦＰ管理プログラム２１１は、現在２種類のサービスすなわちサービスＡ及びサービスＢが提供されていることを知ることができる。そして、ノード１１０ＥのＦＰ管理プログラム２１１は、ノード１１０ＥにＡ−ＦＰ３（２１４Ａ）及びＢ−ＦＰ３（２１４Ｂ）を生成する。以後、各ノード１１０のフェールオーバプログラム２１０は、これまでに説明した処理を実行する。
【０１４６】
次に、フェールオーバプログラム２１０によって管理される制御情報２１５について説明する。
【０１４７】
図２０は、本発明の実施形態のノード１１０が保持する制御情報２１５の一例を示す説明図である。
【０１４８】
具体的には、図２０は、図１８に示す計算機システムのノード１１０Ｂが保持する制御情報２１５を例として示す。
【０１４９】
制御情報２１５は、自ノードＩＤ２００１、サービス２００２、クライアント２００３、自ノードランク２００４、ＦＰ１＿２００５、ＦＰ２＿２００６、ＦＰ３＿２００７、優先番号２００８及び引き継ぎ情報２００９を含む。
【０１５０】
自ノードＩＤ２００１は、自ノード１１０すなわちこの制御情報を保持しているノード１１０の識別子である。図２０は、ノード１１０Ｂが保持する制御情報２１５を示すため、自ノードＩＤ２００１としてノード１１０Ｂの識別子である「ＮＡＳ−０１」が保持される。
【０１５１】
自ノードＩＤ２００１は、さらに、自ノード１１０の負荷を示す値を含む。図２０には、括弧内に自ノード１１０の負荷を示す値が表示されている。自ノード１１０の負荷は、例えば、ＣＰＵ２０２の使用率（％）であってもよい。図２０の例では、自ノード１１０Ｂの負荷として「１０」（％）が保持される。
【０１５２】
サービス２００２は、自ノード１１０が関与するファイル共有サービスの識別子である。自ノード１１０が関与するファイル共有サービスとは、自ノード１１０で稼動しているＦＰ１（２１２）〜ＦＰ３（２１４）に対応するサービスである。図１８の例では、ノード１１０Ｂにおいて、サービスＡに対応するＡ−ＦＰ２（２１３Ａ）及びサービスＢに対応するＢ−ＦＰ１（２１２Ｂ）が稼動している。このため、図２０の例では、サービス２００２としてサービスＡの識別子「Ａ」及びサービスＢの識別子「Ｂ」が保持される。
【０１５３】
クライアント２００３は、サービス２００２として保持された各サービスの提供を受けるＮＡＳクライアント１６０の識別子である。図２０の例では、サービスＡ及びサービスＢに対応するクライアント２００３として、それぞれ、「１」及び「２」が保持される。
【０１５４】
自ノードランク２００４は、各サービスに対応して自ノード１１０において稼動しているフェールオーバプログラム２１０のランクである。図２０の例では、自ノードランク２００４として、サービスＡに対応する「ＦＰ２」及びサービスＢに対応する「ＦＰ１」が保持される。
【０１５５】
ＦＰ１＿２００５は、各サービスに対応するＦＰ１（２１２）が稼動しているノード１１０の識別子である。図１８の例では、サービスＡに対応するＡ−ＦＰ１（２１２Ａ）がノード１１０Ａで稼動している。このため、図２０の例では、サービスＡに対応するＦＰ１＿２００５として、ノード１１０Ａの識別子「ＮＡＳ−００」が保持される。一方、図１８の例では、サービスＢに対応するＢ−ＦＰ１（２１２Ｂ）は、自ノード１１０Ｂで稼動している。この場合、図２０の例では、サービスＢに対応するＦＰ１＿２００５として有効な値が保持されなくてもよい。
【０１５６】
ＦＰ２＿２００６は、各サービスに対応するＦＰ２（２１３）が稼動しているノード１１０の識別子である。図１８の例では、サービスＡに対応するＡ−ＦＰ２（２１３Ａ）は、自ノード１１０Ｂで稼動している。この場合、図２０の例では、サービスＡに対応するＦＰ２＿２００６として有効な値が保持されなくてもよい。一方、図１８の例では、サービスＢに対応するＢ−ＦＰ２（２１３Ｂ）がノード１１０Ｃで稼動している。このため、図２０の例では、サービスＢに対応するＦＰ２＿２００６として、ノード１１０Ｃの識別子「ＮＡＳ−０２」が保持される。
【０１５７】
ＦＰ３＿２００７は、各サービスに対応するＦＰ３（２１４）が稼動しているノード１１０の識別子である。図１８の例では、サービスＡに対応するＡ−ＦＰ３（２１４Ａ）がノード１１０Ｃ及びノード１１０Ｄで稼動している。このため、図２０の例では、サービスＡに対応するＦＰ３＿２００７として、ノード１１０Ｃ及びノード１１０Ｄの識別子「ＮＡＳ−０２」及び「ＮＡＳ−０３」が保持される。一方、図１８の例では、サービスＢに対応するＢ−ＦＰ３（２１４Ｂ）がノード１１０Ａ及びノード１１０Ｄで稼動している。このため、図２０の例では、サービスＢに対応するＦＰ３＿２００７として、ノード１１０Ａ及びノード１１０Ｄの識別子「ＮＡＳ−００」及び「ＮＡＳ−０３」が保持される。
【０１５８】
自ノード１１０のランクがＦＰ２（２１３）である場合、ＦＰ３＿２００７には、さらに、ＦＰ２（２１３）が取得した各ノード１１０の負荷情報が保持される。図１８の例では、サービスＡに対応する自ノード１１０ＢのランクがＦＰ２（２１３）である。このため、図２０の例では、サービスＡに対応するＦＰ３＿２００７として、ノード１１０Ｃの負荷「２０」及びノード１１０Ｄの負荷「９０」がさらに保持される。図２０では、これらの負荷が括弧内に表示されている。
【０１５９】
優先番号２００８は、自ノード１１０で稼動するＦＰ３（２１４）が他ノード１１０のＦＰ２（２１３）から受信した優先番号である。図１８の例では、自ノード１１０ＢにおいてＦＰ３（２１４）が稼動していない。このため、図２０の例では、優先番号２００８として有効な値が保持されない。
【０１６０】
引き継ぎ情報２００９は、各ノードがＮＡＳクライアント１６０にファイル共有サービスを提供するために必要なサービス情報である。このサービス情報は、障害監視要求に対する応答から取得される。サービス情報は、例えば、サービスの提供を受けることができるユーザを示すユーザ情報、そのサービスによって提供されるファイルシステムの識別子、及び、そのサービスの提供のために使用されるノード１１０のＩＰアドレスを含む。
【０１６１】
引き継ぎ手ノード（すなわちＦＰ２（２１３）が稼動するノード）は、サービスを引き継ぐために、サービス情報を保持する必要がある。図１８の例では、自ノード１１０Ｂは、サービスＡについての引き継ぎノードであるため、サービスＡに関するサービス情報を引き継ぎ情報２００９として保持する。例えば、サービスＡが、総務部に所属するユーザにファイルシステム「ＦＳ１」へのアクセスを提供するサービスであり、そのためにＩＰアドレス「１９２．１６８．１０．１」が使用される場合、サービスＡに対応する引き継ぎ情報２００９として「総務部」、「ＦＳ１」及び「１９２．１６８．１０．１」が保持される。
【０１６２】
さらに、自ノード１１０Ｂは、サービスＢを提供しているため、サービスＢに関するサービス情報を引き継ぎ情報２００９として保持する。例えば、サービスＢが、経理部に所属するユーザにファイルシステム「ＦＳ２」へのアクセスを提供するサービスであり、そのためにＩＰアドレス「１９２．１６８．１０．２」が使用される場合、サービスＢに対応する引き継ぎ情報２００９として「経理部」、「ＦＳ２」及び「１９２．１６８．１０．２」が保持される。
【０１６３】
図２１は、本発明の実施形態のノード１１０が保持する制御情報２１５の別の例を示す説明図である。
【０１６４】
具体的には、図２１は、図１８に示す計算機システムのノード１１０Ｃが保持する制御情報２１５を例として示す。
【０１６５】
図２１の制御情報２１５の各項目の説明は、図２０のものと同様であるため省略する。以下、ノード１１０Ｃに制御情報２１５として保持される具体的な値の例について説明する。
【０１６６】
自ノードＩＤ２００１として、ノード１１０Ｃの識別子である「ＮＡＳ−０２」が保持される。さらに、自ノード１１０Ｃの負荷として「２０」（％）が保持される。
【０１６７】
サービス２００２及びクライアント２００３として保持される値は、図２０に示すものと同様である。
【０１６８】
図１８の例では、ノード１１０Ｃにおいて、サービスＡに対応するＡ−ＦＰ３（２１４Ａ）及びサービスＢに対応するＢ−ＦＰ２（２１３Ｂ）が稼動している。このため、図２１の例では、自ノードランク２００４として、サービスＡに対応する「ＦＰ３」及びサービスＢに対応する「ＦＰ２」が保持される。
【０１６９】
図１８の例では、サービスＡに対応するＡ−ＦＰ１（２１２Ａ）がノード１１０Ａで稼動している。このため、図２０の例では、サービスＡに対応するＦＰ１＿２００５として、ノード１１０Ａの識別子「ＮＡＳ−００」が保持される。一方、図１８の例では、サービスＢに対応するＢ−ＦＰ１（２１２Ｂ）がノード１１０Ｂで稼動している。このため、図２０の例では、サービスＢに対応するＦＰ１＿２００５として、ノード１１０Ｂの識別子「ＮＡＳ−０１」が保持される。
【０１７０】
図１８の例では、サービスＡに対応するＡ−ＦＰ２（２１３Ａ）がノード１１０Ｂで稼動している。このため、図２０の例では、サービスＡに対応するＦＰ２＿２００６として、ノード１１０Ｂの識別子「ＮＡＳ−０１」が保持される。一方、図１８の例では、サービスＢに対応するＢ−ＦＰ２（２１３Ｂ）は、自ノード１１０Ｃで稼動している。この場合、図２０の例では、サービスＢに対応するＦＰ２＿２００６として有効な値が保持されなくてもよい。
【０１７１】
図１８の例では、サービスＡに対応するＡ−ＦＰ３（２１４Ａ）が自ノード１１０Ｃ及びノード１１０Ｄで稼動している。このため、図２０の例では、サービスＡに対応するＦＰ３＿２００７として、少なくとも、ノード１１０Ｄの識別子「ＮＡＳ−０３」が保持される。一方、図１８の例では、サービスＢに対応するＢ−ＦＰ３（２１４Ｂ）がノード１１０Ａ及びノード１１０Ｄで稼動している。このため、図２０の例では、サービスＢに対応するＦＰ３＿２００７として、ノード１１０Ａ及びノード１１０Ｄの識別子「ＮＡＳ−００」及び「ＮＡＳ−０３」が保持される。
【０１７２】
図１８の例では、サービスＢに対応する自ノード１１０ＣのランクがＦＰ２（２１３）である。このため、図２０の例では、サービスＢに対応するＦＰ３＿２００７として、ノード１１０Ａの負荷「４０」及びノード１１０Ｄの負荷「９０」がさらに保持される。
【０１７３】
図１８の例では、自ノード１１０Ｃにおいて、サービスＡに対応するＡ−ＦＰ３（２１４Ａ）が稼動している。このため、ノード１１０Ｃは、ノード１１０Ｂで稼動するＡ−ＦＰ２（２１３Ａ）から優先番号を受信する。図１８に示すようにノード１１０Ｃの負荷がノード１１０Ｄの負荷より低い場合、優先番号としてノード１１０Ｃの識別子「ＮＡＳ−０２」が送信される。このため、図２０の例では、サービスＡに対応する優先番号２００８として「ＮＡＳ−０２」が保持される。仮にノード１１０Ｄの負荷がノード１１０Ｃの負荷より低い場合、優先番号としてノード１１０Ｄの識別子「ＮＡＳ−０３」が送信されるため、優先番号２００８として「ＮＡＳ−０３」が保持される。
【０１７４】
引き継ぎ情報２００９については、図２０と同様であるため、説明を省略する。なお、ＦＰ３（２１４）は、ＦＰ２（２１３）から受信した負荷情報取得要求から、サービス情報を取得することができる。
【０１７５】
次に、各ノード１１０のフェールオーバプログラム２１０が実行する処理について、フローチャートを参照して説明する。これらのフローチャートは、図３から図１９を参照して説明した本実施形態の処理を詳細に説明するものである。
【０１７６】
図２２は、本発明の実施形態のフェールオーバプログラム２１０が実行する処理の概要の説明図である。
【０１７７】
具体的には、図２２は、図５に示すように、ノード１１０Ａ（ＮＡＳ−００）においてＦＰ１（２１２）が、ノード１１０Ｂ（ＮＡＳ−０１）においてＦＰ２（２１３）が、ノード１１０Ｃ及び１１０Ｄ（ＮＡＳ−０２及びＮＡＳ−０３）においてＦＰ３（２１４）が稼動している場合の各ランクのフェールオーバプログラム２１０の処理の概要を示す。
【０１７８】
ＦＰ１（２１２）は、自ノード１１０Ａの障害を監視する。さらに、ＦＰ１（２１２）は、自ノード１１０Ａの負荷情報を取得する。
【０１７９】
ＦＰ２（２１３）は、自ノード１１０Ｂの負荷情報を取得する。さらに、ＦＰ２（２１３）は、ＦＰ３（２１４）から、それらが稼動するノード１１０Ｃ及び１１０Ｄの負荷情報を取得する。さらに、ＦＰ２（２１３）は、ノード１１０Ａの障害を監視する。
【０１８０】
そして、ＦＰ２（２１３）は、自ノード１１０Ｂの負荷が所定の条件を満たす場合、適切なＦＰ３（２１４）に引き継ぎ手ノード変更要求を送信した後、ＦＰ３（２１４）に遷移する。例えば、自ノード１１０Ｂの負荷が待機ノードであるノード１１０Ｃ又は１１０Ｄの負荷より高い場合、所定の条件を満たすと判定されてもよい。あるいは、自ノード１１０Ｂの負荷が、現在サービスを提供しているノード１１０Ａの負荷より高い場合、所定の条件を満たすと判定されてもよい。
【０１８１】
さらに、ＦＰ２（２１３）は、ノード１１０Ａに障害が発生した場合、適切なＦＰ３（２１４）に引き継ぎ手ノード変更要求を送信した後、ＦＰ１（２１２）に遷移する。
【０１８２】
ＦＰ３（２１４）は、自ノード１１０Ｃ又は１１０Ｄの負荷情報を取得する。ＦＰ３（２１４）は、ＦＰ２（２１３）から引き継ぎ手ノード変更要求を受信すると、ＦＰ２（２１３）に遷移する。ＦＰ３（２１４）は、ＦＰ２（２１３）が稼動するノード１１０Ｂに障害が発生すると、優先番号と自ノード１１０Ｃ又は１１０Ｄの識別子とを照合し、それらが一致する場合にはＦＰ２（２１３）に遷移する。
【０１８３】
図２３は、本発明の実施形態のＦＰ１（２１２）が実行する処理のフローチャートである。
【０１８４】
処理が開始されると、ＦＰ１（２１２）は、自ノード１１０（すなわちそのＦＰ１（２１２）が稼動するノード１１０）の障害情報を取得する（ステップ２３０１）。ここで、障害とは、ＣＰＵ２０２、メモリ２０４、Ｉ／Ｆ２０１、Ｉ／Ｆ２０３等のハードウェア障害、又は、自ノード１１０上で稼動するプログラムの不正終了等のソフトウェア障害を意味する。障害情報は、少なくとも、上記のハードウェア障害又はソフトウェア障害が発生したか否かを示す情報を含むが、具体的な障害の内容を示す情報は含まなくてもよい。
【０１８５】
次に、ＦＰ１（２１２）は、自ノード１１０の負荷情報を取得する（ステップ２３０２）。負荷情報は、負荷指標値を含む。負荷指標値は、ノード１１０の負荷を示す値である。負荷指標値は、例えば、ＣＰＵ２０２の使用率、メモリ２０４の使用率、ネットワークリソースの使用率、ディスク装置１２０のＩ／Ｏレート、稼動プロセス数、及び、自ノード１１０内で稼動するＦＰ１（２１２）及びＦＰ２（２１３）のプロセス数のうち少なくとも一つに基づいて算出される値である。
【０１８６】
次に、ＦＰ１（２１２）は、サービス変更情報を受け付ける（ステップ２３０３）。サービス変更情報とは、サービス情報の変更を示す情報である。サービス情報とは、図１０において説明したように、ノード１１０がサービスを提供するために必要な情報である。サービス変更情報は、例えば、追加又は削除されたユーザアカウント、又は、変更されたアクセス権限等を示す情報である。
【０１８７】
次に、ＦＰ１（２１２）は、他のノード１１０で稼動するＦＰ２（２１３）から障害監視要求を受信したか否かを判定する（ステップ２３０４）。
【０１８８】
ステップ２３０４において、障害監視要求を受信したと判定された場合、ＦＰ１（２１２）は、自ノード１１０の障害情報、自ノード１１０の負荷情報及びサービス変更情報を障害監視要求の送信元に送信する（ステップ２３０５）。その後、処理はステップ２３０１に戻る。
【０１８９】
一方、ステップ２３０４において、障害監視要求を受信していないと判定された場合、ＦＰ１（２１２）は、ステップ２３０５を実行せずにステップ２３０１に戻る。
【０１９０】
図２４は、本発明の実施形態のＦＰ２（２１３）が実行する処理のフローチャートである。
【０１９１】
処理が開始されると、ＦＰ２（２１３）は、自ノード１１０の障害情報を取得する（ステップ２４０１）。
【０１９２】
次に、ＦＰ２（２１３）は、自ノード１１０の負荷情報を取得する（ステップ２４０２）。
【０１９３】
次に、ＦＰ２（２１３）は、他のノード１１０において稼動しているＦＰ１（２１２）に障害監視要求を送信する（ステップ２４０３）。ＦＰ１（２１２）は、図２３のステップ２３０４において、この障害監視要求を受信したか否かを判定する。
【０１９４】
次に、ＦＰ２（２１３）は、他のノード１１０において稼動しているＦＰ３（２１４）に負荷情報取得要求を送信する（ステップ２４０４）。この負荷情報取得要求を受信したＦＰ３（２１４）の処理については後述する（図２７参照）。
【０１９５】
次に、ＦＰ２（２１３）は、障害監視処理を実行する（ステップ２４０５）。障害監視処理については、図２５を参照して説明する。
【０１９６】
次に、ＦＰ２（２１３）は、負荷情報収集処理を実行する（ステップ２４０６）。負荷情報収集処理については、図２６を参照して説明する。
【０１９７】
その後、処理はステップ２４０１に戻り、ステップ２４０１以降の処理が繰り返される。なお、その後ステップ２４０４が実行されるとき、負荷情報取得要求には、前回の負荷情報取得要求に対する応答に基づいて決定された優先番号が含まれる（図２６参照）。さらに、後述する障害監視処理によってサービス変更情報を取得した場合、取得したサービス変更情報が、ステップ２４０３で送信される障害監視要求に含まれる。
【０１９８】
図２５は、本発明の実施形態のＦＰ２（２１３）が実行する障害監視処理のフローチャートである。
【０１９９】
図２５に示す処理は、図２４のステップ２４０５において実行される。
【０２００】
最初に、ＦＰ２（２１３）は、ステップ２４０３において送信された障害監視要求に対する応答を受信したか否かを判定する（ステップ２５０１）。
【０２０１】
ステップ２５０１において、応答を受信していないと判定された場合、ＦＰ２（２１３）は、障害監視要求に対する応答を所定のタイミングで受信できたか否かを判定する。図２５の例では、ＦＰ２（２１３）は、ＦＰ１（２１２）から障害監視要求に対する応答を最後に受信した後、所定の時間が経過したか否かを判定する（ステップ２５０３）。あるいは、ＦＰ２（２１３）は、障害監視要求を送信してから所定の時間が経過したか否かを判定してもよい。
【０２０２】
ステップ２５０３において、所定の時間が経過していないと判定された場合、ＦＰ１（２１２）が稼動するノード１１０に障害が発生したか否かをまだ判定することができない。このため、ＦＰ２（２１３）は通常処理に戻る（ステップ２５０７）。すなわち、ＦＰ２（２１３）は図２４のステップ２４０５に戻り、ステップ２４０５より後の処理を実行する。
【０２０３】
一方、ステップ２５０３において、所定の時間が経過したと判定された場合、ＦＰ１（２１２）が稼動するノード１１０に障害が発生したと判定される。この場合、処理はステップ２５０４に進む。
【０２０４】
ステップ２５０１において、応答を受信したと判定された場合、ＦＰ２（２１３）は、応答の内容を参照して、その応答を送信したノード１１０に障害が発生したか否かを判定する（ステップ２５０２）。例えば、その応答が、ノード１１０に障害が発生したことを示す情報を含む場合、ＦＰ２（２１３）は、その応答を送信したノード１１０に障害が発生したと判定する。
【０２０５】
ステップ２５０２において、ノード１１０に障害が発生していないと判定された場合、ＦＰ２（２１３）は通常処理に戻る（ステップ２５０７）。
【０２０６】
一方、ステップ２５０２において、ノード１１０に障害が発生したと判定された場合、ＦＰ２（２１３）は、引き継ぎ手ノードに最も適したノード１１０で稼動するＦＰ３（２１４）に引き継ぎ手ノード変更要求を送信する（ステップ２５０４）。引き継ぎ手ノードに最も適したノードとは、例えば、ＦＰ３（２１４）が稼動するノード１１０のうち、負荷が最も低いノード１１０である。
【０２０７】
次に、ＦＰ２（２１３）は、ＦＰ１（２１２）に遷移するため、ＦＰ管理プログラム２１１にＦＰ１（２１２）の生成要求を送信する（ステップ２５０５）。
【０２０８】
ステップ２５０５が終了すると、ＦＰ２（２１３）の処理が終了する（２５０６）。
【０２０９】
図２６は、本発明の実施形態のＦＰ２（２１３）が実行する負荷情報収集処理のフローチャートである。
【０２１０】
最初に、ＦＰ２（２１３）は、他のノード１１０で稼動する全てのＦＰ３（２１４）に障害情報取得要求を送信する（ステップ２６０１）。
【０２１１】
次に、ＦＰ２（２１３）は、所定の時間、障害情報取得要求に対する各ＦＰ３（２１４）からの応答を待つ（ステップ２６０２）。
【０２１２】
次に、ＦＰ２（２１３）は、各ＦＰ３（２１４）から受信した応答を参照して、最も負荷が低い待機ノードを探索する（ステップ２６０３）。この探索の結果発見された待機ノードを、以下、「Ｘ」と記載する。
【０２１３】
次に、ＦＰ２（２１３）は、Ｘの負荷が自ノード１１０の負荷より低いか否かを判定する（ステップ２６０４）。Ｘの負荷が自ノード１１０の負荷より低いと判定された場合、自ノード１１０よりＸの方が引き継ぎ手ノードに適している。この場合、処理はステップ２６０５に進む。一方、Ｘの負荷が自ノード１１０の負荷より低くないと判定された場合、処理はステップ２６０８に進む。
【０２１４】
なお、ステップ２６０４では、負荷として、各ノード１１０にアクセスするユーザ数が比較されてもよい。例えば、Ｘにアクセスするユーザ数が自ノード１１０にアクセスするユーザ数より少ない場合、自ノード１１０よりＸの方が引き継ぎ手ノードに適していると判定される。あるいは、負荷として、各ノード１１０が管理するファイルシステム数が比較されてもよい。例えば、Ｘが管理するファイルシステム数が、自ノードが管理するファイルシステム数より少ない場合、自ノード１１０よりＸの方が引き継ぎ手ノードに適していると判定される。
【０２１５】
あるいは、現在の負荷の代わりに、各ノード１１０の負荷の増加率が比較されてもよい。例えば、Ｘの負荷の増加率が自ノード１１０の負荷の増加率より低い場合、自ノード１１０よりＸの方が引き継ぎ手ノードに適していると判定される。あるいは、各ノード１１０の負荷の増加率から、所定の時間経過後の負荷の値を予測し、その予測された負荷の値が比較されてもよい。
【０２１６】
ステップ２６０８において、ＦＰ２（２１３）は、Ｘに割り当てられている番号（例えば、Ｘの識別子）を優先番号として設定する。この優先番号は、次回のステップ２４０４において、全ての待機ノードに送信される。
【０２１７】
次に、ＦＰ２（２１３）は、通常処理に戻る（ステップ１６０９）。すなわち、ＦＰ２（２１３）は図２４のステップ２４０６に戻り、ステップ２４０６より後の処理を実行する。
【０２１８】
ステップ２６０５において、ＦＰ２（２１３）は、Ｘにおいて稼動しているＦＰ３（２１４）に対して、引き継ぎ手ノード変更要求を送信する。引き継ぎ手ノード変更要求には、サービスを引き継ぐために必要なサービス情報が含まれる。このサービス情報は、引き継ぎ情報２００９としてＦＰ３（２１４）によって保持される。
【０２１９】
次に、ＦＰ２（２１３）は、ＦＰ３（２１４）に遷移するため、ＦＰ管理プログラム２１１にＦＰ３（２１４）の生成要求を送信する（ステップ２６０６）。
【０２２０】
ステップ２６０６が終了すると、ＦＰ２（２１３）の処理が終了する（２６０７）。
【０２２１】
図２７は、本発明の実施形態のＦＰ３（２１４）が実行する処理のフローチャートである。
【０２２２】
処理が開始されると、ＦＰ３（２１４）は、自ノード１１０の障害情報を取得する（ステップ２７０１）。
【０２２３】
次に、ＦＰ３（２１４）は、ＦＰ２（２１３）から負荷情報取得要求を受信したか否かを判定する（ステップ２７０２）。
【０２２４】
ステップ２７０２において、負荷情報取得要求を受信したと判定された場合、ＦＰ３（２１４）は、受信した要求に応答する（ステップ２７０３）。具体的には、ＦＰ３（２１４）は、ステップ２７０１において取得した自ノード１１０の障害情報を、負荷情報取得要求の送信元に送信する。
【０２２５】
次に、ＦＰ３（２１４）は、受信した負荷情報取得要求に含まれる優先番号を保存する（ステップ２７０４）。具体的には、ＦＰ３（２１４）は、受信した負荷情報取得要求に含まれる優先番号を、制御情報２１５の優先番号２００８として保持する。
【０２２６】
次に、ＦＰ３（２１４）は、受信した負荷情報取得要求に含まれるサービス変更情報を保存する（ステップ２７０５）。具体的には、ＦＰ３（２１４）は、受信した負荷情報取得要求に含まれるサービス変更情報を、制御情報２１５の引き継ぎ情報２００９に反映させる。
【０２２７】
次に、ＦＰ３（２１４）は、ＦＰ２（２１３）から引き継ぎ手ノード変更要求を受信したか否かを判定する（ステップ２７０６）。
【０２２８】
ステップ２７０６において、引き継ぎ手ノード変更要求を受信していないと判定された場合、処理はステップ２７０１に戻る。
【０２２９】
一方、ステップ２７０６において、引き継ぎ手ノード変更要求を受信したと判定された場合、ＦＰ３（２１４）は、ＦＰ２（２１３）に遷移するため、ＦＰ管理プログラム２１１にＦＰ２（２１３）の生成要求を送信する（ステップ２７０７）。
【０２３０】
ステップ２７０２において、負荷情報取得要求を受信していないと判定された場合、ＦＰ３（２１４）は、最後に負荷情報取得要求を受信してから所定の時間が経過したか否かを判定する（ステップ２７０８）。
【０２３１】
ステップ２７０８において、所定の時間が経過していないと判定された場合、ＦＰ２（２１３）が稼動するノード１１０に障害が発生したか否かをまだ判定することができない。この場合、処理は２７０６に進む。
【０２３２】
一方、ステップ２７０８において、所定の時間が経過したと判定された場合、ＦＰ２（２１３）が稼動するノード１１０に障害が発生したと判定される。この場合、ＦＰ３（２１４）は、ＦＰ３（２１４）が保持している優先番号が自ノード１１０に割り当てられている番号（例えば、自ノード１１０の識別子）と同一であるか否かを判定する（ステップ２７０９）。
【０２３３】
ステップ２７０９において、優先番号が自ノード１１０に割り当てられている番号と同一でないと判定された場合、自ノード１１０は、引き継ぎ手ノードに最も適した待機ノードでない。この場合、処理はステップ２７０６に進む。
【０２３４】
一方、ステップ２７０９において、優先番号が自ノード１１０に割り当てられている番号と同一であると判定された場合、自ノード１１０は、引き継ぎ手ノードに最も適した待機ノードである。この場合、ＦＰ２（２１３）に遷移するため、処理はステップ２７０７に進む。
【０２３５】
ステップ２７０７が終了すると、ＦＰ３（２１４）の処理が終了する（２７１０）。
【０２３６】
図２８は、本発明の実施形態のＦＰ管理プログラム２１１が実行する処理のフローチャートである。
【０２３７】
既に説明したように、フェールオーバプログラム２１０の状態遷移は、ＦＰ１（２１２）、ＦＰ２（２１３）及びＦＰ３（２１４）の消滅及び生成によって実現される。例えばＦＰ２（２１３）がＦＰ３（２１４）に遷移する場合、ＦＰ２（２１３）が終了し、その後、新たなプロセスとしてＦＰ３（２１４）が生成される。ＦＰ管理プログラム２１１は、このようなフェールオーバプログラム２１０の状態遷移を管理する特別なプログラムである。
【０２３８】
具体的には、ＦＰ管理プログラム２１１は、各ランクのフェールオーバプログラム２１０の終了を検知すると、指定されたランクのフェールオーバプログラム２１０（すなわち、ＦＰ１（２１２）、ＦＰ２（２１３）又はＦＰ３（２１４））を新たに子プロセスとして生成する。生成されるべきランク（すなわち、状態遷移後のランク）は、終了するランクのフェールオーバプログラム２１０（すなわち、状態遷移前のフェールオーバプログラム２１０）によって事前に指定されている。生成されるべきランクが事前に指定されていなかった場合（例えば、障害発生によってフェールオーバプログラム２１０が終了した場合等）、状態遷移前のプロセスが終了した後、ＦＰ管理プログラム２１１は、ＦＰ３（２１４）を生成する。
【０２３９】
さらに、ＦＰ管理プログラム２１１は、起動時に、他のノード１１０で稼動しているＦＰ管理プログラム２１１に対してサービス状況取得要求を送信する。サービス状況取得要求を受信したＦＰ管理プログラム２１１は、自ノード１１０で稼動しているＦＰ１（２１２）の数、及び、それらが提供しているサービスに関するサービス情報を応答する。この応答に基づいて、起動したＦＰ管理プログラム２１１は、計算機システム内で提供されているサービスの数を知ることができる。そして、起動したＦＰ管理プログラム２１１は、提供されているサービスの数のＦＰ３（２１４）を生成する。
【０２４０】
ユーザから新規のサービスを生成する要求を受けたＦＰ管理プログラム２１１は、ＦＰ２（２１３）を生成する。さらに、ＦＰ管理プログラム２１１は、他のノード１１０のＦＰ管理プログラム２１１に、サービスの新規生成を通知する。この通知を受けたＦＰ管理プログラム２１１は、新たにＦＰ３（２１４）を生成する。
【０２４１】
以下、ＦＰ管理プログラム２１１の具体的な処理を説明する。
【０２４２】
最初に、ＦＰ管理プログラム２１１は、他のノード１１０のＦＰ管理プログラム２１１から、提供されているサービスの数及びサービス情報を取得する（ステップ２８０１）。
【０２４３】
次に、ＦＰ管理プログラム２１１は、提供されているサービスの数と同数のＦＰ３（２１４）を生成する（ステップ２８０２）。
【０２４４】
次に、ＦＰ管理プログラム２１１は、ＦＰ生成要求を受信したか否かを判定する（ステップ２８０３）。ＦＰ生成要求とは、図２５のステップ２５０５、図２６のステップ２６０６又は図２７のステップ２７０７において送信された要求である。
【０２４５】
ステップ２８０３において、ＦＰ生成要求を受信していないと判定された場合、処理はステップ２８０６に進む。
【０２４６】
一方、ステップ２８０３において、ＦＰ生成要求を受信したと判定された場合、ＦＰ管理プログラム２１１は、状態遷移前のプロセス、すなわち、ＦＰ１（２１２）、ＦＰ２（２１３）又はＦＰ３（２１４）が終了したか否かを判定する（ステップ２８０４）。
【０２４７】
ステップ２８０４において、状態遷移前のプロセスが終了していないと判定された場合、プロセスの終了を待つため、処理はステップ２８０４に戻る。
【０２４８】
一方、ステップ２８０４において、状態遷移前のプロセスが終了したと判定された場合、ＦＰ管理プログラム２１１は、ＦＰ生成要求によって指定されたプロセスを生成する（ステップ２８０５）。
【０２４９】
次に、ＦＰ管理プログラム２１１は、他のノード１１０のＦＰ管理プログラム２１１からサービス状況取得要求を受信したか否かを判定する（ステップ２８０６）。このサービス状況取得要求は、他のノード１１０のＦＰ管理プログラム２１１がステップ２８０１において送信したものである。
【０２５０】
ステップ２８０６において、サービス状況取得要求を受信していないと判定された場合、処理はステップ２８０３に戻る。
【０２５１】
一方、ステップ２８０６において、サービス状況取得要求を受信したと判定された場合、ＦＰ管理プログラム２１１は、自ノード１１０内で稼動しているＦＰ１（２１２）の数、及び、それらのＦＰ１（２１２）が提供しているサービスに関するサービス情報を、要求の送信元に送信する（ステップ２８０７）。
【０２５２】
次に、ＦＰ管理プログラム２１１は、他のノード１１０のＦＰ管理プログラム２１１からサービス新規追加通知を受信したか否かを判定する（ステップ２８０８）。
【０２５３】
ステップ２８０８において、サービス新規追加通知を受信していないと判定された場合、処理はステップ２８０３に戻る。
【０２５４】
一方、ステップ２８０８において、サービス新規追加通知を受信したと判定された場合、ＦＰ管理プログラム２１１は、ＦＰ３（２１４）を生成し（ステップ２８０９）、ステップ２８０３に戻る。
【０２５５】
以上、本発明の実施形態によれば、サービスを提供するノードに障害が発生したときに、そのサービスの提供を引き継ぐ引き継ぎ手ノードがあらかじめ選択される。このため、障害発生時の速やかな引き継ぎが実現される。さらに、障害が発生する前にノードの負荷が変動した場合、その時点で負荷が最も低いノードが引き継ぎ手ノードとなるように引き継ぎ手ノードが変更される。このため、負荷の均衡による安定した動作が実現される。これらの処理はノードによって自動的に実行されるため、運用管理コストを低減することができる。
【図面の簡単な説明】
【０２５６】
【図１】本発明の実施形態の計算機システムのハードウェア構成を示すブロック図である。
【図２】本発明の実施形態のノードのハードウェア構成を示すブロック図である。
【図３】本発明の実施形態のフェールオーバプログラムの状態遷移の説明図である。
【図４】本発明の実施形態において実行される処理の前提となる計算機システムの構成を示す説明図である。
【図５】本発明の実施形態の計算機システムが定常状態である場合に実行される処理の説明図である。
【図６】本発明の実施形態の計算機システムにおいて実行される引き継ぎ手ノード変更処理の説明図である。
【図７】本発明の実施形態において引き継ぎ手ノード変更処理が実行された後の計算機システムの説明図である。
【図８】本発明の実施形態の計算機システムにおいて実行されるサービスの引き継ぎ処理の説明図である。
【図９】本発明の実施形態においてサービスの引き継ぎ処理が実行された後の計算機システムの説明図である。
【図１０】本発明の実施形態の計算機システムにおいて提供されるファイル共有サービスの具体例の説明図である。
【図１１】本発明の実施形態の計算機システムにおいて実行されるサービスの引き継ぎ処理の詳細な説明図である。
【図１２】本発明の実施形態の計算機システムにおいて実行されるサービスの引き継ぎ処理の詳細な説明図である。
【図１３】本発明の実施形態の計算機システムにおいて引き継ぎ手ノードに障害が発生した場合に実行される処理の説明図である。
【図１４】本発明の実施形態において引き継ぎ手ノードが変更された後の計算機システムの説明図である。
【図１５】本発明の実施形態の計算機システムにおいて待機ノードに障害が発生した場合に実行される処理の説明図である。
【図１６】本発明の実施形態の計算機システムにおいてノードが障害から回復した場合に実行される処理の説明図である。
【図１７】本発明の実施形態の計算機システムにおいて提供されるサービスが追加された場合に実行される処理の説明図である。
【図１８】本発明の実施形態の計算機システムにおいて提供されるサービスが追加された場合に実行される処理の説明図である。
【図１９】本発明の実施の形態の計算機システムにおいて新たなノードが追加された場合に実行される処理の説明図である。
【図２０】本発明の実施形態のノードが保持する制御情報の一例を示す説明図である。
【図２１】本発明の実施形態のノードが保持する制御情報の別の例を示す説明図である。
【図２２】本発明の実施形態のフェールオーバプログラムが実行する処理の概要の説明図である。
【図２３】本発明の実施形態の第１のランクのフェールオーバプログラムが実行する処理のフローチャートである。
【図２４】本発明の実施形態の第２のランクのフェールオーバプログラムが実行する処理のフローチャートである。
【図２５】本発明の実施形態の第２のランクのフェールオーバプログラムが実行する障害監視処理のフローチャートである。
【図２６】本発明の実施形態の第２のランクのフェールオーバプログラムが実行する負荷情報収集処理のフローチャートである。
【図２７】本発明の実施形態の第３のランクのフェールオーバプログラムが実行する処理のフローチャートである。
【図２８】本発明の実施形態のＦＰ管理プログラムが実行する処理のフローチャートである。
【符号の説明】
【０２５７】
１１０Ａ〜１１０Ｅ  ノード
１２０  ディスク装置
１２２、１２４、１６２、２０１、２０３  インターフェース
１２３、１６１、２０２  ＣＰＵ
１２５、１６３、２０４  メモリ
１３０  ストレージネットワーク
１６０  ＮＡＳクライアント
１８０  ローカルエリアネットワーク（ＬＡＮ）
２１０  フェールオーバプログラム（ＦＰ）
２１１  ＦＰ管理プログラム
２１２  ＦＰ１
２１３  ＦＰ２
２１４  ＦＰ３
２１５  制御情報
【図１】
0004855355.tif 000002
【図２】
0004855355.tif 000003
【図３】
0004855355.tif 000004
【図４】
0004855355.tif 000005
【図５】
0004855355.tif 000006
【図６】
0004855355.tif 000007
【図７】
0004855355.tif 000008
【図８】
0004855355.tif 000009
【図９】
0004855355.tif 000010
【図１０】
0004855355.tif 000011
【図１１】
0004855355.tif 000012
【図１２】
0004855355.tif 000013
【図１３】
0004855355.tif 000014
【図１４】
0004855355.tif 000015
【図１５】
0004855355.tif 000016
【図１６】
0004855355.tif 000017
【図１７】
0004855355.tif 000018
【図１８】
0004855355.tif 000019
【図１９】
0004855355.tif 000020
【図２０】
0004855355.tif 000021
【図２１】
0004855355.tif 000022
【図２２】
0004855355.tif 000023
【図２３】
0004855355.tif 000024
【図２４】
0004855355.tif 000025
【図２５】
0004855355.tif 000026
【図２６】
0004855355.tif 000027
【図２７】
0004855355.tif 000028
【図２８】
0004855355.tif 000029