(57)【要約】【課題】保守・管理装置の異常によるフェイルオーバー後などに、単一障害点が発生し、保守・管理装置の信頼性が低下する。【解決手段】複数のストレージシステムと、前記複数のストレージシステムを管理する複数の管理装置と、を備える計算機システムを制御する方法であって、第１管理装置及び第２管理装置は、前記第１ストレージシステムの識別子及び第１ストレージシステムから取得した管理データを保持し、前記方法は、前記第１管理装置に障害が発生した場合、前記複数の管理装置から第３管理装置を選択する手順と、前記第２管理装置に保持されている前記識別子を、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、前記第２管理装置から送信された前記識別子を前記選択された第３管理装置が保持する手順と、を含む。【選択図】図３
2008250421.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージシステムと、前記複数のストレージシステムを管理する複数の管理装置と、を備える計算機システムを制御する方法であって、
前記各ストレージシステムは、データを格納する記憶装置と、前記記憶装置へのデータの格納を制御する制御装置と、を備え、
前記各管理装置は、前記ストレージシステムから取得されたデータを受信する第１インターフェイスと、前記第１インターフェイスに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記第１インターフェイスは、前記複数の管理装置を通信可能に接続する第１ネットワークに接続され、
前記複数の管理装置は、第１管理装置、第２管理装置及び第３管理装置を含み、
前記ストレージシステムは、第１ストレージシステムを含み、
前記第１管理装置及び前記第２管理装置は、前記第１ストレージシステムの識別子及び前記第１ストレージシステムから取得した管理データを保持し、
前記方法は、
前記第１管理装置に障害が発生した場合、前記複数の管理装置から前記第３管理装置を選択する手順と、
前記第２管理装置に保持されている前記第１ストレージシステムの識別子を、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、
前記第２管理装置から送信された前記第１ストレージシステムの識別子を前記選択された第３管理装置が保持する手順と、を含むことを特徴とする方法。
【請求項２】
前記第１管理装置、前記第２管理装置及び前記第３管理装置を含む前記複数の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを他の前記管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記方法は、さらに、
前記第２管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、
前記第２管理装置から送信された前記管理データを、前記選択された第３管理装置が保持する手順と、を含み、
前記複数の管理装置から前記第３管理装置を選択する手順は、保持している前記管理データの取得元である前記ストレージシステムの数が最も少ない前記待機管理装置を選択することによって実行されることを特徴とする請求項１に記載の方法。
【請求項３】
前記複数のストレージシステムは、さらに第２ストレージシステムを含み、
前記複数の管理装置は、さらに第４管理装置及び第５管理装置を含み、
前記第１管理装置は、前記第１ストレージシステムから取得した前記管理データを前記第２管理装置に送信し、
前記第４管理装置は、前記第２ストレージシステムから取得した前記管理データを前記第２管理装置に送信し、
前記第２管理装置は、前記第１管理装置及び前記第４管理装置から前記管理データを受信し、前記受信した管理データを保持し、前記第１ストレージシステムの識別子及び前記第２ストレージシステムの識別子を保持し、
前記第５管理装置を含む前記複数の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを他の前記管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記方法は、さらに、
前記第２管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、
前記第２管理装置から送信された前記管理データを、前記選択された第３管理装置が保持する手順と、
前記第１管理装置に障害が発生した場合、前記複数の管理装置から前記第５管理装置を選択する手順と、
前記第２管理装置に保持されている、前記第２ストレージシステムの識別子、及び、前記第４管理装置から受信した管理データを、前記第２管理装置から前記第５管理装置に送信する手順と、
前記第２管理装置から送信された前記第２ストレージシステムの識別子及び前記管理データを前記第５管理装置が保持する手順と、を含み、
前記複数の管理装置から前記第５管理装置を選択する手順は、保持している前記管理データの取得元である前記ストレージシステムの数が最も少ない前記待機管理装置を選択することによって実行されることを特徴とする請求項１に記載の方法。
【請求項４】
前記第１管理装置、前記第２管理装置及び前記第３管理装置を含む前記複数の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを他の前記管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記方法は、さらに、
前記第２管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、
前記第２管理装置から送信された前記管理データを、前記選択された第３管理装置が保持する手順と、を含み、
前記複数の管理装置から前記第３管理装置を選択する手順は、前記第２管理装置から最も近い位置に設置された前記待機管理装置を選択することによって実行されることを特徴とする請求項１に記載の方法。
【請求項５】
前記第１管理装置、前記第２管理装置及び前記第３管理装置を含む前記複数の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを他の前記管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記各管理装置は、所定の要求に対して応答するか否かを示す情報を保持し、
前記方法は、さらに、
前記第２管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、
前記第２管理装置から送信された前記管理データを、前記選択された第３管理装置が保持する手順と、を含み、
前記複数の管理装置から前記第３管理装置を選択する手順は、
前記所定の要求を前記第２管理装置から前記複数の管理装置に送信する手順と、
前記所定の要求に対して応答することを示す前記情報を保持する前記管理装置が応答を送信する手順と、
前記所定の要求に対する応答を送信した前記複数の管理装置から前記第３管理装置を選択する手順と、を含み、
前記応答は、前記応答を送信した前記管理装置の前記第１インターフェイスのアドレスと、前記応答を送信した前記管理装置が保持する前記管理データの取得元である前記ストレージシステムの数と、を含み、
前記稼動管理装置が保持する前記情報は、前記所定の要求に対して応答しないことを示すことを特徴とする請求項１に記載の方法。
【請求項６】
前記複数の管理装置は、さらに第６管理装置を含み、
前記第１管理装置、前記第２管理装置、前記第３管理装置及び前記第６管理装置を含む前記複数の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを他の前記管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記方法は、さらに、
前記第２管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、
前記第２管理装置から送信された前記管理データを、前記選択された第３管理装置が保持する手順と、
複数の前記稼動管理装置から前記管理データを取得する前記待機管理装置のうち、保持している前記管理データの取得元である前記ストレージシステムの数が最も多い前記待機管理装置を選択する手順と、
前記選択された待機管理装置に前記管理データを送信している前記複数の稼動管理装置のうち少なくとも一つを選択する手順と、
前記選択された少なくとも一つの稼動管理装置が前記管理データを取得している前記ストレージシステムの識別子を、前記選択された待機管理装置から前記第６管理装置に送信する手順と、
前記選択された待機管理装置が保持する前記管理データのうち、前記選択された少なくとも一つの稼動管理装置から送信された前記管理データを、前記選択された待機管理装置から前記第６管理装置に送信する手順と、
前記選択された待機管理装置から送信された前記ストレージシステムの識別子及び前記管理データを前記第６管理装置が保持する手順と、を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記計算機システムが、複数の前記稼動管理装置から前記管理データを取得する前記待機管理装置を備えない場合、前記管理データの取得元である前記ストレージシステムの数が最も多い前記待機管理装置を選択する手順と、前記複数の稼動管理装置のうち少なくとも一つを選択する手順と、前記選択された少なくとも一つの稼動管理装置から送信された前記管理データを前記選択された待機管理装置から前記第６管理装置に送信する手順と、送信された前記管理データを前記第６管理装置が保持する手順と、が実行されないことを特徴とする請求項６に記載の方法。
【請求項８】
前記複数の管理装置は、さらに第６管理装置を備え、
前記第１管理装置、前記第２管理装置、前記第３管理装置及び前記第６管理装置を含む前記複数の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを他の前記管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記方法は、さらに、
前記第２管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、
前記第２管理装置から送信された前記管理データを、前記選択された第３管理装置が保持する手順と、
複数の前記稼動管理装置から前記管理データを取得する前記待機管理装置のうち、前記第６管理装置と最も近い位置に設置されている前記待機管理装置を選択する手順と、
前記選択された待機管理装置に前記管理データを送信している前記複数の稼動管理装置のうち少なくとも一つを選択する手順と、
前記選択された少なくとも一つの稼動管理装置が前記管理データを取得している前記ストレージシステムの識別子を、前記選択された待機管理装置から前記第６管理装置に送信する手順と、
前記選択された待機管理装置が保持する前記管理データのうち、前記選択された少なくとも一つの稼動管理装置から送信された前記管理データを、前記選択された待機管理装置から前記第６管理装置に送信する手順と、
前記選択された待機管理装置から送信された前記ストレージシステムの識別子及び前記管理データを前記第６管理装置が保持する手順と、を含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記ストレージシステムの前記制御装置は、計算機に接続される第３インターフェイスと、前記第３インターフェイスに接続される第２プロセッサと、前記第２プロセッサに接続され、データを一時的に格納するキャッシュメモリと、を備え、
前記管理データは、前記第２プロセッサに障害が発生したか否かを示すデータ、前記キャッシュメモリの使用率を示すデータ、前記第３インターフェイスにおけるデータ入出力回数を示すデータ、前記記憶装置に対するデータ入出力回数を示すデータ、のうち少なくとも一つを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
計算機システムに含まれる複数のストレージシステムのうち少なくとも一つを管理する管理装置であって、
前記ストレージシステムは、第１ストレージシステムを含み、
前記複数の他の管理装置は、第１管理装置及び第２管理装置を含み、
前記計算機システムは、前記管理装置に加えて、前記複数のストレージシステムのうち少なくとも一つを管理する複数の他の管理装置を備え、
前記管理装置は、
前記ストレージシステムから取得されたデータを受信する第１インターフェイスと、前記際１インターフェイスに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記第１ストレージシステムから取得した管理データを保持し、
前記第１インターフェイスに接続された第１ネットワークを介して前記複数の他の管理装置と通信可能に接続され、
前記第１管理装置は、前記第１ストレージシステムの識別子及び前記第１ストレージシステムから取得した管理データを保持し、
前記プロセッサは、
前記第１管理装置に障害が発生した場合、前記複数の他の管理装置から前記第２管理装置を選択し、
前記管理装置に保持されている前記第１ストレージシステムの識別子を、前記第１ネットワークを介して前記選択された第２管理装置に送信することを特徴とする管理装置。
【請求項１１】
前記管理装置、及び、前記第１管理装置及び前記第２管理装置を含む前記複数の他の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを前記管理装置又は前記他の管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記プロセッサは、
保持している前記管理データの取得元である前記ストレージシステムの数が最も少ない前記待機管理装置を前記第２管理装置として選択し、
前記管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第１ネットワークを介して、前記選択された第２管理装置に送信することを特徴とする請求項１０に記載の管理装置。
【請求項１２】
前記複数のストレージシステムは、さらに第２ストレージシステムを含み、
前記複数の他の管理装置は、さらに第３管理装置及び第４管理装置を含み、
前記管理装置は、
前記第１管理装置が前記第１ストレージシステムから取得した前記管理データを前記第１管理装置から受信し、
前記第３管理装置が前記第２ストレージシステムから取得した前記管理データを前記第３管理装置から受信し、
前記受信した管理データ、前記第１ストレージシステムの識別子、及び、前記第２ストレージシステムの識別子を保持し、
前記第４管理装置を含む前記複数の他の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを前記管理装置又は前記他の管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記プロセッサは、さらに、
前記管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第１ネットワークを介して、前記選択された第２管理装置に送信し、
前記第１管理装置に障害が発生した場合、前記複数の他の管理装置のうち、保持している前記管理データの取得元である前記ストレージシステムの数が最も少ない前記待機管理装置を前記第４管理装置として選択し、
前記管理装置に保持されている、前記第２ストレージシステムの識別子、及び、前記第３管理装置から受信した管理データを、前記第１ネットワークを介して前記第４管理装置に送信することを特徴とする請求項１０に記載の管理装置。
【請求項１３】
前記管理装置、及び、前記第１管理装置及び前記第２管理装置を含む前記複数の他の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを前記管理装置又は前記他の管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記プロセッサは、
前記管理装置から最も近い位置に設置された前記待機管理装置を前記第２管理装置として選択し、
前記管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第１ネットワークを介して、前記選択された第２管理装置に送信することを特徴とする請求項１０に記載の管理装置。
【請求項１４】
前記管理装置、及び、前記第１管理装置及び前記第２管理装置を含む前記複数の他の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを前記管理装置又は前記他の管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記管理装置は、所定の要求に対して応答するか否かを示す情報を保持し、
前記プロセッサは、
前記所定の要求を前記第１インターフェイスを介して前記複数の他の管理装置に送信し、
前記所定の要求に対する応答を送信した前記複数の他の管理装置から前記第２管理装置を選択し、
前記管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第１ネットワークを介して、前記選択された第２管理装置に送信することを特徴とする請求項１０に記載の管理装置。
【請求項１５】
前記第１インターフェイスを介して前記所定の要求を受信した前記プロセッサは、前記情報が前記所定の要求に対して応答することを示す場合、前記所定の要求に対する応答を送信し、
前記応答は、前記応答を送信した前記管理装置の前記第１インターフェイスのアドレスと、前記応答を送信した前記管理装置が保持する前記管理データの取得元である前記ストレージシステムの数と、を含み、
前記管理装置が前記稼動管理装置である場合、前記情報は、前記所定の要求に対して応答しないことを示すことを特徴とする請求項１４に記載の管理装置。
【請求項１６】
前記管理装置、及び、前記第１管理装置及び前記第２管理装置を含む前記複数の他の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを前記管理装置又は前記他の管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記プロセッサは、
前記管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第１ネットワークを介して、前記選択された第２管理装置に送信し、
複数の前記稼動管理装置から前記管理データを取得する前記待機管理装置のうち、保持している前記管理データの取得元である前記ストレージシステムの数が最も多い前記待機管理装置を選択し、
前記選択された待機管理装置に前記管理データを送信している前記複数の稼動管理装置のうち少なくとも一つを選択し、
前記選択された少なくとも一つの稼動管理装置が前記管理データを取得している前記ストレージシステムの識別子を、前記管理装置に送信することを前記選択された待機管理装置に要求し、
前記選択された待機管理装置が保持する前記管理データのうち、前記選択された少なくとも一つの稼動管理装置から送信された前記管理データを、前記管理装置に送信することを前記選択された待機管理装置に要求し、
前記選択された待機管理装置から送信された前記管理データを保持することを特徴とする請求項１０に記載の管理装置。
【請求項１７】
前記計算機システムが、複数の前記稼動管理装置から前記管理データを取得する前記待機管理装置を備えない場合、前記プロセッサは、前記管理データの取得元である前記ストレージシステムの数が最も多い前記待機管理装置の選択する手順と、前記複数の稼動管理装置のうち少なくとも一つを選択する手順と、前記選択された少なくとも一つの稼動管理装置から送信された前記管理データを前記管理装置に送信することを前記選択された待機管理装置に要求する手順と、送信された前記管理データを保持する手順と、を実行しないことを特徴とする請求項１６に記載の管理装置。
【請求項１８】
前記管理装置、及び、前記第１管理装置及び前記第２管理装置を含む前記複数の他の管理装置は、それぞれ、前記ストレージシステムから取得した前記管理データを前記管理装置又は前記他の管理装置に送信する稼動管理装置、又は、前記稼動管理装置から送信された前記管理データを受信する待機管理装置のいずれかであり、
前記プロセッサは、
前記管理装置に保持されている戦記第１ストレージシステムから取得した前記管理データを、前記第１ネットワークを介して、前記選択された第２管理装置に送信し、
複数の前記稼動管理装置から前記管理データを取得する前記待機管理装置のうち、前記管理装置と最も近い位置に設置されている前記待機管理装置を選択し、
前記選択された待機管理装置に前記管理データを送信している前記複数の稼動管理装置のうち少なくとも一つを選択し、
前記選択された少なくとも一つの稼動管理装置が前記管理データを取得している前記ストレージシステムの識別子を、前記管理装置に送信することを前記選択された待機管理装置に要求し、
前記選択された待機管理装置が保持する前記管理データのうち、前記選択された少なくとも一つの稼動管理装置から送信された前記管理データを、前記管理装置に送信することを前記選択された待機管理装置に要求し、
前記選択された待機管理装置から送信された前記管理データを保持することを特徴とする請求項１０に記載の管理装置。
【請求項１９】
前記ストレージシステムの前記制御装置は、計算機に接続される第３インターフェイスと、前記第３インターフェイスに接続される第２プロセッサと、前記第２プロセッサに接続され、データを一時的に格納するキャッシュメモリと、を備え、
前記管理データは、前記第２プロセッサに障害が発生したか否かを示すデータ、前記キャッシュメモリの使用率を示すデータ、前記第３インターフェイスにおけるデータ入出力回数を示すデータ、前記記憶装置に対するデータ入出力回数を示すデータ、のうち少なくとも一つを含むことを特徴とする請求項１０に記載の管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書で開示される技術は、ストレージシステムの保守・管理装置の冗長化方法に関する。
【背景技術】
【０００２】
複数の計算機と複数のストレージシステムとの間を通信線（ストレージエリアネットワーク（ＳＡＮ））で接続し、高信頼、高機能のストレージシステムを複数の計算機で共有する計算機システムが普及している。計算機システムの大規模化、複雑化に伴って、保守・管理作業の重要性が増している。ＳＡＮにおいて、ストレージシステムは、複数の計算機によって共有されている。このため、ストレージシステムの保守及び管理は、計算機システムの保守及び管理作業において、最も重要であるもののひとつである。
【０００３】
ストレージシステムの保守及び管理の信頼性を向上させる技術は、例えば特許文献１に開示されている。特許文献１によれば、保守・管理対象の装置に備えられる保守管理処理部が多重化される。保守管理処理部の一つに障害が発生した場合、他の保守管理処理部を使用することができるため、保守及び管理の信頼性が向上する（特許文献１の図１参照）。
【特許文献１】特許第３７７１１６２号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００４】
計算機システムの大規模化及びデータ量の増大によって、ストレージシステムの数が増大している。これに伴い、保守・管理装置の二重化によってストレージシステムの保守・管理の信頼性を向上させた場合、多数の保守・管理装置が計算機システムに存在することになる。
【０００５】
保守・管理装置を二重化すると、正の保守・管理装置に障害が発生した場合、副の保守・管理装置がフェイルオーバーすることによって、保守・管理機能を継続して使用できる。しかしながら、副の保守・管理装置によるフェイルオーバー後、副の保守・管理装置が計算機システムに存在しているにもかかわらず、フェイルオーバーした保守・管理装置は冗長化されていない。すなわち、フェイルオーバーした副の保守・管理装置がＳＰＯＦ（Ｓｉｇｌｅ  Ｐｏｉｎｔ  Ｏｆ  Ｆａｉｌｕｒｅ、単一障害点）となるため、保守・管理機能の信頼性が低下する。
【課題を解決するための手段】
【０００６】
本願で開示する代表的な発明は、複数のストレージシステムと、前記複数のストレージシステムを管理する複数の管理装置と、を備える計算機システムを制御する方法であって、前記各ストレージシステムは、データを格納する記憶装置と、前記記憶装置へのデータの格納を制御する制御装置と、を備え、前記各管理装置は、前記ストレージシステムから取得されたデータを受信する第１インターフェイスと、前記第１インターフェイスに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、前記第１インターフェイスは、前記複数の管理装置を通信可能に接続する第１ネットワークに接続され、前記複数の管理装置は、第１管理装置、第２管理装置及び第３管理装置を含み、前記ストレージシステムは、第１ストレージシステムを含み、前記第１管理装置及び前記第２管理装置は、前記第１ストレージシステムの識別子及び前記第１ストレージシステムから取得した管理データを保持し、前記方法は、前記第１管理装置に障害が発生した場合、前記複数の管理装置から前記第３管理装置を選択する手順と、前記第２管理装置に保持されている前記第１ストレージシステムの識別子を、前記第２管理装置から、前記選択された第３管理装置に送信する手順と、前記第２管理装置から送信された前記第１ストレージシステムの識別子を前記選択された第３管理装置が保持する手順と、を含むことを特徴とする。
【発明の効果】
【０００７】
本発明の一実施形態によれば、正の保守・管理装置に障害が発生し、副の保守・管理装置がフェイルオーバーした後、冗長構成を再構成することによって、保守・管理装置がＳＰＯＦ（Ｓｉｇｌｅ  Ｐｏｉｎｔ  Ｏｆ  Ｆａｉｌｕｒｅ）となることを回避する結果、保守・管理機能の信頼性を向上させることができる。
【０００８】
また、副の保守・管理装置に障害が発生した場合も、冗長構成を再構成することによって、正の保守・管理装置がＳＰＯＦ（Ｓｉｇｌｅ  Ｐｏｉｎｔ  Ｏｆ  Ｆａｉｌｕｒｅ）となることを避けることができる。
【発明を実施するための最良の形態】
【０００９】
本発明の実施の形態を、図面を参照しながら説明する。
【００１０】
＜全体図＞
図１は、本発明の実施の形態の計算機システム１の構成を示すブロック図である。
【００１１】
計算機システム１は、複数の計算機２００、管理計算機６００、ファイバーチャネルスイッチ１００、複数のストレージシステム４００、及び複数のＳＶＰ（Ｓｅｒｖｉｃｅ  Ｐｒｏｃｅｓｓｏｒ）５００を備える。
【００１２】
計算機２００とストレージシステム４００は、ファイバーチャネルスイッチ１００を介して接続されている。
【００１３】
ストレージシステム４００とＳＶＰ５００は、ネットワーク２０によって互いに接続されている。
【００１４】
また、計算機２００、管理計算機６００、ファイバーチャネルスイッチ１００及びＳＶＰ５００は、ネットワーク１０によって互いに接続されている。
【００１５】
＜ファイバーチャネルスイッチ１００＞
ファイバーチャネルスイッチ１００は、複数のインターフェイス１０２及び一つ以上のインターフェイス１０４を備える。各インターフェイス１０２は、計算機２００又はストレージシステム４００に接続される。インターフェイス１０４は、ネットワーク１０に接続される。
【００１６】
＜計算機２００＞
計算機２００は、制御部２０６、メモリ２１０、記憶装置２１２、表示部２０８、インターフェイス２０２及びインターフェイス２０４を備える。インターフェイス２０２は、ファイバーチャネルスイッチ１００と接続される。インターフェイス２０４は、ネットワーク１０と接続される。
【００１７】
例えば、記憶装置２１２にはアプリケーションプログラム（図示省略）が格納されてもよい。アプリケーションプログラムは、必要に応じてメモリ２１０に読み込まれ、制御部２０６によって実行される。アプリケーションプログラムを実行する制御部２０６は、必要に応じて、ストレージシステム４００に対するデータ書き込み（ライト）及び読み出し（リード）を実行することができる。データのライト及びリード要求は、インターフェイス２０２から、ファイバーチャネルスイッチ１００を経由してストレージシステム４００に送信される。
【００１８】
＜管理計算機６００＞
管理計算機６００は、制御部６０６、メモリ６１０、記憶装置６１２、表示部６０８及びインターフェイス６０４を備える。インターフェイス６０４は、ネットワーク１０と接続される。
【００１９】
図１には一つの管理計算機６００のみを示すが、計算機システム１は、ネットワーク１０に接続された複数の管理計算機６００を備えてもよい。
【００２０】
管理計算機６００は、ネットワーク１０を介してＳＶＰ５００と通信することができる。後述するように、ＳＶＰ５００は、ストレージシステム４００から、ストレージシステム４００を管理するための情報（例えば、ストレージシステム４００の性能情報等）を取得する。管理計算機６００は、それらの情報を、ネットワーク１０を介して一つ又は複数のＳＶＰ５００から取得することができる。このため、管理計算機は、複数のストレージシステム４００から取得された情報を一元的に管理することができる。
【００２１】
あるいは、管理計算機６００は、ＳＶＰ５００から種々の通知を受信することができる。その場合、管理計算機６００は、通知を受信したことを、表示部６０８に表示することによって、計算機システム１の管理者又はユーザに通知することができる。
【００２２】
さらに、管理計算機６００は、ＳＶＰ５００に種々の指示及び情報を送信することができる。計算機システム１の管理者又はユーザは、管理計算機６００を操作することによって、ＳＶＰ５００を制御することができる。
【００２３】
＜ストレージシステム４００＞
ストレージシステム４００は、記憶制御装置４２０及び記憶装置４１０を備える。
【００２４】
記憶制御装置４２０は、プロセッサ４３０、制御メモリ４４０、不揮発メモリ４５０、キャッシュメモリ４６０、ファイバーチャネルインターフェイス４７０、ファイバーチャネルインターフェイス４８０及びネットワークインターフェイス４９０を備え、これらは互いに接続されている。
【００２５】
記憶装置４１０は、記録媒体を含み、記憶制御装置４２０からの要求に従って、記録媒体に対してデータのリード及びライトを行う。
【００２６】
ファイバーチャネルインターフェイス４８０は、記憶装置４１０に接続される。
【００２７】
記憶制御装置４２０は、ファイバーチャネルインターフェイス４８０を介して、記憶装置４１０に対してデータを入出力する。
【００２８】
なお、ファイバーチャネルインターフェイス４８０は、ＡＴＡ、シリアルＡＴＡ、パラレルＳＣＳＩ、シリアルＳＣＳＩ等のインターフェイスによって置き換えられてもよい。
【００２９】
記憶制御装置４２０は、記憶装置４１０を冗長性のあるＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）として制御することで、ストレージシステム４００の信頼性及び性能を向上させることができる。
【００３０】
なお、ストレージシステム４００は、一つ又は複数の記憶装置４１０を備えることができる。記憶装置４１０は、例えばハードディスクドライブ（ＨＤＤ）のような磁気記憶装置であってもよいし、その他の種類の記憶装置（例えば、光学記憶装置又は半導体記憶装置）であってもよい。
【００３１】
記憶装置４１０には、物理的又は論理的な記憶領域（例えば、物理ボリューム又は論理ボリューム等のボリューム。以後、この記憶領域をボリュームと称する）が設定される。各ボリュームは、記憶領域識別子によってストレージシステム４００内にて一意に識別される。
【００３２】
ファイバーチャネルインターフェイス４７０は、ファイバーチャネルスイッチ１００に接続される。記憶制御装置４２０は、ファイバーチャネルインターフェイス４７０を介して、ファイバーチャネルスイッチ１００に接続されるホスト計算機２００からのデータ入出力要求を受け付ける。このデータ入出力要求は、前記記憶領域に対して行われる。
【００３３】
ネットワークインターフェイス４９０は、ネットワーク２０に接続される。
【００３４】
記憶装置４１０と記憶制御装置４２０間のデータ転送は、記憶制御装置４２０内のデータ転送に比べて遅い。このため、記憶制御装置４２０は、頻繁にアクセスされるデータをキャッシュメモリ４６０上に格納することによって、データ転送性能を向上させることができる。キャッシュメモリ４６０は、例えばＤＲＡＭのような半導体メモリであってもよい。
【００３５】
上記動作は、不揮発メモリ４５０に格納されるプログラムを制御メモリ４４０に読み込み、プロセッサ４３０がこれを実行することによって実現される。不揮発メモリ４５０は、例えばＨＤＤであってもよいし、フラッシュメモリのような不揮発性の半導体メモリであってもよい。制御メモリ４４０は、例えばＤＲＡＭのような半導体メモリであってもよい。
【００３６】
なお、記憶制御装置４２０は、シングルプロセッサであるが、マルチプロセッサ構成であってもよい。すなわち、記憶制御装置４２０は、一つ又は複数のプロセッサ４３０を備えてもよい。
【００３７】
＜ＳＶＰ５００＞
ＳＶＰ５００は、ストレージシステム４００を保守及び管理するためにネットワーク２０を介してストレージシステム４００と接続される装置である。ＳＶＰ５００は、制御部５０６、表示部５０８、メモリ５１０、記憶装置５１２、第１のインターフェイス５０２及び第２のインターフェイス５０４を備える。
【００３８】
第１のインターフェイス５０２は、ネットワーク１０に接続される。管理計算機６００とＳＶＰ５００は、第１のインターフェイス５０２及びネットワーク１０を介して通信する。
【００３９】
第２のインターフェイス５０４は、ネットワーク２０に接続される。ストレージシステム４００とＳＶＰ５００は、第２のインターフェイス５０４及びネットワーク２０を介して通信する。また、ＳＶＰ５００同士は、第２のインターフェイス及びネットワーク２０を介して、互いに通信する。
【００４０】
次に、図２を使用して、ＳＶＰ５００を詳しく説明する。
【００４１】
図２は、本発明の実施の形態のＳＶＰ５００の構成を示すブロック図である。
【００４２】
メモリ５１０には、管理ＤＫＣテーブル２１００、待機ＳＶＰテーブル２２００、冗長構成稼動ＳＶＰテーブル２３００、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００、ＳＶＰ状態テーブル２５００及び冗長再構成計算テーブル２６００が格納される。
【００４３】
記憶装置５１２には、監視プログラム３０００、稼動ＳＶＰ監視プログラム４０００、待機ＳＶＰ監視プログラム６０００、冗長再構成可否応答プログラム８０００、ＳＶＰフェイルバックプログラム１００００及びＤＫＣデータ取得プログラム３００００が格納される。これらのプログラムは、制御部５０６によって、記憶装置５１２からメモリ５１０に読み出され、実行される。
【００４４】
＜ＤＫＣデータリポジトリ５００００＞
さらに、記憶装置５１２には、ＤＫＣデータリポジトリ５００００が格納される。ＤＫＣデータリポジトリ５００００には、ストレージシステム４００に関するデータが格納される。具体的には、ＳＶＰ５００は、ストレージシステム４００からストレージシステム４００を管理するために使用されるデータ（例えば、構成データ及び性能データ等）を取得する。
【００４５】
ＳＶＰ５００は、これらのデータを定期的にストレージシステム４００から取得し、ＤＫＣデータリポジトリ５００００に格納する。ＤＫＣデータリポジトリ５００００は、一定の期間の過去に取得されたデータを保持している。ある一定の期間以上のデータが蓄積されると、最も古いデータがＤＫＣデータリポジトリ５００００から削除され、ストレージシステム４００から取得した最新のデータが、ＤＫＣデータリポジトリ５００００に格納される。
【００４６】
ＤＫＣデータリポジトリ５００００に格納されるデータは、例えば、プロセッサ４３０に障害が発生したか否かを示すデータ、キャッシュメモリ４６０の使用率を示すデータ、インターフェイス４７０におけるデータ入出力回数を示すデータ、記憶装置４１０に対するデータ入出力回数を示すデータ、のうち少なくとも一つを含んでもよい。
【００４７】
ＳＶＰ５００は、ストレージシステム４００からのデータ取得だけではなく、ストレージシステム４００に対する設定（例えば、ストレージシステム４００の起動、停止及び構成変更等）も行う。
【００４８】
ＳＶＰ５００と、そのＳＶＰ５００がデータを取得するストレージシステム４００との組み合わせは、管理ＤＫＣテーブル２１００によって管理される。管理ＤＫＣテーブル２１００については、後で説明する（図４等参照）。ストレージシステム４００からデータを定期的に取得しているＳＶＰ５００を、稼動ＳＶＰと呼ぶ。
【００４９】
本実施の形態の計算機システム１は、ストレージシステム４００の数より多い数のＳＶＰ５００を備える。このため、ストレージシステム４００からデータを取得しないＳＶＰ５００も存在する。このようなＳＶＰ５００は、稼動ＳＶＰに障害が発生したときに、稼動ＳＶＰの動作を引継ぐために待機（すなわち冗長化）しているものである。このようなＳＶＰ５００を、待機ＳＶＰと呼ぶ。
【００５０】
ＳＶＰ５００が、稼動ＳＶＰとして動作するか、待機ＳＶＰとして動作するかは、ＳＶＰ状態テーブル２５００によって管理される。ＳＶＰ５００は、稼動ＳＶＰとしても、待機ＳＶＰとしても動作することができる。ＳＶＰ状態テーブル２５００については、後で説明する（図４等参照）。
【００５１】
＜論理図１＞
図３は、本発明の実施の形態のストレージシステム４００とＳＶＰ５００との関係を論理的に示す説明図である。
【００５２】
図３（ａ）は、障害が発生する前の状態を示し、図３（ｂ）は、ＳＶＰ１に障害が発生し、ＳＶＰＡがフェイルオーバー（引継ぎ）し、ＳＶＰＢを待機ＳＶＰとする冗長構成７００が再構成された後の状態を示す。
【００５３】
図３において、ストレージシステム４００と、そのストレージシステム４００を管理するＳＶＰ５００（すなわち稼動ＳＶＰ）とは、線によって結合されている。
【００５４】
例えば、ＳＶＰ５００ａ（ＳＶＰ１）は、稼動ＳＶＰとして動作しており、ストレージシステム４００ａ（ＤＫＣ１）を管理している。なお、以下の説明において、「管理」は、「保守」の概念をも含む用語として記載される。
【００５５】
ここで、図３に表示されるＳＶＰ１〜ＳＶＰ５及びＳＶＰＡ〜ＳＶＰＤは、それぞれ、ＳＶＰ５００の識別子である。ＳＶＰ５００ａ〜ＳＶＰ５００ｋは、それぞれ、図１に示す複数のＳＶＰ５００のうちいずれかに相当する。同様に、ＤＫＣ１〜ＤＫＣ６は、それぞれ、ストレージシステム４００の識別子である。ストレージシステム４００ａ〜ストレージシステム４００ｆは、それぞれ、図１に示す複数のストレージシステム４００のうちいずれかに相当する。
【００５６】
図３に示す角丸四角形は、冗長構成７００を表す。冗長構成７００とは、一つ以上の稼動ＳＶＰと、それらの稼動ＳＶＰを冗長化する一つ以上の待機ＳＶＰとを含むＳＶＰ５００の集合である。各冗長構成７００を区別して記載する場合、「ａ」又は「ｂ」のような添字を使用する。例えば、ＳＶＰ５００ａ（ＳＶＰ１）とＳＶＰ５００ｂ（ＳＶＰＡ）が冗長構成７００ａを構成している。ＳＶＰ５００ｂ（ＳＶＰＡ）は、ＳＶＰ５００ａ（ＳＶＰ１）の待機ＳＶＰとして動作している。すなわち、後述するように、ＳＶＰ５００ａ（ＳＶＰ１）に障害が発生すると、ＳＶＰ５００ｂ（ＳＶＰＡ）はＳＶＰ５００ａ（ＳＶＰ１）をフェイルオーバーして、その後、ストレージシステム４００ａ（ＤＫＣ１）を管理する。
【００５７】
また、ＳＶＰ５００ｅ（ＳＶＰ３）は、ストレージシステム４００ｃ（ＤＫＣ３）を管理する稼動ＳＶＰであり、ＳＶＰ５００ｇ（ＳＶＰ４）は、ストレージシステム４００ｄ（ＤＫＣ４）を管理する稼動ＳＶＰである。ＳＶＰ５００ｆ（ＳＶＰＣ）は、ＳＶＰ５００ｅ（ＳＶＰ３）及びＳＶＰ５００ｇ（ＳＶＰ４）と冗長構成７００ｃを構成する待機ＳＶＰである。すなわち、ＳＶＰ５００ｅ（ＳＶＰ３）又はＳＶＰ５００ｇ（ＳＶＰ４）の一方に障害が発生すると、ＳＶＰ５００ｆ（ＳＶＰＣ）はその障害が発生したＳＶＰ５００をフェイルオーバーして、その後、ストレージシステム４００ｃ（ＤＫＣ３）又はストレージシステム４００ｄ（ＤＫＣ４）を管理する。
【００５８】
＜ＳＶＰが保持するテーブルの例＞
ここで、ＳＶＰ５００のメモリ５１０に格納される管理ＤＫＣテーブル２１００、待機ＳＶＰテーブル２２００、冗長構成稼動ＳＶＰテーブル２３００、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００及びＳＶＰ状態テーブル２５００について説明する。
【００５９】
図３（ａ）の稼動ＳＶＰであるＳＶＰ５００ａ（ＳＶＰ１）及び待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）を例にして、図４、図５を使って説明する。
【００６０】
図４は、本発明の実施の形態の稼動ＳＶＰであるＳＶＰ５００ａ（ＳＶＰ１）が保持するテーブルの説明図である。
【００６１】
図５は、本発明の実施の形態の待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）が保持するテーブルの説明図である。
【００６２】
待機ＳＶＰが保持するテーブルは、それぞれ、稼動ＳＶＰが保持するテーブルと同様の項目を有する。
【００６３】
＜管理ＤＫＣテーブル２１００＞
管理ＤＫＣテーブル２１００は、ＳＶＰ５００が、ストレージシステム４００を管理するために使用する。ＳＶＰ５００は、管理ＤＫＣテーブル２１００に設定されたストレージシステム４００から、データを取得する。
【００６４】
ＳＶＰ５００が稼動ＳＶＰとして動作しているときには、管理ＤＫＣテーブル２１００にエントリがあるが、待機ＳＶＰとして動作しているときには、管理ＤＫＣテーブル２１００にエントリはない。ＳＶＰ５００が稼動ＳＶＰとして動作しているとき、管理ＤＫＣテーブル２１００は、一つ又は複数のエントリを含んでもよい。なお、各テーブルのエントリは、図４等に示す各テーブルの行に対応する。管理ＤＫＣテーブル２１００が複数のエントリを含む場合、ＳＶＰ５００は、複数のストレージシステム４００を管理する。
【００６５】
管理ＤＫＣテーブル２１００は、ＤＫＣ＿ＩＤ２１０１及びＤＫＣ＿Ａｄｄｒ２１０２を管理する。ＤＫＣ＿ＩＤ２１０１は、ＳＶＰ５００が管理し、データを取得するストレージシステム４００を、少なくとも計算機システム１で一意に識別する識別子である。ＤＫＣ＿Ａｄｄｒ２１０２は、ＤＫＣ＿ＩＤ２１０１で識別されるストレージシステム４００のインターフェイス４９０のアドレスである。ＳＶＰ５００は、このアドレスを使用して、ストレージシステム４００と通信し、データを取得する。
【００６６】
なお、図４等には、例えばＤＫＣ＿ＩＤ２１０１ａのように、各項目を識別する番号にアルファベットの添字（例えば、「ａ」又は「ｂ」等）が付与されている。この添字は、各項目が、どのＳＶＰ５００が保持するテーブルに属するかを示すものである。例えば、ＤＫＣ＿ＩＤ２１０１ａは、ＳＶＰ５００ａ（ＳＶＰ１）が保持する管理ＤＫＣテーブル２１００のＤＫＣ＿ＩＤ２１０１を示す。他の項目についても同様である。
【００６７】
図４に示す管理ＤＫＣテーブル２１００ａは、稼動ＳＶＰであるＳＶＰ５００ａ（ＳＶＰ１）が保持する管理ＤＫＣテーブル２１００である。管理ＤＫＣテーブル２１００ａのＤＫＣ＿ＩＤ２１０１ａ及びＤＫＣ＿Ａｄｄｒ２１０２ａには、それぞれ、ＳＶＰ５００ａ（ＳＶＰ１）が管理するストレージシステム４００ａの識別子である「ＤＫＣ１」、及び、ストレージシステム４００ａのインターフェイス４９０のアドレス「ＡｄｄｒＤ１」が設定されている。
【００６８】
図５に示す管理ＤＫＣテーブル２１００ｂは、待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）が保持する管理ＤＫＣテーブル２１００である。ＳＶＰ５００ｂ（ＳＶＰＡ）は、ストレージシステム４００を管理していないため、管理ＤＫＣテーブル２１００ｂにエントリはない。
【００６９】
＜待機ＳＶＰテーブル２２００＞
待機ＳＶＰテーブル２２００は、稼動ＳＶＰが、自身に障害が発生したときに動作を引継ぐ待機ＳＶＰを管理するために使用する。
【００７０】
稼動ＳＶＰの待機ＳＶＰテーブル２２００には、通常、エントリがある。一方、待機ＳＶＰの待機ＳＶＰテーブル２２００には、エントリがない。
【００７１】
稼動ＳＶＰの待機ＳＶＰテーブル２２００にエントリがない場合、その稼動ＳＶＰ障害が発生したときに動作を引継ぐ待機ＳＶＰがない状態である。すなわち、その稼動ＳＶＰがＳＰＯＦ（Ｓｉｇｌｅ  Ｐｏｉｎｔ  Ｏｆ  Ｆａｉｌｕｒｅ、単一障害点）となっている。
【００７２】
待機ＳＶＰテーブル２２００は、待機ＳＶＰ＿ＩＤ２２０１、ＳＶＰ＿Ａｄｄｒ２＿２２０２及び監視２２０３を管理する。
【００７３】
待機ＳＶＰ＿ＩＤ２２０１は、待機ＳＶＰとして動作しているＳＶＰ５００を、少なくとも計算機システム１で一意に識別する識別子である。ＳＶＰ＿Ａｄｄｒ２＿２２０２は、待機ＳＶＰ＿ＩＤ２２０１によって識別されるＳＶＰ５００の第２のインターフェイス５０４のアドレスである。監視２２０３には、稼動ＳＶＰが、待機ＳＶＰが正常に動作していることを監視するか否かを示す値が設定される。監視２２０３が「Ｙ」に設定されているとき、稼動ＳＶＰは、対応する待機ＳＶＰを監視する。一方、監視２２０３が「Ｎ」に設定されているとき、稼動ＳＶＰは、待機ＳＶＰを監視しない。稼動ＳＶＰは、は、例えば、ネットワーク２０を経由するハートビートによって待機ＳＶＰを監視してもよい。
【００７４】
待機ＳＶＰテーブル２２００ａは、稼動ＳＶＰであるＳＶＰ５００ａ（ＳＶＰ１）が保持する待機ＳＶＰテーブル２２００である（図４）。待機ＳＶＰテーブル２２００ａの待機ＳＶＰ＿ＩＤ２２０１ａ及びＳＶＰ＿Ａｄｄｒ２＿２２０２ａには、それぞれ、ＳＶＰ５００ｂ（ＳＶＰＡ）の識別子である「ＳＶＰＡ」、及び、ＳＶＰ５００ｂ（ＳＶＰＡ）の第２のインターフェイス５０４のアドレス「ＡｄｄｒＳＡ２」が設定されている。これは、ＳＶＰ５００ａ（ＳＶＰ１）が、ＳＶＰ５００ｂ（ＳＶＰＡ）によって冗長化されていることを示す。言い換えると、ＳＶＰ５００ａ（ＳＶＰ１）とＳＶＰ５００ｂ（ＳＶＰＡ）が冗長構成７００ａを構成する。ＳＶＰ５００ｂ（ＳＶＰＡ）は、ＳＶＰ５００ａ（ＳＶＰ１）を冗長化するための待機ＳＶＰである。
【００７５】
待機ＳＶＰテーブル２２００ａの監視２２０３ａには、「Ｙ」が設定されている。これは、ＳＶＰ５００ａ（ＳＶＰ１）が、待機ＳＶＰテーブル２２００ａを使用して、ＳＶＰ５００ｂ（ＳＶＰＡ）の障害を監視することを示す。
【００７６】
待機ＳＶＰテーブル２２００ｂは、待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）が保持する待機ＳＶＰテーブル２２００であるため、エントリを含まない（図５）。
【００７７】
＜冗長構成稼動ＳＶＰテーブル２３００＞
冗長構成稼動ＳＶＰテーブル２３００は、待機ＳＶＰが、その待機ＳＶＰによって動作を引継がれる稼動ＳＶＰを管理するために使用する。
【００７８】
待機ＳＶＰの冗長構成稼動ＳＶＰテーブル２３００には、通常、エントリがある。一方、稼動ＳＶＰの冗長構成稼動ＳＶＰテーブル２３００には、エントリがない。
【００７９】
待機ＳＶＰは、冗長構成稼動ＳＶＰテーブル２３００に設定された稼動ＳＶＰを監視する。そして、稼動ＳＶＰに障害が発生した場合、待機ＳＶＰがその稼動ＳＶＰの動作を引継ぐ（以降、これをフェイルオーバーとよぶ）。
【００８０】
稼動ＳＶＰの数に対して、待機ＳＶＰの数が多い場合、エントリのない冗長構成稼動ＳＶＰテーブル２３００を保持する待機ＳＶＰが存在する場合がある。エントリがない冗長構成稼動ＳＶＰテーブル２３００を保持する待機ＳＶＰは、待機ＳＶＰのスペアである。
【００８１】
冗長構成稼動ＳＶＰテーブル２３００は、稼動ＳＶＰ＿ＩＤ２３０１、ＳＶＰ＿Ａｄｄｒ１＿２３０２、ＳＶＰ＿Ａｄｄｒ２＿２３０３、監視２３０４及びＤＫＣ数２３０５を管理する。
【００８２】
稼動ＳＶＰ＿ＩＤ２３０１は、稼動ＳＶＰとして動作しているＳＶＰ５００を、少なくとも計算機システム１で一意に識別する識別子である。
【００８３】
ＳＶＰ＿Ａｄｄｒ１＿２３０２及びＳＶＰ＿Ａｄｄｒ２＿２３０３は、それぞれ、稼動ＳＶＰ＿ＩＤによって識別されるＳＶＰ５００の第１のインターフェイス５０２のアドレス、及び、第２のインターフェイス５０４のアドレスである。
【００８４】
監視２３０４には、稼動ＳＶＰ＿ＩＤ２３０１によって識別される稼動ＳＶＰが正常に動作していることを、待機ＳＶＰが監視するか否かを示す値が設定される。監視２３０４に「Ｙ」が設定されているとき、待機ＳＶＰは、対応する稼動ＳＶＰを監視する。一方、監視２３０４に「Ｎ」が設定されているとき、待機ＳＶＰは、稼動ＳＶＰを監視しない。待機ＳＶＰは、例えば、ネットワーク２０を経由するハートビートによって稼動ＳＶＰを監視する。
【００８５】
ＤＫＣ数２３０５には、稼動ＳＶＰ＿ＩＤ２３０１によって識別される稼動ＳＶＰが管理するＤＫＣ台数が設定される。
【００８６】
冗長構成稼動ＳＶＰテーブル２３００ａは、稼動ＳＶＰであるＳＶＰ５００ａ（ＳＶＰ１）が保持する冗長構成稼動ＳＶＰテーブル２３００であるため、エントリを含まない（図４）。
【００８７】
冗長構成稼動ＳＶＰテーブル２３００ｂは、待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）が保持する冗長構成稼動ＳＶＰテーブル２３００である（図５）。稼動ＳＶＰ＿ＩＤ２３０１ｂ、ＳＶＰ＿Ａｄｄｒ１＿２３０２ｂ及びＳＶＰ＿Ａｄｄｒ２＿２３０３ｂには、それぞれ、ＳＶＰ５００ａ（ＳＶＰ１）の識別子である「ＳＶＰ１」、ＳＶＰ５００ａ（ＳＶＰ１）の第１のインターフェイス５０２のアドレス「ＡｄｄｒＳ１１」、及び、ＳＶＰ５００ａ（ＳＶＰ１）の第２のインターフェイス５０４のアドレス「ＡｄｄｒＳ１２」が設定される。
【００８８】
監視２３０４ｂには、「Ｙ」が設定される。ＤＫＣ数２３０５ｂには、ＳＶＰ５００ａ（ＳＶＰ１）が管理するストレージシステム４００の台数である「１」が設定される。これは、ＳＶＰ５００ｂ（ＳＶＰＡ）が、ＳＶＰ５００ａ（ＳＶＰ１）を監視し、ＳＶＰ５００ａ（ＳＶＰ１）が１台のストレージシステム４００を管理していることを示す。
【００８９】
＜稼動ＳＶＰ−ＤＫＣ管理テーブル２４００＞
稼動ＳＶＰ−ＤＫＣ管理テーブル２４００は、待機ＳＶＰが、その待機ＳＶＰとともに冗長構成７００を構成している稼動ＳＶＰと、その稼動ＳＶＰが管理するストレージシステム４００と、を管理するために使用する。
【００９０】
稼動ＳＶＰが保持する稼動ＳＶＰ−ＤＫＣ管理テーブル２４００には、エントリがない。一方、待機ＳＶＰが保持する稼動ＳＶＰ−ＤＫＣ管理テーブル２４００には、通常、エントリがある。しかし、スペアとなっている待機ＳＶＰが保持する稼動ＳＶＰ−ＤＫＣ管理テーブル２４００には、エントリがない。スペアとなっている待機ＳＶＰが保持する管理ＤＫＣテーブル２１００、待機ＳＶＰテーブル２２００、冗長構成稼動ＳＶＰテーブル２３００及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００にはエントリがない。
【００９１】
稼動ＳＶＰ−ＤＫＣ管理テーブル２４００は、待機ＳＶＰが、フェイルオーバー後、冗長構成７００を再構成するときに使用される。このとき、待機ＳＶＰは、他の待機ＳＶＰが自身の待機ＳＶＰとなるように、冗長構成７００を再構成する。冗長構成７００の再構成については、監視プログラム３０００の処理フローの説明の中で明らかにする（図６〜図９参照）。
【００９２】
稼動ＳＶＰ−ＤＫＣ管理テーブル２４００は、稼動ＳＶＰ＿ＩＤ２４０１、ＤＫＣ＿ＩＤ２４０２及びＤＫＣ＿Ａｄｄｒ２４０３を管理する。稼動ＳＶＰ＿ＩＤ２４０１は、稼動ＳＶＰとして動作しているＳＶＰ５００を少なくとも計算機システム１で一意に識別することができる識別子である。ＤＫＣ＿ＩＤ２４０２は、稼動ＳＶＰが管理し、データを取得するストレージシステム４００を、少なくとも計算機システム１で一意に識別する識別子である。ＤＫＣ＿Ａｄｄｒ２４０３は、ＤＫＣ＿ＩＤで識別されるストレージシステム４００のインターフェイス４９０のアドレスである。
【００９３】
稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ａは、稼動ＳＶＰであるＳＶＰ５００ａ（ＳＶＰ１）が保持する稼動ＳＶＰ−ＤＫＣ管理テーブル２４００であるため、エントリを含まない（図４）。
【００９４】
稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｂは、待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）が保持する稼動ＳＶＰ−ＤＫＣ管理テーブル２４００である（図５）。
【００９５】
稼動ＳＶＰ＿ＩＤ２４０１ａには、ＳＶＰ５００ａ（ＳＶＰ１）の識別子である「ＳＶＰ１」が設定される。この設定は、ＳＶＰ５００ｂ（ＳＶＰＡ）がＳＶＰ５００ａ（ＳＶＰ１）を監視することを示す。
【００９６】
ＤＫＣ＿ＩＤ２４０２ａ及びＤＫＣ＿Ａｄｄｒ２４０３ａには、それぞれ、ＳＶＰ５００ａ（ＳＶＰ１）が管理するストレージシステム４００ａ（ＤＫＣ１）の識別子である「ＤＫＣ１」、及び、ストレージシステム４００ａ（ＤＫＣ１）のインターフェイス４９０のアドレス「ＡｄｄｒＤ１」が設定されている。これらの設定は、ＳＶＰ５００ａ（ＳＶＰ１）がストレージシステム４００ａ（ＤＫＣ１）を管理すること、及び、ストレージシステム４００ａ（ＤＫＣ１）のインターフェイス４９０のアドレスが「ＡｄｄｒＤ１」であることを示す。
【００９７】
＜ＳＶＰ状態テーブル２５００＞
ＳＶＰ状態テーブル２５００は、ＳＶＰ５００が、自身の状態を管理するテーブルである。稼動ＳＶＰ、待機ＳＶＰ、及びスペアとなっている待機ＳＶＰのいずれのＳＶＰ５００も、自身の状態を管理するために、ＳＶＰ状態テーブル２５００を使用する。
【００９８】
ＳＶＰ状態テーブル２５００は、ＳＶＰ＿ＩＤ２５０１、ＳＶＰ＿Ａｄｄｒ１＿２５０２、ＳＶＰ＿Ａｄｄｒ２＿２５０３、状態２５０４、再構成可否２５０５及び設置階数２５０６を管理する。
【００９９】
ＳＶＰ＿ＩＤ２５０１は、自ＳＶＰ５００（すなわちそのＳＶＰ状態テーブル２５００を保持しているＳＶＰ５００）を少なくとも計算機システム１で一意に識別することができる識別子である。
【０１００】
ＳＶＰ＿Ａｄｄｒ１＿２５０２及びＳＶＰ＿Ａｄｄｒ２＿２５０３は、それぞれ、ＳＶＰ５００の第１のインターフェイス５０２のアドレス、及び、第２のインターフェイス５０４のアドレスである。
【０１０１】
状態２５０４には、自ＳＶＰ５００が稼動ＳＶＰであるか、稼動ＳＶＰであるかを示す値が設定される。ＳＶＰ５００は、状態２５０４に「稼動」が設定されているとき、稼動ＳＶＰとして動作し、「待機」が設定されているとき、待機ＳＶＰとして動作する。
【０１０２】
再構成可否２５０５は、冗長構成７００の再構成要求に対して、応答するか否かを示す値が設定される。ＳＶＰ５００は、再構成可否２５０５に「可」が設定されている場合、再構成要求に対して応答し、「不可」が設定されている場合、再構成要求に対して応答しない。冗長構成７００の再構成をしないＳＶＰ５００については、再構成可否を「不可」に設定することで、冗長構成７００を再構成されることを防ぐことができる。
【０１０３】
設置階数２５０６には、ＳＶＰ５００の設置時に、ＳＶＰが設置される（建物の）階数が、管理者によって設定される。
【０１０４】
ＳＶＰ状態テーブル２５００ａは、稼動ＳＶＰであるＳＶＰ５００ａ（ＳＶＰ１）が保持するＳＶＰ状態テーブル２５００である。ＳＶＰ＿ＩＤ２５０１ａ、ＳＶＰ＿Ａｄｄｒ１＿２５０２ａ及びＳＶＰ＿Ａｄｄｒ２＿２５０３ａには、それぞれ、ＳＶＰ５００ａ（ＳＶＰ１）自身の識別子である「ＳＶＰ１」、ＳＶＰ５００ａ（ＳＶＰ１）自身の第１のインターフェイス５０２のアドレス「ＡｄｄｒＳ１１」、及び第２のインターフェイス５０４のアドレス「ＡｄｄｒＳ１２」が設定される。これらのアドレスを変更すると、第１のインターフェイス５０２及び第２のインターフェイス５０４のアドレスが変更される。状態２５０４ａには、ＳＶＰ５００ａ（ＳＶＰ１）が稼動ＳＶＰとして動作することを示す「稼動」が設定される。再構成可否２５０５ａには、ＳＶＰ５００ａが待機ＳＶＰではないため、再構成要求に対して応答しないことを示す「不可」が設定される。設置階数２５０６ａには、「３」が設定されている。これは、ＳＶＰ５００ａ（ＳＶＰ１）が３階に設置されていることを示す。
【０１０５】
ＳＶＰ状態テーブル２５００ｂは、待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）が保持するＳＶＰ状態テーブル２５００である。ＳＶＰ＿ＩＤ２５０１ｂ、ＳＶＰ＿Ａｄｄｒ１＿２５０２ｂ及びＳＶＰ＿Ａｄｄｒ２＿２５０３ｂには、それぞれ、ＳＶＰ５００ｂ（ＳＶＰＡ）自身の識別子である「ＳＶＰＡ」、ＳＶＰ５００ｂ（ＳＶＰＡ）自身の第１のインターフェイス５０２のアドレス「ＡｄｄｒＳＡ１」、及び第２のインターフェイス５０４のアドレス「ＡｄｄｒＳＡ２」が設定される。これらのアドレスを変更すると、第１のインターフェイス５０２及び第２のインターフェイス５０４のアドレスが変更される。状態２５０４ｂには、ＳＶＰ５００ｂ（ＳＶＰＡ）が待機ＳＶＰとして動作することを示す「待機」が設定される。再構成可否２５０５ｂには、ＳＶＰ５００ｂ（ＳＶＰＡ）が再構成要求に対して応答することを示す「可」が設定される。設置階数２５０６ｂには、「３」が設定されている。これは、ＳＶＰ５００ｂ（ＳＶＰＡ）が３階に設置されていることを示す。
【０１０６】
なお、本実施の形態のＳＶＰ状態テーブル２５００は、ＳＶＰ５００が設置されている位置を示す情報として、設置階数２５０６を管理している。しかし、設置階数２５０６はＳＶＰ５００が設置されている位置を示す情報の一例であり、その他の位置を示す情報が管理されてもよい。例えば、ＳＶＰ状態テーブル２５００は、ＳＶＰ５００が設置されている位置の座標を示す情報を管理してもよい。
【０１０７】
＜監視プログラム３０００＞
監視プログラム３０００は、ＳＶＰ５００が、他のＳＶＰ５００を監視するために実行されるプログラムである。監視プログラム３０００は、ＳＶＰ５００の制御部５０６によって、記憶装置５１２から読み出され、ある一定時間ごとに定期的に実行される。
【０１０８】
ＳＶＰ５００は、そのＳＶＰ５００が稼動ＳＶＰである場合、ストレージシステム４００からデータを取得し、待機ＳＶＰを監視する。一方、ＳＶＰ５００は、そのＳＶＰ５００が待機ＳＶＰである場合、稼動ＳＶＰを監視する。
【０１０９】
図６は、本発明の実施の形態において実行される監視プログラム３０００の処理を示すフローチャートである。
【０１１０】
図６に示す各ステップは、監視プログラム３０００を実行する制御部５０６によって実行される。
【０１１１】
制御部５０６は、ステップ３０１０において、ＳＶＰ状態テーブル２５００を参照する。
【０１１２】
制御部５０６は、ステップ３０２０において、ＳＶＰ状態テーブル２５００の状態２５０４が「稼動」であるか否かを判定する。状態２５０４が「稼動」である場合、自ＳＶＰ５００が稼動ＳＶＰである。この場合、制御部５０６は、待機ＳＶＰ監視プログラム６００００を実行し（ステップ３０３０）、次にＤＫＣデータ取得プログラム３００００を実行し（ステップ３０４０）、処理を終了する。
【０１１３】
一方、ステップ３０２０において、ＳＶＰ状態テーブル２５００の状態２５０４が「稼動」でない場合、自ＳＶＰ５００が待機ＳＶＰである。この場合、制御部５０６は、稼動ＳＶＰ監視プログラム４０００を実行し（ステップ３０５０）、処理を終了する。稼動ＳＶＰ監視プログラム４０００については、後に図８を参照して詳細に説明する。
【０１１４】
例えば、ＳＶＰ５００ａの制御部５０６は、ＳＶＰ状態テーブル２５００ａの状態２５０４ａを参照する。この場合、状態２５０４ａに「稼動」が設定されているため、ＳＶＰ５００ａの制御部５０６は、自身が稼動ＳＶＰであると判定する。
【０１１５】
一方、ＳＶＰ５００ｂの制御部５０６は、ＳＶＰ状態テーブル２５００ｂの状態２５０４ｂを参照する。この場合、状態２５０４ｂに「待機」が設定されているため、ＳＶＰ５００ｂの制御部５０６は、自身が稼動ＳＶＰでない（すなわち、待機ＳＶＰである）と判定する。
【０１１６】
ＤＫＣデータ取得プログラム３００００、待機ＳＶＰ監視プログラム６０００及び稼動ＳＶＰ監視プログラム４０００については、後で説明する（図７から図９及び図１２参照）。
【０１１７】
＜ＤＫＣデータ取得プログラム３００００＞
ＤＫＣデータ取得プログラム３００００は、稼動ＳＶＰがストレージシステム４００のデータを取得し、取得したデータを自身のＤＫＣデータリポジトリ５００００に格納し、さらに、冗長構成７００を構成している待機ＳＶＰのＤＫＣデータリポジトリ５００００に格納するためのプログラムである。ＤＫＣデータ取得プログラム３００００は、ＳＶＰ５００の制御部５０６によって記憶装置５１２から読み出され、実行される。ＤＫＣデータ取得プログラム３００００は、監視プログラム３０００のステップ３０４０において、稼動ＳＶＰの制御部５０６によって実行される。例えば、図３（ａ）のＳＶＰ５００ａ（ＳＶＰ１）の制御部５０６がＤＫＣデータ取得プログラム３００００を実行する。
【０１１８】
図７は、本発明の実施の形態において実行されるＤＫＣデータ取得プログラム３００００の処理を示すフローチャートである。
【０１１９】
図７は、例として、ＳＶＰ５００ａ（ＳＶＰ１）の制御部５０６がＤＫＣデータ取得プログラム３００００を実行する場合について説明する。
【０１２０】
制御部５０６は、管理ＤＫＣテーブル２１００ａを参照し、データを取得するストレージシステム４００ａ（ＤＫＣ１）の識別子（すなわち、「ＤＫＣ１」）を取得する（ステップ３００１０）。
【０１２１】
次に、制御部５０６は、ステップ３００１０において取得した識別子によって識別されるストレージシステム４００ａ（ＤＫＣ１）から、データを取得し、ＤＫＣデータリポジトリ５００００ａに、取得したデータを格納する（ステップ３００２０）。
【０１２２】
次に、制御部５０６は、待機ＳＶＰテーブル２２００ａを参照し、待機ＳＶＰであるＳＶＰＡ（ＳＶＰ５００ｂ）のＤＫＣデータリポジトリ５００００ｂに、ステップ３００１０にて取得した、ストレージシステム４００ａ（ＤＫＣ１）のデータを格納する（ステップ３００３０）。そして、制御部５０６は処理を終了する。
【０１２３】
＜稼動ＳＶＰ監視プログラム４０００＞
稼動ＳＶＰ監視プログラム４０００は、待機ＳＶＰが稼動ＳＶＰの稼動状況を監視するためのプログラムである。稼動ＳＶＰ監視プログラム４０００は、ＳＶＰ５００の制御部５０６によって記憶装置５１２から読み出され、実行される。稼動ＳＶＰ監視プログラム４０００は、監視プログラム３０００のステップ３０５０において、待機ＳＶＰの制御部５０６によって実行される。例えば、ＳＶＰ５００ｂ（ＳＶＰＡ）の制御部５０６が稼動ＳＶＰ監視プログラム４０００を実行する。
【０１２４】
図８は、本発明の実施の形態において実行される稼動ＳＶＰ監視プログラム４０００の処理を示すフローチャートである。
【０１２５】
図８は、例として、図３（ａ）のＳＶＰ５００ｂ（ＳＶＰＡ）の制御部５０６が稼動ＳＶＰ監視プログラム４０００を実行する場合について説明する。後述する図９についても同様である。
【０１２６】
制御部５０６は、ステップ４０１０において、冗長構成稼動ＳＶＰテーブル２３００ｂから、稼動ＳＶＰ＿ＩＤ２３０１ｂに設定された「ＳＶＰ１」及びＳＶＰ＿Ａｄｄｒ２＿２３０３ｂに設定された「ＡｄｄｒＳ１２」を取得する。
【０１２７】
制御部５０６は、ステップ４０２０において、ネットワーク２０を介して、ステップ４０１０において取得した稼動ＳＶＰに対して、稼動状況の応答を要求する。このとき、制御部５０６は、要求の送信先としてＳＶＰ＿Ａｄｄｒ２「ＡｄｄｒＳ１２」を使用する。なお、ステップ４０１０において取得した稼動ＳＶＰとは、識別子ＳＶＰ１で識別されるＳＶＰ５００ａである。以下の説明にでは、簡単のため、識別子ＳＶＰ１で識別されるＳＶＰ５００ａを単にＳＶＰ１と記載する。
【０１２８】
制御部５０６は、ステップ４０２０において送信された要求に対する応答を受信したか否かを判定する（ステップ４０３０）。ステップ４０３０において、応答があると判定された場合、処理はステップ４０４０に進む。一方、応答がないと判定された場合、処理は図９のステップ５０１０に進む（Ａ）。応答がある場合、ＳＶＰ１が正常に動作していることを示す。応答がない場合、ＳＶＰ１に障害が発生していることを示す。ステップ４０２０における稼動状況応答要求とそれに対する応答は、例えば、ネットワーク２０を介したハートビートである。
【０１２９】
ステップ４０３０において応答があると判定された場合、制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｂの全ての稼動ＳＶＰに対して処理を完了したか否かを判定する（ステップ４０４０）。ステップ４０４０において、冗長構成稼動ＳＶＰテーブル２３００ｂの全ての稼動ＳＶＰに対して処理を完了したと判定された場合、制御部５０６は処理を終了する。一方、冗長構成稼動ＳＶＰテーブル２３００ｂに未処理の稼動ＳＶＰがあると判定された場合、制御部５０６は、ステップ４０１０以降の処理を繰り返す。冗長構成稼動ＳＶＰテーブル２３００ｂの例では、一つの稼動ＳＶＰ（すなわちＳＶＰ１）のみが設定されている。このため、この例では、ＳＶＰ１を処理したところで、処理が終了する。
【０１３０】
図９は、本発明の実施の形態において実行される稼動ＳＶＰ監視プログラム４０００の処理のうち、稼動ＳＶＰに障害が発生した場合に実行される処理を示すフローチャートである。
【０１３１】
図８のステップ４０３０において、応答がなかった場合、処理は図９のステップ５０１０に進む（Ａ）。
【０１３２】
ステップ５０１０において、制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｂに設定されている稼動ＳＶＰのうち、ステップ４０３０において応答しなかった稼動ＳＶＰ以外の稼動ＳＶＰが保持する待機ＳＶＰテーブル２２００から、自ＳＶＰ５００（すなわち、稼動ＳＶＰ監視プログラム４０００を実行しているＳＶＰ５００）に関するエントリを削除する（ステップ５０１０）。自ＳＶＰ５００に関するエントリとは、待機ＳＶＰ＿ＩＤ２２０１として自ＳＶＰ５００の識別子が設定されているエントリである。
【０１３３】
ステップ５０１０は、自ＳＶＰ５００が稼動ＳＶＰにエントリを削除する要求を送信することによって実行される。この要求を受信した稼動ＳＶＰは、要求されたエントリの削除を実行する。
【０１３４】
待機ＳＶＰが、ステップ４０３０において応答しなかった稼動ＳＶＰをフェイルオーバーすることによって稼動ＳＶＰとなると、その待機ＳＶＰが冗長化している他の稼動ＳＶＰの待機ＳＶＰではなくなる（すなわち、稼動ＳＶＰは、他のＳＶＰ５００をフェイルオーバーすることができない）。このため、他の稼動ＳＶＰの待機ＳＶＰテーブル２２００から自ＳＶＰ５００のエントリが削除される。冗長構成稼動ＳＶＰテーブル２３００ｂには、稼動ＳＶＰが一つのみ設定されているため、ステップ５０１０は実行されない。
【０１３５】
ステップ５０１０を説明するために、図３（ａ）のＳＶＰ５００ｆ（ＳＶＰＣ）を取り挙げる。ＳＶＰ５００ｆ（ＳＶＰＣ）は、２つの稼動ＳＶＰ、すなわちＳＶＰ５００ｅ（ＳＶＰ３）及びＳＶＰ５００ｇ（ＳＶＰ４）を冗長化している待機ＳＶＰである。言い換えると、ＳＶＰ５００ｅ（ＳＶＰ３）及びＳＶＰ５００ｇ（ＳＶＰ４）のいずれかに障害が発生すると、ＳＶＰ５００ｆ（ＳＶＰＣ）がその障害が発生したＳＶＰ５００をフェイルオーバーする。
【０１３６】
ＳＶＰ５００ｆ（ＳＶＰＣ）にて、稼動ＳＶＰ監視プログラム４０００が実行される。ステップ４０３０において、ＳＶＰ５００ｅ（ＳＶＰ３）からの応答がない場合、ステップ５０１０において、ＳＶＰ５００ｆ（ＳＶＰＣ）は、冗長構成稼動ＳＶＰテーブル２３００ｆを参照する。冗長構成稼動ＳＶＰテーブル２３００ｆは図示されていないが、これがＳＶＰ５００ｆによって保持されるテーブルであることは、添字「ｆ」から理解されるであろう。以下、番号の後の添字（例えば、「ｅ」又は「ｇ」等）は、テーブルを保持しているＳＶＰ５００を示す。
【０１３７】
なお、ステップ５０１０が実行された時点で、冗長構成稼動ＳＶＰテーブル２３００ｆは、二つのエントリを含む。それら二つのエントリの稼動ＳＶＰ＿ＩＤ２３０１には、それぞれ、「ＳＶＰ３」及び「ＳＶＰ４」が設定されている。
【０１３８】
一方、ＳＶＰ５００ｅ（ＳＶＰ３）が保持する待機ＳＶＰテーブル２２００ｅは、一つのエントリのみを含む。そのエントリの待機ＳＶＰ＿ＩＤ２２０１には、「ＳＶＰＣ」が設定されている。同様に、ＳＶＰ５００ｇ（ＳＶＰ４）が保持する待機ＳＶＰテーブル２２００ｇは、一つのエントリのみを含む。そのエントリの待機ＳＶＰ＿ＩＤ２２０１には、「ＳＶＰＣ」が設定されている。
【０１３９】
ＳＶＰ５００ｆ（ＳＶＰＣ）は、応答のなかったＳＶＰ５００ｅ（ＳＶＰ３）以外の稼動ＳＶＰであるＳＶＰ５００ｇ（ＳＶＰ４）の待機ＳＶＰテーブル２２００ｇから、自ＳＶＰ５００の識別子であるＳＶＰＣを含むエントリを削除する。
【０１４０】
ステップ５０１０の結果、自ＳＶＰ５００が属する冗長構成７００に含まれる稼動ＳＶＰのうち、障害が発生したものを除く全ての稼動ＳＶＰの待機ＳＶＰテーブル２２００から、自ＳＶＰ５００の識別子を含むエントリが削除される。
【０１４１】
以下、再びＳＶＰ５００ｂ（ＳＶＰＡ）を例として、ステップ５０２０以降の処理を説明する。
【０１４２】
ＳＶＰ５００ｂ（ＳＶＰＡ）の制御部５０６は、ステップ５０２０において、冗長構成稼動ＳＶＰテーブル２３００ｂを参照し、ステップ４０３０において応答しなかった稼動ＳＶＰ１のアドレスである「ＡｄｄｒＳ１１」を取得する。そして、制御部５０６は、取得したアドレス「ＡｄｄｒＳ１１」をＳＶＰ状態テーブル２５００ｂのＳＶＰ＿Ａｄｄｒ１＿２３０２ｂに設定する。さらに、制御部５０６は、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｂを参照し、ステップ４０３０において応答しなかった稼動ＳＶＰ１が管理していたストレージシステム４００の識別子及びアドレスを管理ＤＫＣテーブル２１００ｂに設定する。具体的には、稼動ＳＶＰ１は、識別子「ＤＫＣ１」で識別されるストレージシステム４００ａを管理していた。このため、制御部５０６は、識別子「ＤＫＣ１」に対応するＤＫＣ＿ＩＤ２４０２ｂ及びＤＫＣ＿Ａｄｄｒ２４０３ｂに設定されている「ＤＫＣ１」及び「ＡｄｄｒＤ１」を、それぞれ、管理ＤＫＣテーブル２１００ｂのＤＫＣ＿ＩＤ２１０１ｂ及びＤＫＣ＿Ａｄｄｒ２１０２ｂに設定する。さらに、制御部５０６は、ＳＶＰ状態テーブル２５００ｂの状態２５０４ｂを、「稼動」に設定し、再構成可否２５０５ｂを「不可」に設定する。これによって、ステップ４０３０において応答しなかった稼動ＳＶＰ１の動作をＳＶＰ５００ｂ（ＳＶＰＡ）が引継ぐ。
【０１４３】
フェイルオーバーが実行される前、管理計算機６００は、アドレス「ＡｄｄｒＳ１１」を使用して、稼動ＳＶＰ１にアクセスしていた。その後、フェイルオーバーが実行されると、ステップ５０２０において、ＳＶＰ５００ｂ（ＳＶＰＡ）は、応答しない稼動ＳＶＰ１のアドレス「ＡｄｄｒＳ１１」を引継ぐ。その結果、管理計算機６００は、フェイルオーバーが実行される前に使用していたものと同じアドレス「ＡｄｄｒＳ１１」を使用して、ＳＶＰ５００ｂ（ＳＶＰＡ）にアクセスすることができる。つまり、透過的にフェイルオーバーが実行される。
【０１４４】
次に、制御部５０６は、冗長再構成可否応答要求を、ネットワーク２０を介してブロードキャストする（ステップ５０３０）。
【０１４５】
次に、制御部５０６は、ステップ５０３０において送信した要求に対して応答があるか否かを判定する（ステップ５０４０）。要求に対して応答があると判定された場合、処理はステップ５０５０に進む。一方、応答がないと判定された場合、処理はステップ５３００に進む。
【０１４６】
ステップ５０４０において、応答がないと判定された場合、自ＳＶＰ５００（この例において、ＳＶＰ５００ｂ（ＳＶＰＡ））を冗長化することができる待機ＳＶＰが、計算機システム１内に存在しない。すなわち、この場合、自ＳＶＰ５００がＳＰＯＦ（Ｓｉｇｌｅ  Ｐｏｉｎｔ  Ｏｆ  Ｆａｉｌｕｒｅ、単一障害点）となる。このため、制御部５０６は、ＳＰＯＦを管理者に通知し（ステップ５３００）、ステップ５０９０に進む。ステップ５３００において、例えば、管理者が使用する管理計算機６００に障害状態が表示され、さらに、管理者に電子メールが送信される。
【０１４７】
ステップ５０４０において、応答があると判定された場合、制御部５０６は、冗長再構成計算テーブル２６００ｂを作成し、ＤＫＣ台数が最も小さい待機ＳＶＰを取得する（ステップ５０５０）。
【０１４８】
ここで、図１０を参照して、ステップ５０５０においてＳＶＰ５００ｂが作成する冗長再構成計算テーブル２６００ｂを説明する。なお、冗長再構成計算テーブル２６００ｂは、ＳＶＰ５００ｂが作成する冗長再構成計算テーブル２６００である。
【０１４９】
図１０は、本発明の実施の形態の冗長再構成計算テーブル２６００の説明図である。
【０１５０】
冗長再構成可否応答要求に対する応答には、応答したＳＶＰ５００の識別子であるＳＶＰ＿ＩＤ、第２のインターフェイスのアドレスＡｄｄｒ２、応答したＳＶＰ５００によって冗長化されている稼動ＳＶＰの数である稼動ＳＶＰ台数、及び、それらの稼動ＳＶＰが管理するストレージシステム４００の数であるＤＫＣ台数が含まれる。冗長再構成可否応答プログラム８０００については、後で説明する（図１３参照）。
【０１５１】
例として、ステップ５０４０において、待機ＳＶＰであるＳＶＰ５００ｄ（ＳＶＰＢ）、ＳＶＰ５００ｆ（ＳＶＰＣ）及びＳＶＰ５００ｋ（ＳＶＰＤ）から応答があったと仮定する。冗長再構成計算テーブル２６００ｂは、ＳＶＰ＿ＩＤ２６０１ｂ、Ａｄｄｒ２＿２６０２ｂ、稼動ＳＶＰ台数２６０３ｂ、ＤＫＣ台数２６０４ｂ及び設置階数２６０５ｂを含む。
【０１５２】
図３（ａ）に示すように、ＳＶＰ５００ｄ（ＳＶＰＢ）は、識別子「ＳＶＰＢ」によって識別される。ＳＶＰ５００ｄ（ＳＶＰＢ）は、一つの稼動ＳＶＰ（すなわちＳＶＰ５００ｃ（ＳＶＰ２））を冗長化する。ＳＶＰ５００ｃ（ＳＶＰ２）は、一つのストレージシステム４００（すなわちストレージシステム４００ｂ（ＤＫＣ２））を管理する。さらに、この例において、ＳＶＰ５００ｄ（ＳＶＰＢ）の第２のインターフェイスのアドレスＡｄｄｒ２が「ＡｄｄｒＳＢ２」であり、ＳＶＰ５００ｄ（ＳＶＰＢ）が４階に設置されていると仮定する。この場合、ＳＶＰ５００ｄ（ＳＶＰＢ）は、ＳＶＰ＿ＩＤとして「ＳＶＰＢ」、Ａｄｄｒ２として「ＡｄｄｒＳＢ２」、稼動ＳＶＰ台数として「１」、ＤＫＣ台数として「１」、設置階数として「４」を応答する。これらが、冗長再構成計算テーブル２６００ｂのカラム２６０１ｂから２６０５ｂに格納される。
【０１５３】
ＳＶＰ５００ｆ（ＳＶＰＣ）及びＳＶＰ５００ｋ（ＳＶＰＤ）からの応答に含まれる値も、同様に冗長再構成計算テーブル２６００ｂに格納される。ステップ５０５０において選択される待機ＳＶＰは、ＤＫＣ台数２６０４ｂが最も少ないＳＶＰ５００ｄ（ＳＶＰＢ）である。
【０１５４】
結局、ＤＫＣ台数２６０４ｂは、待機ＳＶＰがＤＫＣデータリポジトリ５００００に保持しているデータの取得元であるストレージシステム４００の数である。例えば、図３（ａ）によれば、ＳＶＰ５００ｄ（ＳＶＰＢ）は、ＳＶＰ５００ｃ（ＳＶＰ２）がストレージシステム４００ｂ（ＤＫＣ２）から取得した管理のためのデータをＤＫＣデータリポジトリ５００００ｄに保持している。このため、ＳＶＰ５００ｄ（ＳＶＰＢ）が保持するデータの取得元であるストレージシステム４００の数は、「１」である。一方、ＳＶＰ５００ｆ（ＳＶＰＣ）は、ＳＶＰ５００ｅ（ＳＶＰ３）がストレージシステム４００ｃ（ＤＫＣ３）から取得した管理のためのデータ、及び、ＳＶＰ５００ｇ（ＳＶＰ４）がストレージシステム４００ｄ（ＤＫＣ４）から取得した管理のためのデータをＤＫＣデータリポジトリ５００００ｆに保持している。このため、ＳＶＰ５００ｆ（ＳＶＰＣ）が保持するデータの取得元であるストレージシステム４００の数は、「２」である。
【０１５５】
再び図９を参照して、ステップ５０６０以降の処理を説明する。
【０１５６】
ＳＶＰＡ（ＳＶＰ５００ｂ）の制御部５０６は、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｂを参照する。その結果、ステップ５０４０にて応答しなかった稼動ＳＶＰであるＳＶＰ１が、ストレージシステム４００ａ（ＤＫＣ１）を管理していたこと、すなわち、ＳＶＰ１が、ストレージシステム４００ａ（ＤＫＣ１）からデータを取得していたことがわかる。このため、制御部５０６は、ＳＶＰ１がストレージシステム４００ａ（ＤＫＣ１）から取得したデータの複製を、ＳＶＰＡ（ＳＶＰ５００ｂ）のＤＫＣデータリポジトリ５００００ｂから、ＳＶＰＢ（ＳＶＰ５００ｄ）のＤＫＣデータリポジトリ５００００ｄにコピーする（ステップ５０６０）。ここで、ＳＶＰＢ（ＳＶＰ５００ｄ）は、ステップ５０５０において選択された待機ＳＶＰである。ＳＶＰ１がストレージシステム４００ａ（ＤＫＣ１）から取得したデータの複製は、図７のステップ３００３０においてＳＶＰＡ（ＳＶＰ５００ｂ）のＤＫＣデータリポジトリ５００００ｂに格納されたものである。
【０１５７】
なお、ＳＶＰ５００間のデータのコピーは、インターフェイス５０４及びネットワーク２０を介してＳＶＰ５００がデータを送受信することによって実行される。あるいは、インターフェイス５０２及びネットワーク１０を介してデータが送受信されてもよい。
【０１５８】
次に、ＳＶＰＡ（ＳＶＰ５００ｂ）の制御部５０６は、ステップ５０５０において選択された待機ＳＶＰであるＳＶＰＢ（ＳＶＰ５００ｄ）上の冗長構成稼動ＳＶＰテーブル２３００ｄ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｄに、エントリを追加する（ステップ５０７０）。
【０１５９】
具体的には、制御部５０６は、ステップ５０２０で設定した管理ＤＫＣテーブル２１００ｂ及びＳＶＰ状態テーブル２５００ｂを参照する。その結果、自ＳＶＰ５００の識別子が「ＳＶＰＡ」であり、自ＳＶＰ５００がストレージシステム４００ａ（ＤＫＣ１）をこれから管理する（すなわち、その管理をＳＶＰ１から引継いだ）ことがわかる。そして、制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｄに、ＳＶＰＡを稼動ＳＶＰ＿ＩＤ２３０１ｄとして含むエントリを追加する。さらに、制御部５０６は、ＳＶＰＡ及びＤＫＣ１をそれぞれ稼動ＳＶＰ＿ＩＤ２４０１ｄ及びＤＫＣ＿ＩＤ２４０２ｄとして含むエントリを追加する。
【０１６０】
これらのエントリの追加は、例えば、ＳＶＰＡ（ＳＶＰ５００ｂ）がＳＶＰＢ（ＳＶＰ５００ｄ）に追加の指示を送信することによって実行される。この指示を受信したＳＶＰＢ（ＳＶＰ５００ｄ）の制御部５０６は、指示に従ってエントリを追加する。その結果、ＳＶＰＡの待機ＳＶＰとなるＳＶＰＢの冗長構成稼動ＳＶＰテーブル２３００ｄ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｄに、ＳＶＰＡ及びＤＫＣ１に関するエントリが追加される（図１１参照）。
【０１６１】
すなわち、ステップ５０７０が実行された結果、ＳＶＰＢ（ＳＶＰ５００ｄ）の制御部５０６は、自ＳＶＰ５００がＳＶＰＡ（ＳＶＰ５００ｂ）を冗長化していること、言い換えると、ＳＶＰＡ（ＳＶＰ５００ｂ）に障害が発生したとき、自ＳＶＰ５００が、ストレージシステム４００ａ（ＤＫＣ１）の管理をＳＶＰＡ（ＳＶＰ５００ｂ）から引継ぐ必要があることを知ることができる。
【０１６２】
次に、ＳＶＰＡ（ＳＶＰ５００ｂ）の制御部５０６は、ステップ５０５０において選択した待機ＳＶＰの識別子「ＳＶＰＢ」を、待機ＳＶＰテーブル２２００ｂに追加する（ステップ５０８０）。
【０１６３】
以上の処理によって、ステップ４０３０において応答しなかった稼動ＳＶＰであるＳＶＰ１の動作が、ＳＶＰＢ（ＳＶＰ５００ｄ）に引継がれ、さらに、冗長構成７００が再構成される。上記のように、ＳＶＰ１に障害が発生し、ＳＶＰＡがフェイルオーバーした後、ＳＶＰＢを待機ＳＶＰとする冗長構成７００が再構成された状態を図３（ｂ）に示す。ＳＶＰＡ（ＳＶＰ５００ｂ）がＤＫＣ１を管理し、ＳＶＰ２がＤＫＣ２を管理し、ＳＶＰＡとＳＶＰ２がＳＶＰＢによって、冗長化されている。
【０１６４】
このように、例えばＳＶＰ１に障害が発生すると、ＳＶＰＡ（ＳＶＰ５００ｂ）がＳＶＰ１をフェイルオーバーすることによって、新たな稼動ＳＶＰとして動作する。このため、ＳＶＰＡ（ＳＶＰ５００ｂ）が属する冗長構成７００ａは、待機ＳＶＰを含まなくなる。この場合、一つ以上の待機ＳＶＰを含むように、冗長構成７００が再構成される。具体的には、ＳＶＰ１及びＳＶＰＡ（ＳＶＰ５００ｂ）からなる冗長構成７００ａ、及び、ＳＶＰ２（ＳＶＰ５００ｃ）及びＳＶＰＢ（ＳＶＰ５００ｄ）からなる冗長構成７００ｂが解除され、これらの四つのＳＶＰ５００を含む新たな冗長構成７００ｅが構成される。冗長構成７００ｅは、二つの稼動ＳＶＰ（すなわちＳＶＰＡ（ＳＶＰ５００ｂ）及びＳＶＰ２（ＳＶＰ５００ｃ））と、これらの稼動ＳＶＰを冗長化する一つの待機ＳＶＰ（すなわちＳＶＰＢ（ＳＶＰ５００ｄ））と、を含む。
【０１６５】
図１１は、本発明の実施の形態において冗長構成が再構成された後の待機ＳＶＰであるＳＶＰ５００ｄ（ＳＶＰＢ）が保持するテーブルの説明図である。
【０１６６】
具体的には、図１１は、ＳＶＰＢ（ＳＶＰ５００ｄ）が保持する管理ＤＫＣテーブル２１００ｄ、待機ＳＶＰテーブル２２００ｄ、冗長構成稼動ＳＶＰテーブル２３００ｄ、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｄ及びＳＶＰ状態テーブル２５００ｄを示す。これらのテーブルが管理する項目の概要は、図４及び図５において説明した通りである。以下、上記の例における冗長構成７００ｅのＳＶＰＢ（ＳＶＰ５００ｄ）において、これらのテーブルに設定される具体的な値を説明する。
【０１６７】
ＳＶＰＢ（ＳＶＰ５００ｄ）は待機ＳＶＰであるため、管理ＤＫＣテーブル２１００ｄ及び待機ＳＶＰテーブル２２００ｄは、エントリを含まない。
【０１６８】
ＳＶＰＢ（ＳＶＰ５００ｄ）は二つのＳＶＰを冗長化している。このため、冗長構成稼動ＳＶＰテーブル２３００ｄは、二つのエントリを含む。
【０１６９】
第１のエントリの稼動ＳＶＰ＿ＩＤ２３０１ｄ、ＳＶＰ＿Ａｄｄｒ１＿２３０２ｄ、ＳＶＰ＿Ａｄｄｒ２＿２３０３ｄ、監視２３０４ｄ及びＤＫＣ数２３０５ｄには、それぞれ、「ＳＶＰ２」、「ＡｄｄｒＳ２１」、「ＡｄｄｒＳ２２」、「Ｙ」及び「１」が設定される。
【０１７０】
「ＳＶＰ２」は、ＳＶＰＢ（ＳＶＰ５００ｄ）によって冗長化されるＳＶＰ２（ＳＶＰ５００ｃ）の識別子である。「ＡｄｄｒＳ２１」は、ＳＶＰ２（ＳＶＰ５００ｃ）の第１のインターフェイス５０２のアドレスである。「ＡｄｄｒＳ２２」は、ＳＶＰ２（ＳＶＰ５００ｃ）の第２のインターフェイス５０４のアドレスである。監視２３０４ｄの値「Ｙ」は、ＳＶＰＢ（ＳＶＰ５００ｄ）がＳＶＰ２（ＳＶＰ５００ｃ）を監視することを示す。ＳＶＰ２（ＳＶＰ５００ｃ）が一つのストレージシステム４００ｂ（ＤＫＣ２）のみを管理しているため、ＤＫＣ数２３０５ｄには「１」が設定される。
【０１７１】
第２のエントリの稼動ＳＶＰ＿ＩＤ２３０１ｄ、ＳＶＰ＿Ａｄｄｒ１＿２３０２ｄ、ＳＶＰ＿Ａｄｄｒ２＿２３０３ｄ、監視２３０４ｄ及びＤＫＣ数２３０５ｄには、それぞれ、「ＳＶＰＡ」、「ＡｄｄｒＳ１１」、「ＡｄｄｒＳＡ２」、「Ｙ」及び「１」が設定される。
【０１７２】
「ＳＶＰＡ」は、ＳＶＰＢ（ＳＶＰ５００ｄ）によって冗長化されるＳＶＰＡ（ＳＶＰ５００ｂ）の識別子である。「ＡｄｄｒＳ１１」は、ＳＶＰＡ（ＳＶＰ５００ｂ）の第１のインターフェイス５０２のアドレスである。この「ＡｄｄｒＳ１１」は、「ＡｄｄｒＳ１１」は、障害が発生したＳＶＰ１において設定されていたものと同じアドレスである。（図９のステップ５０２０参照）「ＡｄｄｒＳＡ２」は、ＳＶＰＡ（ＳＶＰ５００ｂ）の第２のインターフェイス５０４のアドレスである。監視２３０４ｄの値「Ｙ」は、ＳＶＰＢ（ＳＶＰ５００ｄ）がＳＶＰＡ（ＳＶＰ５００ｂ）を監視することを示す。ＳＶＰＡ（ＳＶＰ５００ｂ）が一つのストレージシステム４００ａ（ＤＫＣ１）のみを管理しているため、ＤＫＣ数２３０５ｄには「１」が設定される。
【０１７３】
ＳＶＰＢ（ＳＶＰ５００ｄ）は二つのＳＶＰを冗長化しており、これらのＳＶＰはそれぞれ一つのストレージシステムを管理している。このため、稼動ＳＶＰ−ＤＫＣテーブル２４００ｄは、二つのエントリを含む。
【０１７４】
第１のエントリの稼動ＳＶＰ＿ＩＤ２４０１ｄ、ＤＫＣ＿ＩＤ２４０２ｄ及びＤＫＣ＿Ａｄｄｒ２４０３ｄには、それぞれ、「ＳＶＰ２」、「ＤＫＣ２」及び「ＡｄｄｒＤ２」が設定される。
【０１７５】
「ＳＶＰ２」は、ＳＶＰＢ（ＳＶＰ５００ｄ）によって冗長化されるＳＶＰ２（ＳＶＰ５００ｃ）の識別子である。「ＤＫＣ２」は、ＳＶＰ２（ＳＶＰ５００ｃ）が管理しているストレージシステム４００ｂ（ＤＫＣ２）の識別子である。「ＡｄｄｒＤ２」は、ストレージシステム４００ｂ（ＤＫＣ２）のインターフェイス４９０のアドレスである。
【０１７６】
第２のエントリの稼動ＳＶＰ＿ＩＤ２４０１ｄ、ＤＫＣ＿ＩＤ２４０２ｄ及びＤＫＣ＿Ａｄｄｒ２４０３ｄには、それぞれ、「ＳＶＰＡ」、「ＤＫＣ１」及び「ＡｄｄｒＤ１」が設定される。
【０１７７】
「ＳＶＰＡ」は、ＳＶＰＢ（ＳＶＰ５００ｄ）によって冗長化されるＳＶＰＡ（ＳＶＰ５００ｂ）の識別子である。「ＤＫＣ１」は、ＳＶＰＡ（ＳＶＰ５００ｂ）が管理しているストレージシステム４００ａ（ＤＫＣ１）の識別子である。「ＡｄｄｒＤ１」は、ストレージシステム４００ａ（ＤＫＣ１）のインターフェイス４９０のアドレスである。
【０１７８】
ＳＶＰ状態テーブル２５００ｄは、ＳＶＰＢ（ＳＶＰ５００ｄ）が保持するＳＶＰ状態テーブル２５００である。ＳＶＰ＿ＩＤ２５０１ｄ、ＳＶＰ＿Ａｄｄｒ１＿２５０２ｄ及びＳＶＰ＿Ａｄｄｒ２＿２５０３ｄには、それぞれ、ＳＶＰＢ（ＳＶＰ５００ｄ）の識別子である「ＳＶＰＢ」、ＳＶＰＢ（ＳＶＰ５００ｄ）の第１のインターフェイス５０２のアドレス「ＡｄｄｒＳＢ１」、及び第２のインターフェイス５０４のアドレス「ＡｄｄｒＳＢ２」が設定される。状態２５０４ｄには、ＳＶＰＢ（ＳＶＰ５００ｄ）が待機ＳＶＰとして動作することを示す「待機」が設定される。再構成可否２５０５ｄには、再構成要求に対して応答することを示す「可」が設定される。設置階数２５０６ｄには、「４」が設定されている。これは、ＳＶＰＢ（ＳＶＰ５００ｄ）が４階に設置されていることを示す。
【０１７９】
一方、冗長構成７００の再構成の結果、新たな稼動ＳＶＰとなったＳＶＰＡ（５００ｂ）が保持するテーブルは、次のように更新される。
【０１８０】
ＤＫＣ管理テーブル２１００ｂのＤＫＣ＿ＩＤ２１０１ｂ及びＤＫＣ＿Ａｄｄｒ２１０２ｂは、それぞれ、「ＤＫＣ１」及び「ＡｄｄｒＤ１」に更新される。これらは、障害が発生したＳＶＰ１において設定されていたものと同じである。
【０１８１】
待機ＳＶＰテーブル２２００ｂの待機ＳＶＰ＿ＩＤ２２０１ｂ、ＳＶＰ＿Ａｄｄｒ２＿２２０２ｂ及び監視２２０３ｂは、それぞれ、「ＳＶＰＢ」、「ＡｄｄｒＳＢ２」及び「Ｙ」に更新される。「ＳＶＰＢ」及び「ＡｄｄｒＳＢ２」は、新たな待機ＳＶＰ（すなわち、ＳＶＰＡ（５００ｂ）に障害が発生したときにＳＶＰＡ（５００ｂ）をフェイルオーバーするＳＶＰ５００）の識別子、及び、そのアドレスである。
【０１８２】
冗長構成稼動ＳＶＰテーブル２３００ｂ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｂは、エントリを削除された結果、エントリを含まなくなる。
【０１８３】
ＳＶＰ状態テーブル２５００ｂのＳＶＰ＿Ａｄｄｒ１＿２５０２ｂ、状態２５０４ｂ及び再構成可否２５０５ｂは、それぞれ、「ＡｄｄｒＳ１１」、「稼動」及び「不可」に更新される。
【０１８４】
再び図９を参照して、ステップ５０９０以降の処理を説明する。
【０１８５】
図３のＳＶＰＣ（ＳＶＰ５００ｆ）のように、一つの待機ＳＶＰが複数の稼動ＳＶＰを冗長化している場合がある。このような場合に、待機ＳＶＰが一つの稼動ＳＶＰをフェイルオーバーすると、冗長構成７００の中の残りの稼動ＳＶＰを冗長化する待機ＳＶＰは存在しなくなる。すなわち、それらの残りの稼動ＳＶＰは、ＳＰＯＦとなる。このような場合、フェイルオーバーして新たな稼動ＳＶＰとなるＳＶＰ５００は、残りの稼動ＳＶＰがＳＰＯＦとならないように、冗長構成７００を再構成する。
【０１８６】
なお、図３（ａ）の例において、ＳＶＰＡは、ＳＶＰ１以外の稼動ＳＶＰを冗長化していなかったため、この処理は実行されない。以下、ＳＶＰＣ（ＳＶＰ５００ｆ）を例にして説明する。具体的には、図３（ａ）においてＳＶＰ３（ＳＶＰ５００ｅ）に障害が発生し、ＳＶＰＣ（ＳＶＰ５００ｆ）がフェイルオーバーし、ＳＶＰＢ（ＳＶＰ５００ｄ）がフェイルオーバーしたＳＶＰＣの待機ＳＶＰとして選択された場合を例として説明する。この場合、以下の処理によって、残りの稼動ＳＶＰであるＳＶＰ４（ＳＶＰ５００ｇ）を冗長化する待機ＳＶＰを含む冗長構成７００が再構成される。
【０１８７】
なお、ＳＶＰ３（ＳＶＰ５００ｅ）、ＳＶＰ４（ＳＶＰ５００ｇ）、ＳＶＰＣ（ＳＶＰ５００ｆ）及びＳＶＰＤ（ＳＶＰ５００ｋ）が保持するテーブルについては、図示を省略する。以下の説明において、これらのテーブルがどのＳＶＰ５００によって保持されているかは、テーブルの名称の末尾に付加された「ｅ」、「ｇ」、「ｆ」及び「ｋ」の添字によって識別される。
【０１８８】
ＳＶＰＣ（ＳＶＰ５００ｆ）の制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｆ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｆから、ステップ４０３０において応答しなかった稼動ＳＶＰであるＳＶＰ３（ＳＶＰ５００ｅ）のエントリを削除する（ステップ５０９０）。
【０１８９】
次に、制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｆを参照し、冗長構成稼動ＳＶＰテーブル２３００ｆにエントリがあるか否かを判定する（ステップ５１００）。冗長構成稼動ＳＶＰテーブル２３００ｆにエントリがあると判定された場合、処理はステップ５１１０に進む。エントリがないと判定された場合、処理を終了する（Ｂ）。
【０１９０】
ステップ５１００において、エントリがあると判定された場合、フェイルオーバーした待機ＳＶＰは、ステップ４０３０において応答しなかった稼動ＳＶＰ以外の稼動ＳＶＰの待機ＳＶＰにもなっている。すなわち、フェイルオーバーした待機ＳＶＰが属する冗長構成７００は、障害が発生したＳＶＰ５００のほかにも、その待機ＳＶＰによって冗長化される稼動ＳＶＰを含んでいる。例えば、冗長構成７００ｃは、障害が発生したＳＶＰ３（ＳＶＰ５００ｅ）のほかにも、ＳＶＰＣ（ＳＶＰ５００ｆ）によって冗長化されるＳＶＰ４（ＳＶＰ５００ｇ）を含んでいる。この場合、これらの稼動ＳＶＰについても、冗長構成７００を再構成する。つまり、冗長構成稼動ＳＶＰテーブル２３００ｆには、ＳＶＰ３（ＳＶＰ５００ｅ）のエントリが削除された後にも、ＳＶＰ４のエントリがあるため、ステップ５１１０に進む。そして、ＳＶＰ４（ＳＶＰ５００ｇ）についても、冗長構成７００が再構成される。現時点では、ＳＶＰ３（ＳＶＰ５００ｅ）をフェイルオーバーしたＳＶＰＣ（ＳＶＰ５００ｆ）は、ＳＶＰＢ（ＳＶＰ５００ｄ）によって冗長化されているが、ＳＶＰ４（ＳＶＰ５００ｇ）は冗長化されていない状態である。
【０１９１】
ＳＶＰＣ（ＳＶＰ５００ｆ）の制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｆから、稼動ＳＶＰの識別子であるＳＶＰ４を取得する（ステップ５１１０）。そして、制御部５０６は、冗長再構成可否応答要求を、ネットワーク２０を介してブロードキャストする（ステップ５１２０）。
【０１９２】
制御部５０６は、ステップ５１２０の要求に対する応答があるか否かを判定する（ステップ５１３０）。ステップ５１３０において、応答があると判定された場合、処理はステップ５１４０に進む。応答がないと判定された場合、処理はステップ５４００に進む。
【０１９３】
ステップ５１３０において、応答がないと判定された場合、稼動ＳＶＰであるＳＶＰ４（ＳＶＰ５００ｇ）を冗長化することができない。すなわち、ＳＶＰ４（ＳＶＰ５００ｇ）はＳＰＯＦとなる。この場合、制御部５０６は、ＳＰＯＦを管理者に通知し（ステップ５４００）、ステップ５１８０に進む。管理者への通知において、管理者が使用する管理計算機６００での障害状態の表示、及び、管理者への電子メールの送付が行われる。
【０１９４】
ステップ５１３０において、応答があると判定された場合、受信した応答に基づいて冗長再構成計算テーブル２６００ｆを作成し、ＤＫＣ台数が最も小さい待機ＳＶＰを選択する（ステップ５１４０）。
【０１９５】
例として、ステップ５１２０において、ＳＶＰＣ（ＳＶＰ５００ｆ）からの要求に対して、ＳＶＰＡ（ＳＶＰ５００ｂ）、ＳＶＰＢ（ＳＶＰ５００ｄ）及びＳＶＰＤ（ＳＶＰ５００ｋ）が応答し、ステップ５１４０においてＳＶＰＤ（ＳＶＰ５００ｋ）が選択されたと仮定する。
【０１９６】
制御部５０６は、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｆを参照する。その結果、ステップ５１１０において取得した稼動ＳＶＰであるＳＶＰ４（ＳＶＰ５００ｇ）がストレージシステム４００ｄ（ＤＫＣ４）を管理していることがわかる。このため、制御部５０６は、ＳＶＰ４（ＳＶＰ５００ｇ）がストレージシステム４００ｄ（ＤＫＣ４）から取得したデータの複製を、ＳＶＰ４（ＳＶＰ５００ｇ）のＤＫＣデータリポジトリ５００００ｇから、ステップ５１４０において選択された待機ＳＶＰであるＳＶＰＤ（ＳＶＰ５００ｋ）のＤＫＣデータリポジトリ５００００ｋにコピーする（ステップ５１５０）。
【０１９７】
次に、制御部５０６は、ステップ５１４０において選択された待機ＳＶＰであるＳＶＰＤ（ＳＶＰ５００ｋ）上の冗長構成稼動ＳＶＰテーブル２３００ｋ、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｋに、ステップ５１１０において取得した稼動ＳＶＰであるＳＶＰ４（ＳＶＰ５００ｇ）のエントリを追加する（ステップ５１６０）。つまり、ＳＶＰ４の待機ＳＶＰとなるＳＶＰＤの冗長構成稼動ＳＶＰテーブル２３００ｋと稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｋに、ＳＶＰ４とＤＫＣ４のエントリを追加する。この追加は、ステップ５０７０と同様の方法によって実行される。
【０１９８】
次に、制御部５０６は、ステップ５１１０において取得した稼動ＳＶＰであるＳＶＰ４（ＳＶＰ５００ｇ）上の待機ＳＶＰテーブル２２００ｇのエントリを、ステップ５１４０において選択された待機ＳＶＰであるＳＶＰＤ（ＳＶＰ５００ｋ）のエントリに変更する（ステップ５１７０）。つまり、制御部５０６は、ＳＶＰ４の待機ＳＶＰとして設定されていたＳＶＰＣを、ＳＶＰＤに変更する。
【０１９９】
次に、制御部５０６は、稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｆを参照し、ステップ５１１０において取得した稼動ＳＶＰであるＳＶＰ４が管理するストレージシステム４００ｄ（ＤＫＣ４）から取得したデータを、ＤＫＣデータリポジトリ５００００ｆから削除する（ステップ５１８０）。
【０２００】
次に、制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｆと稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｆから、ステップ５１１０において取得した稼動ＳＶＰであるＳＶＰ４（ＳＶＰ５００ｇ）のエントリを削除する（ステップ５１９０）。
【０２０１】
ステップ５１４０において、ＤＫＣ台数の最も小さい待機ＳＶＰを取得し、冗長構成７００を再構成することで、待機ＳＶＰが冗長化のために格納する、ストレージシステム４００から取得したデータが、待機ＳＶＰに略均等に分散される。これによって、待機ＳＶＰの負荷が分散される。
【０２０２】
また、ＳＶＰ５００が備えるＤＫＣデータリポジトリ５００００に格納できるデータの容量は有限である。このため、ＤＫＣデータリポジトリ５００００に格納されたデータ量が所定の値を超えると、古いデータから順に削除される。多くのストレージシステム４００から取得されたデータを保持するＳＶＰ５００であるほど、１台のストレージシステム４００からのデータを格納するために割り当てられるＤＫＣデータリポジトリ５００００の容量は小さくなる。したがって、そのようなＳＶＰ５００は、ストレージシステム４００から取得されたデータを長期間保持することができない。上記のようにストレージシステム４００から取得されたデータを各ＳＶＰ５００に適切に分散することによって、容量が有限であるＤＫＣデータリポジトリ５００００に格納するストレージシステム４００の１台あたりのデータ量を大きく（すなわちデータの蓄積期間を長く）することができる。
【０２０３】
なお、ステップ５０５０又はステップ５１４０において、ＤＫＣ台数が最も少ない待機ＳＶＰが複数存在する場合、新たな稼動ＳＶＰと地理的に近い位置に設置された待機ＳＶＰが選択されてもよい。地理的な位置は、いかなる座標によって表現されてもよい。例えば、計算機システム１に含まれるＳＶＰ５００が、一つの建物の複数の階に設置されている場合、設置階数が最も近い待機ＳＶＰが選択されてもよい。このように、地理的に近い待機ＳＶＰを選択することで、ＳＶＰ５００自体の機器保守など直接ＳＶＰ機器を扱う作業が必要であるときに、作業者が冗長構成７００に含まれる複数のＳＶＰ５００の間を移動する手間を省くことができる。
【０２０４】
＜待機ＳＶＰ監視プログラム６０００＞
待機ＳＶＰは、ストレージシステム４００を管理しない。しかし、待機ＳＶＰに障害が発生すると、その後稼動ＳＶＰに障害が発生したときにフェイルオーバーすることができない。言い換えると、待機ＳＶＰに障害が発生すると、その待機ＳＶＰによって冗長化されている稼動ＳＶＰはＳＰＯＦとなる。このため、稼動ＳＶＰは、待機ＳＶＰを監視し、待機ＳＶＰに障害が発生したときに冗長構成７００を再構成する必要がある。
【０２０５】
待機ＳＶＰ監視プログラム６０００は、稼動ＳＶＰが待機ＳＶＰの稼動状況を監視するためのプログラムである。待機ＳＶＰ監視プログラム６０００は、ＳＶＰ５００の制御部５０６によって、記憶装置５１２から読み出され、実行される。待機ＳＶＰ監視プログラム６０００は、稼動ＳＶＰの制御部５０６によって、監視プログラム３０００のステップ３０３０において実行される。例えば、図３（ａ）のＳＶＰ５００ａ（ＳＶＰ１）が実行する。
【０２０６】
図１２は、本発明の実施の形態の待機ＳＶＰ監視プログラム６０００の処理を示すフローチャートである。
【０２０７】
例として、ＳＶＰ５００ａ（ＳＶＰ１）の制御部５０６によって実行される場合について説明する。
【０２０８】
最初に、制御部５０６は、ステップ６０１０にて、待機ＳＶＰテーブル２２００ａから、待機ＳＶＰの識別子すなわちＳＶＰＡ（ＳＶＰ５００ｂ）を取得する。
【０２０９】
次に、制御部５０６は、ステップ６０１０にて取得した待機ＳＶＰであるＳＶＰＡ（ＳＶＰ５００ｂ）に対して、稼動状況応答を要求する（ステップ６０２０）。
【０２１０】
次に、制御部５０６は、ステップ６０２０の要求に対して応答があるか否かを判定する（ステップ６０３０）。ステップ６０２０の要求に対して応答があると判定された場合、ステップ６０１０にて取得した待機ＳＶＰであるＳＶＰＡ（ＳＶＰ５００ｂ）は正常に稼動している。この場合、冗長構成７００を再構成する必要がないため、制御部５０６は処理を終了する。ここで、稼動状況応答要求及びそれに対する応答は、例えば、ネットワーク２０を介したハートビートである。
【０２１１】
ステップ６０３０において、応答がないと判定された場合、ステップ６０１０にて取得した待機ＳＶＰであるＳＶＰＡ（ＳＶＰ５００ｂ）に障害が発生している。この場合、制御部５０６は、冗長再構成可否応答要求をブロードキャストする（ステップ６０４０）。
【０２１２】
次に、制御部５０６は、ステップ６０４０の冗長再構成可否応答要求に対して応答があるか否かを判定する（ステップ６０５０）。ステップ６０４０の冗長再構成可否応答要求に対して応答があると判定された場合、処理はステップ６０６０に進む。一方、応答がないと判定された場合、処理はステップ６１００に進む。
【０２１３】
ステップ６０５０において、応答があると判定された場合、制御部５０６は、応答に基づいて冗長再構成計算テーブル２６００ａを作成し、ＤＫＣ台数２６０４の最も小さい待機ＳＶＰを選択する（ステップ６０６０）。ここで、例として、ＳＶＰ１（ＳＶＰ５００ａ）からの要求に対して、ＳＶＰＢ、ＳＶＰＣ及びＳＶＰＤが応答し、ステップ６０６０においてＳＶＰＢが選択されたと仮定する。
【０２１４】
制御部５０６は、ステップ６０６０において選択された待機ＳＶＰであるＳＶＰＢ（ＳＶＰ５００ｄ）の冗長構成稼動ＳＶＰテーブル２３００ｄ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｄに、自ＳＶＰ５００すなわちＳＶＰ１（ＳＶＰ５００ａ）及び自ＳＶＰ５００が管理するストレージシステム４００ａ（ＤＫＣ１）のエントリを追加する（ステップ６０７０）。この追加は、図９のステップ５０７０と同様の方法で実行されてもよい。
【０２１５】
次に、制御部５０６は、管理ＤＫＣテーブル２１００ａを参照する。その結果、自ＳＶＰ５００がストレージシステム４００ａ（ＤＫＣ１）を管理していることがわかる。制御部５０６は、ステップ６０６０において選択された待機ＳＶＰであるＳＶＰＢ（ＳＶＰ５００ｄ）のＤＫＣデータリポジトリ５００００ｄに、自ＳＶＰ５００が管理するストレージシステム４００ａ（ＤＫＣ１）から取得したデータを、ＤＫＣデータリポジトリ５００００ａからコピーする（ステップ６０８０）。
【０２１６】
次に、制御部５０６は、待機ＳＶＰテーブル２２００ａの待機ＳＶＰ＿ＩＤ２２０１ａを、ステップ６０３０において応答しなかった待機ＳＶＰであるＳＶＰＡ（ＳＶＰ５００ｂ）から、ステップ６０６０において選択された待機ＳＶＰであるＳＶＰＢ（ＳＶＰ５００ｄ）に変更し（ステップ６０９０）、処理を終了する。
【０２１７】
ステップ６０５０において、応答がないと判定された場合、稼動ＳＶＰを冗長化することができない。すなわち、稼動ＳＶＰであるＳＶＰ１（ＳＶＰ５００ａ）は、ＳＰＯＦとなる。この場合、制御部５０６は、待機ＳＶＰテーブル２２００ａから、ステップ６０３０において応答しなかった待機ＳＶＰであるＳＶＰＡ（ＳＶＰ５００ａ）のエントリを削除し、ＳＰＯＦを管理者に通知する（ステップ６１００）。管理者への通知では、管理者が使用する管理計算機６００での障害状態の表示、及び、管理者への電子メールの送付が行われる。
【０２１８】
ステップ６０５０において、ＤＫＣ台数の最も小さい待機ＳＶＰを取得し、冗長構成７００を再構成することで、待機ＳＶＰが冗長化のために格納する、ストレージシステム４００から取得したデータが、待機ＳＶＰに略均等に分散される。これによって、待機ＳＶＰの負荷が分散される。
【０２１９】
また、図９において説明したように、限られた記憶領域に格納するストレージシステム４００の１台あたりのデータ量を大きく（すなわちデータの蓄積期間を長く）することができる。
【０２２０】
なお、図９において説明したように、ステップ６０６０において、ＤＫＣ台数が最も少ない待機ＳＶＰが複数存在する場合、稼動ＳＶＰと地理的に近い位置に設置された待機ＳＶＰが選択されてもよい。地理的な位置は、いかなる座標によって表現されてもよい。例えば、計算機システム１に含まれるＳＶＰ５００が、一つの建物の複数の階に設置されている場合、ＳＶＰ状態テーブル２５００の設置階数２５０６と冗長再構成計算テーブルの設置階数２６０４とを比較し、それらの設置階数が同じ又は最も近い待機ＳＶＰを選択してもよい。このように、地理的に近い待機ＳＶＰを選択することで、ＳＶＰ自体の機器保守など直接ＳＶＰ機器を扱う作業が必要であるときに、作業者が冗長構成７００に含まれる複数のＳＶＰ５００の間を移動する手間を省くことができる。
【０２２１】
＜冗長再構成可否応答プログラム８０００＞
冗長再構成可否応答プログラム８０００は、ＳＶＰ５００の制御部５０６によって、記憶装置５１２から読み出され、実行される。
【０２２２】
冗長再構成可否応答プログラム８０００は、ＳＶＰ５００が、他のＳＶＰ５００からネットワーク２０を介して冗長再構成可否応答要求を受けたときに、制御部５０６によって実行される。
【０２２３】
図１３は、本発明の実施の形態の冗長再構成可否応答プログラム８０００の処理を示すフローチャートである。
【０２２４】
制御部５０６は、ステップ８０１０にて、冗長再構成可否応答要求を受け付ける。
【０２２５】
次に、制御部５０６は、ＳＶＰ状態テーブル２５００の再構成可否２５０５を参照し、再構成できるか否かを判定する（ステップ８０２０）。
【０２２６】
ステップ８０２０において、ＳＶＰ状態テーブル２５００の再構成可否２５０５が「不可」であると判定された場合、制御部５０６は処理を終了する。
【０２２７】
ステップ８０２０において、ＳＶＰ状態テーブル２５００の再構成可否２５０５が「可」であると判定された場合、制御部５０６は、ＳＶＰ状態テーブル２５００のＳＶＰ＿ＩＤ２５０１、ＳＶＰ＿Ａｄｄｒ２＿２５０３、設置階数２５０６及び冗長構成稼動ＳＶＰテーブル２３００を参照し、稼動ＳＶＰ数とＤＫＣ数２３０５の合計を要求元に応答し（ステップ８０３０）、処理を終了する。稼動ＳＶＰ数とは、冗長構成稼動ＳＶＰテーブル２３００に含まれるエントリの数である。ＤＫＣ数２３０５の合計とは、冗長構成稼動ＳＶＰテーブル２３００に含まれるエントリのＤＫＣ数２３０５の合計値である。
【０２２８】
例えば、ＳＶＰ５００ｂの制御部５０６が冗長再構成可否応答プログラム８０００を実行する場合を例として説明する。この場合、制御部５０６は、ステップ８０３０においてＳＶＰ状態テーブル２５００ｂを参照し、ＳＶＰ＿ＩＤ２５０１としてＳＶＰＡ、ＳＶＰ＿Ａｄｄｒ２＿２５０３としてＡｄｄｒＳＡ２、設置階数２５０６として３を応答する。さらに、制御部５０６は、冗長構成稼動ＳＶＰテーブル２３００ｂを参照し、稼動ＳＶＰ数として１、ＤＫＣ数の合計として１を応答する。
【０２２９】
稼動ＳＶＰ数及びＤＫＣ数の合計は、待機ＳＶＰが複数の稼動ＳＶＰを冗長化している場合には、複数となる。例えば、図３（ａ）のＳＶＰ５００ｆ（ＳＶＰＣ）であれば、稼動ＳＶＰ数は２、ＤＫＣ数の合計は２である。
【０２３０】
また、冗長構成稼動ＳＶＰテーブル２３００にエントリがない場合には、稼動ＳＶＰ数及びＤＫＣ数の合計はいずれも０となる。
【０２３１】
＜論理図２＞
図１４は、本発明の実施の形態のストレージシステム４００とＳＶＰ５００との関係を論理的に示す説明図である。
【０２３２】
図１４（ａ）は、図３（ａ）と同じである。図１４（ｂ）は、図１４（ａ）に新しくＳＶＰＥ（ＳＶＰ５００ｍ）を追加し、冗長構成７００を再構成した後の状態である。図１４（ｃ）は、図１４（ｂ）に、さらにＳＶＰＧ（ＳＶＰ５００ｎ）を追加した後の状態である。ＳＶＰＧは、待機ＳＶＰのスペアとなっており、冗長構成７００は再構成されていない。
【０２３３】
このように、新規にＳＶＰ５００を計算機システム１に追加したとき、又は、障害の発生したＳＶＰ５００を復旧させる（フェイルバックする）ときに実行されるＳＶＰフェイルバックプログラム１００００を次に説明する。
【０２３４】
＜ＳＶＰフェイルバックプログラム１００００＞
ＳＶＰフェイルバックプログラム１００００は、ＳＶＰ５００の制御部５０６によって、記憶装置５１２から読み出され、実行される。
【０２３５】
ＳＶＰフェイルバックプログラム１００００は、新規にＳＶＰ５００を計算機システム１に追加したとき、又は、障害の発生したＳＶＰ５００を復旧させる（フェイルバックする）ときに、管理者が管理計算機６００から新規に追加したＳＶＰ５００、又は復旧したＳＶＰ５００を指定して実行する。あるいは、管理者が新規に追加したＳＶＰ５００、又は復旧したＳＶＰ５００を直接使用して実行してもよい。
【０２３６】
図１５は、本発明の実施の形態のＳＶＰフェイルバックプログラム１００００の処理を示す説明図である。
【０２３７】
例として、図１４（ａ）に示す計算機システム１に、ＳＶＰ５００ｍ（ＳＶＰＥ）を追加する場合について説明する。
【０２３８】
管理者は、ＳＶＰフェイルバックプログラム１００００の実行前に、ＳＶＰ５００ｍを識別する識別子「ＳＶＰＥ」、ＳＶＰ５００ｍ（ＳＶＰＥ）の第１のインターフェイスのアドレス「ＡｄｄｒＳＥ１」、第２のインターフェイスのアドレス「ＡｄｄｒＳＥ２」、状態「待機」、及び再構成可否「可」をＳＶＰ状態テーブル２５００ｍ（図示省略）に設定する。
【０２３９】
ＳＶＰフェイルバックプログラム１００００が実行されると、ＳＶＰ５００ｍ（ＳＶＰＥ）の制御部５０６は、ネットワーク２０を介して、冗長再構成可否応答要求をブロードキャストする（ステップ１００１０）。
【０２４０】
制御部５０６は、冗長再構成可否応答要求に対して応答があるか否かを判定する（ステップ１００２０）。冗長再構成可否応答要求に対して応答があると判定された場合、処理はステップ１００３０に進む。応答がないと判定された場合には制御部５０６は処理を終了する。
【０２４１】
ステップ１００２０にて応答があると判定された場合、制御部５０６は、応答に基づいて冗長再構成計算テーブル２６００を作成し、稼動ＳＶＰ台数２６０３が２台以上かつＤＫＣ台数２６０４が最も多いＳＶＰ＿ＩＤ２６０１を取得する（ステップ１００３０）。稼動ＳＶＰは、冗長再構成可否応答要求に対して応答しないため、ステップ１００３０で取得されるのは、待機ＳＶＰである。
【０２４２】
例えば、ステップ１００２０において、待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）、ＳＶＰ５００ｄ（ＳＶＰＢ）、ＳＶＰ５００ｆ（ＳＶＰＣ）及びＳＶＰ５００ｋ（ＳＶＰＤ）から応答があったと仮定する。図１４（ａ）に示すように、ＳＶＰＡは、稼動ＳＶＰ台数として１、ＤＫＣ台数として１を応答する。ＳＶＰＢは、稼動ＳＶＰ台数として１、ＤＫＣ台数として１を応答する。ＳＶＰＣは、稼動ＳＶＰ台数として２、ＤＫＣ台数として２を応答する。ＳＶＰＤは、稼動ＳＶＰ台数として１、ＤＫＣ台数として２を応答する。制御部５０６は、受信した応答に含まれる上記の稼動ＳＶＰ台数及びＤＫＣ台数を、それぞれ、冗長再構成計算テーブル２６００の稼動ＳＶＰ台数２６０３及びＤＫＣ台数２６０４として設定する。ステップ１００３０において、選択される待機ＳＶＰは、稼動ＳＶＰが２台以上かつＤＫＣ台数が最も多いＳＶＰＣである。
【０２４３】
制御部５０６は、ステップ１００３０の条件に該当する待機ＳＶＰがあるか否かを判定する（ステップ１００４０）。該当する待機ＳＶＰがあると判定された場合、処理はステップ１００５０に進む。該当する待機ＳＶＰがないと判定された場合、制御部５０６は処理を終了する。図１４（ａ）にＳＶＰ５００ｍ（ＳＶＰＥ）を追加した場合は、前記のように待機ＳＶＰとしてＳＶＰＣが条件に該当する。ステップ１００３０の条件に該当する待機ＳＶＰがない場合については、後で説明する。
【０２４４】
ステップ１００４０において、ステップ１００３０の条件に該当する待機ＳＶＰがある場合、該当する待機ＳＶＰに負荷が集中していると考えられる。すなわち、該当する待機ＳＶＰのデータリポジトリ５００００には、多くのストレージシステム４００から取得されたデータが格納されるため、データの蓄積期間が他の待機ＳＶＰと比較して短くなっている。この場合、追加されたＳＶＰ５００ｍ（ＳＶＰＥ）を用いて、該当する待機ＳＶＰの負荷が分散するように、冗長構成７００が再構成される。
【０２４５】
制御部５０６は、該当する待機ＳＶＰ（すなわちステップ１００３０にて取得した待機ＳＶＰ）であるＳＶＰＣ（ＳＶＰ５００ｆ）の冗長構成稼動ＳＶＰテーブル２３００ｆを取得する（ステップ１００５０）。
【０２４６】
次に、制御部５０６は、ステップ１００５０において取得したＳＶＰＣの冗長構成稼動ＳＶＰテーブル２３００ｆに含まれるエントリを、それぞれのグループにおけるＤＫＣ数２３０５の合計が均等になるように、二つのグループに分割する（ステップ１００６０）。完全に均等に分割できない場合、最も均等に近くなるように分割されてもよい。このような分割は、例えば、ＤＫＣ数２３０５が少ないエントリから順に、二つのグループに交互に分けてゆくことによって実行されてもよい。
【０２４７】
ＳＶＰＣの例では、冗長構成稼動ＳＶＰテーブル２３００ｆは、稼動ＳＶＰ＿ＩＤ２３０１がＳＶＰ３であるエントリと、ＳＶＰ４であるエントリの二つを含む。ＳＶＰ３はＤＫＣ３を、ＳＶＰ４はＤＫＣ４を管理している。この場合、ＳＶＰ３のエントリからなるグループとＳＶＰ４のエントリからなるグループに分けられる。そして、制御部５０６は、各グループに含まれる稼動ＳＶＰを取得する。この例では、一方のグループに属するＳＶＰ３と、もう一方のグループに属するＳＶＰ４とが取得される。
【０２４８】
制御部５０６は、ステップ１００６０において二つのグループに分割した稼動ＳＶＰのうち、ＤＫＣ数２３０５の合計がより小さい方のグループに属する稼動ＳＶＰを選択する。上記の例ではＤＫＣ数２３０５の合計がともに１であるため、どちらを選択してもよい。ここでは、ＳＶＰ４が選択された場合について説明する。
【０２４９】
制御部５０６は、ステップ１００３０にて取得した待機ＳＶＰ（すなわちＳＶＰＣ（ＳＶＰ５００ｆ））が保持する冗長構成稼動ＳＶＰテーブル２３００ｆ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｆのエントリのうち、ＳＶＰ４（ＳＶＰ４００ｇ）に関するエントリ（すなわち、稼動ＳＶＰ＿ＩＤとして「ＳＶＰ４」が設定されているエントリ）を、ＳＶＰフェイルバックプログラム１００００を実行するＳＶＰＥ（ＳＶＰ５００ｍ）の待機ＳＶＰの冗長構成稼動ＳＶＰテーブル２３００ｍ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｍに追加（コピー）する（ステップ１００７０）。このコピーは、ステップ１００３０にて取得した待機ＳＶＰに、必要なエントリのデータを送信させる要求を、ＳＶＰフェイルバックプログラム１００００を実行するＳＶＰＥ（ＳＶＰ５００ｍ）が送信することによって実行されてもよい。
【０２５０】
つまり、ＳＶＰ４（ＳＶＰ４００ｇ）の待機ＳＶＰをＳＶＰＣ（ＳＶＰ５００ｆ）からＳＶＰＥ（ＳＶＰ５００ｍ）に変更するために、制御部５０６は、ＳＶＰＣ（ＳＶＰ５００ｆ）の冗長構成稼動ＳＶＰテーブル２３００ｆ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｆから、ＳＶＰＥ（ＳＶＰ５００ｍ）の冗長構成稼動ＳＶＰテーブル２３００ｍ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｍに、ＳＶＰ４（ＳＶＰ４００ｇ）に関するエントリをコピーする。
【０２５１】
次に、制御部５０６は、ステップ１００３０において取得したＳＶＰＣ（ＳＶＰ５００ｆ）のＤＫＣデータリポジトリ５００００ｆから、ステップ１００７０にてエントリを追加されたＳＶＰ４（ＳＶＰ４００ｇ）が管理するストレージシステム４００ｄ（ＤＫＣ４）から取得されたデータを、ＳＶＰフェイルバックプログラムを実行するＳＶＰＥ（ＳＶＰ５００ｍ）のＤＫＣデータリポジトリ５００００ｍにコピーする（ステップ１００８０）。このコピーも、ステップ１００７０と同様、送信要求を送信することによって実行されてもよい。
【０２５２】
次に、制御部５０６は、ステップ１００７０にて、ＳＶＰ４（ＳＶＰ４００ｇ）の待機ＳＶＰテーブル２２００ｇの待機ＳＶＰ＿ＩＤ２２０１ｇを、ＳＶＰＣ（ＳＶＰ５００ｆ）から、ＳＶＰフェイルバックプログラムを実行するＳＶＰＥ（ＳＶＰ５００ｍ）に変更する（ステップ１００９０）。
【０２５３】
次に、制御部５０６は、ステップ１００３０において取得した待機ＳＶＰであるＳＶＰＣ（ＳＶＰ５００ｆ）の冗長構成稼動ＳＶＰテーブル２３００ｆ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｆから、稼動ＳＶＰであるＳＶＰ４（ＳＶＰ５００ｇ）に関するエントリを削除する（ステップ１０１００）。その結果、それまでＳＶＰＣ（ＳＶＰ５００ｆ）によって冗長化されていたＳＶＰ４（ＳＶＰ５００ｇ）は、ＳＶＰＥ（ＳＶＰ５００ｍ）によって冗長化される。
【０２５４】
以上で、制御部５０６は処理を終了する。
【０２５５】
ＳＶＰＥ（ＳＶＰ５００ｍ）の追加及びＳＶＰフェイルバックプログラム１００００の実行によって、図１４（ａ）に示す稼動ＳＶＰ３、稼動ＳＶＰ４及び待機ＳＶＰＣによる冗長構成７００ｃが、図１４（ｂ）に示す稼動ＳＶＰ３と待機ＳＶＰＣとによる冗長構成７００ｆ、及び、ＳＶＰ４とＳＶＰＥとによる冗長構成７００ｇに再構成される。
【０２５６】
上記図１４及び図１５は、ＳＶＰＥ（ＳＶＰ５００ｍ）が新たに追加された場合を例として説明したが、ＳＶＰＥ（ＳＶＰ５００ｍ）が障害から回復した場合にも同様の処理が実行される。
【０２５７】
ＳＶＰフェイルバックプログラム１００００の実行によって、新規のＳＶＰ５００の追加及び障害から回復したＳＶＰ５００のフェイルバックを、管理者がストレージシステム４００とＳＶＰ５００の構成を手動にて変更することなく、容易に自動的に行うことができる。
【０２５８】
また、ステップ１００３０において、ＤＫＣ台数の最も多い待機ＳＶＰを選択し、冗長構成７００を再構成することで、待機ＳＶＰが冗長化のために格納するストレージシステム４００のデータが待機ＳＶＰに均等に分散される。これによって、待機ＳＶＰの負荷が分散され、また、限られた記憶領域に格納するストレージシステム４００の１台あたりのデータ量を大きく（すなわちデータの蓄積期間を長く）することができる。
【０２５９】
さらに、ステップ１００３０において、ＤＫＣ台数が最も多い待機ＳＶＰが複数存在する場合、新たに追加されたＳＶＰ５００と地理的に近い位置に設置された待機ＳＶＰが選択されてもよい。地理的な位置は、いかなる座標によって表現されてもよい。例えば、計算機システム１に含まれるＳＶＰ５００が、一つの建物の複数の階に設置されている場合、新たに追加されたＳＶＰ５００のＳＶＰ状態テーブル２５００の設置階数２５０６と冗長再構成計算テーブル２６００の設置階数２６０５とを比較してもよい。この場合、設置階数２５０６と同じ又は最も近い設置階数２６０５を有する待機ＳＶＰを選択してもよい。このように、地理的に近い待機ＳＶＰを選択することで、ＳＶＰ自体の機器保守など直接ＳＶＰ機器を扱う作業が必要であるときに、作業者が冗長構成７００となる複数のＳＶＰ５００の間を移動する手間を省くことができる。
【０２６０】
ステップ１００４０において、該当する待機ＳＶＰがないと判定された場合について、説明する。図１４（ｂ）に示す計算機システム１に、さらにＳＶＰＧ（ＳＶＰ５００ｎ）を追加した場合を例にして説明する。
【０２６１】
管理者は、ＳＶＰＧ（ＳＶＰ５００ｎ）を追加するとき、ＳＶＰＥ（ＳＶＰ５００ｍ）の場合と同様、ＳＶＰフェイルバックプログラム１００００の実行前に、ＳＶＰ５００ｎを識別する識別子「ＳＶＰＧ」、第１のインターフェイスのアドレス「ＡｄｄｒＳＧ１」、第２のインターフェイスのアドレス「ＡｄｄｒＳＧ２」、状態「待機」及び再構成可否「可」を、ＳＶＰ状態テーブル２５００ｎ（図示省略）に設定する。
【０２６２】
ステップ１００１０において、ＳＶＰＧ（ＳＶＰ５００ｎ）の制御部５０６が、冗長再構成可否応答要求をブロードキャストする。
【０２６３】
ステップ１００２０において、待機ＳＶＰであるＳＶＰ５００ｂ（ＳＶＰＡ）、ＳＶＰ５００ｄ（ＳＶＰＢ）、ＳＶＰ５００ｆ（ＳＶＰＣ）、ＳＶＰ５００ｋ（ＳＶＰＤ）及びＳＶＰ５００ｍ（ＳＶＰＥ）から応答があったと仮定する。図１４（ｂ）に示すように、ＳＶＰＡは、稼動ＳＶＰ台数として１、ＤＫＣ台数として１を応答する。ＳＶＰＢは、稼動ＳＶＰ台数として１、ＤＫＣ台数として１を応答する。ＳＶＰＣは、稼動ＳＶＰ台数として２、ＤＫＣ台数として１を応答する。ＳＶＰＤは、稼動ＳＶＰ台数として１、ＤＫＣ台数として２を応答する。ＳＶＰＥは、稼動ＳＶＰ台数として１、ＤＫＣ台数として１を応答する。
【０２６４】
ステップ１００３０において、選択される待機ＳＶＰの条件である、稼動ＳＶＰが２台以上かつＤＫＣ台数が最も多い待機ＳＶＰが選択される。しかし、上記の例では稼動ＳＶＰが２台以上の待機ＳＶＰがない。このため、ステップ１００４０において、該当する待機ＳＶＰがないと判定され、処理が終了する。
【０２６５】
その結果、ＳＶＰＧ（ＳＶＰ５００ｎ）の冗長構成稼動ＳＶＰテーブル２３００ｎ及び稼動ＳＶＰ−ＤＫＣ管理テーブル２４００ｎにはエントリがないため、ＳＶＰＧ（ＳＶＰ５００ｎ）によって冗長化される稼動ＳＶＰはない。言い換えると、ＳＶＰＧ（ＳＶＰ５００ｎ）は、冗長構成７００を構成しない待機ＳＶＰとなる。このようなＳＶＰは、待機ＳＶＰのスペアである（以降、このような待機ＳＶＰを待機ＳＶＰスペアと呼ぶ）。図１４（ｃ）は、このような待機ＳＶＰスペアであるＳＶＰＧ（ＳＶＰ５００ｎ）を含む計算機システム１を示す図である。
【０２６６】
待機ＳＶＰスペアであるＳＶＰＧ（ＳＶＰ５００ｎ）は、冗長構成稼動ＳＶＰテーブル２３００ｎにエントリを含まない。このため、ＳＶＰＧ（ＳＶＰ５００ｎ）の制御部５０６は、冗長再構成可否応答要求を受けたとき、冗長再構成可否応答プログラム８０００を実行することによって、稼動ＳＶＰ数として０、ＤＫＣ数として０を応答する。
【０２６７】
稼動ＳＶＰ監視プログラム４０００及び待機ＳＶＰ監視プログラム６０００によれば、冗長再構成可否応答要求に対して、ＤＫＣ台数の最も小さい待機ＳＶＰが選択される。このため、稼動ＳＶＰ又は待機ＳＶＰに障害が発生し、冗長構成が再構成されるときに、優先的に待機ＳＶＰスペアが選択され、待機ＳＶＰスペアを含む冗長構成７００が再構成される。
【０２６８】
以上、本発明の一実施形態によれば、保守・管理装置は、別の保守・管理装置の異常を検出すると、冗長構成を再構成することによって、異常が発生した保守・管理装置によって発生するＳＰＯＦを回避する。
【０２６９】
具体的には、正の保守・管理装置に異常が発生すると、副の保守・管理装置は、正の保守・管理装置を交代（フェイルオーバー）するとともに、計算機システムに存在する別の副の保守・管理装置を用いて、冗長構成を再構成する。
【０２７０】
一方、副の保守・管理装置に異常が発生すると、正の保守・管理装置は、計算機システムに存在する別の副の保守・管理装置を用いて、冗長構成を再構成する。
【０２７１】
上記のように、正又は副の保守・管理装置の一方に異常が発生すると、ＳＰＯＦの発生を回避するため、別の副の保守・管理装置を含む冗長構成が再構成される。
【０２７２】
このため、本発明の一実施形態によれば、ストレージシステムを管理する装置に障害が発生し、待機の管理装置がフェイルオーバーした後も、管理者の手動による設定を要することなく、ＳＰＯＦ（Ｓｉｇｌｅ  Ｐｏｉｎｔ  Ｏｆ  Ｆａｉｌｕｒｅ）を回避することができる。このため、ストレージシステム管理の信頼性をより向上させることができる。
【図面の簡単な説明】
【０２７３】
【図１】本発明の実施の形態の計算機システムの構成を示すブロック図である。
【図２】本発明の実施の形態のＳＶＰの構成を示すブロック図である。
【図３】本発明の実施の形態のストレージシステムとＳＶＰとの関係を論理的に示す説明図である。
【図４】本発明の実施の形態の稼動ＳＶＰが保持するテーブルの説明図である。
【図５】本発明の実施の形態の待機ＳＶＰが保持するテーブルの説明図である。
【図６】本発明の実施の形態において実行される監視プログラムの処理を示すフローチャートである。
【図７】本発明の実施の形態において実行されるＤＫＣデータ取得プログラムの処理を示すフローチャートである。
【図８】本発明の実施の形態において実行される稼動ＳＶＰ監視プログラムの処理を示すフローチャートである。
【図９】本発明の実施の形態において実行される稼動ＳＶＰ監視プログラムの処理のうち、稼動ＳＶＰに障害が発生した場合に実行される処理を示すフローチャートである。
【図１０】本発明の実施の形態の冗長再構成計算テーブルの説明図である。
【図１１】本発明の実施の形態において冗長構成が再構成された後の待機ＳＶＰが保持するテーブルの説明図である。
【図１２】本発明の実施の形態の待機ＳＶＰ監視プログラムの処理を示すフローチャートである。
【図１３】本発明の実施の形態の冗長再構成可否応答プログラムの処理を示すフローチャートである。
【図１４】本発明の実施の形態のストレージシステムとＳＶＰとの関係を論理的に示す説明図である。
【図１５】本発明の実施の形態のＳＶＰフェイルバックプログラムの処理を示す説明図である。
【符号の説明】
【０２７４】
１  計算機システム
１００  ファイバーチャネルスイッチ
２００  計算機
４００  ストレージシステム
４１０  記憶装置
４２０  記憶制御装置
５００  ＳＶＰ
６００  管理計算機
７００  冗長構成
２１００  管理ＤＫＣテーブル
２２００  待機ＳＶＰテーブル
２３００  冗長構成稼動ＳＶＰテーブル
２４００  稼動ＳＶＰ−ＤＫＣ管理テーブル
２５００  ＳＶＰ状態テーブル
２６００  冗長再構成計算テーブル
３０００  監視プログラム
４０００  稼動ＳＶＰ監視プログラム
６０００  待機ＳＶＰ管理プログラム
８０００  冗長再構成可否応答プログラム
１００００  ＳＶＰフェイルバックプログラム
３００００  ＤＫＣデータ取得プログラム
５００００  ＤＫＣデータリポジトリ
【図１】
2008250421.tif 000003
【図２】
2008250421.tif 000004
【図３】
2008250421.tif 000005
【図４】
2008250421.tif 000006
【図５】
2008250421.tif 000007
【図６】
2008250421.tif 000008
【図７】
2008250421.tif 000009
【図８】
2008250421.tif 000010
【図９】
2008250421.tif 000011
【図１０】
2008250421.tif 000012
【図１１】
2008250421.tif 000013
【図１２】
2008250421.tif 000014
【図１３】
2008250421.tif 000015
【図１４】
2008250421.tif 000016
【図１５】
2008250421.tif 000017