特許第6782210号(P6782210)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特許6782210計算機システム、データ管理方法、及びデータ管理プログラム
<>
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000002
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000003
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000004
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000005
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000006
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000007
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000008
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000009
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000010
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000011
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000012
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000013
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000014
  • 特許6782210-計算機システム、データ管理方法、及びデータ管理プログラム 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6782210
(24)【登録日】2020年10月21日
(45)【発行日】2020年11月11日
(54)【発明の名称】計算機システム、データ管理方法、及びデータ管理プログラム
(51)【国際特許分類】
   G06F 3/06 20060101AFI20201102BHJP
   G06F 11/14 20060101ALI20201102BHJP
   G06F 16/11 20190101ALI20201102BHJP
【FI】
   G06F3/06 304B
   G06F3/06 301X
   G06F11/14 656
   G06F16/11
【請求項の数】11
【全頁数】24
(21)【出願番号】特願2017-168899(P2017-168899)
(22)【出願日】2017年9月1日
(65)【公開番号】特開2019-46180(P2019-46180A)
(43)【公開日】2019年3月22日
【審査請求日】2019年4月25日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000279
【氏名又は名称】特許業務法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】早坂 光雄
(72)【発明者】
【氏名】ジョーリ,アビシェク
【審査官】 松平 英
(56)【参考文献】
【文献】 米国特許出願公開第2016/0342490(US,A1)
【文献】 特開2008−033829(JP,A)
【文献】 特表2010−503089(JP,A)
【文献】 国際公開第2016/024994(WO,A1)
【文献】 特開2008−234030(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06−3/08
11/14
12/00
16/00−16/958
17/30
(57)【特許請求の範囲】
【請求項1】
データを記憶可能な複数のノードと、前記複数のノードを管理する管理計算機とを備える計算機システムであって、
第1ノードの第1ボリュームと、第2ノードの第2ボリュームとは、同一のデータを2重化して管理するHA(High Availability)ペアとして構成されており、
前記第1ノードを、オンラインに変更可能な状態でオフラインにし、
前記第2ノードのプロセッサ部は、前記第1ノードがオフラインとなった場合において、それ以降に前記第2ノードの前記第2ボリュームに対して書き込まれるライトデータを、前記第2ボリュームに書き込ませるとともに、前記第1ノード及び第2ノードとは異なる第3ノードの第3ボリュームに書き込ませ
前記第2ノードに障害が発生した場合に、前記第1ノードをオンラインに変更し、前記オフライン前に前記第1ノードに書き込まれたライトデータと、前記オフライン後に前記第3ノードに書き込まれたライトデータとを用いて、前記第2ノードに書き込まれたデータと同じデータを復元することを特徴とする
計算機システム。
【請求項2】
前記第2ノードのプロセッサ部は、前記第2ボリュームに対して書き込まれるライトデータをジャーナルログとして前記第3ボリュームに書き込ませる
請求項1に記載の計算機システム。
【請求項3】
前記管理計算機のプロセッサ部は、前記第1ノードがオフラインとなった場合以降における、前記ライトデータを書き込ませた前記第2ボリュームの1以上の領域を識別可能なビットマップを前記第2ノードと、前記第3ノードとに管理する
請求項1に記載の計算機システム。
【請求項4】
前記第2ノードのプロセッサ部は、前記第1ノードがオフラインとなった時点における、前記第2ボリュームの状態を示す第1スナップショットボリュームを前記第2ノードに生成するとともに、前記第3ノードに前記第1スナップショットボリュームに対応する第2スナップショットボリュームを前記第3ボリュームとして作成し、前記第2ボリュームに対するライトデータを、前記第2ボリュームにおける格納位置が特定可能なように前記第1スナップショットボリュームと、前記第2スナップショットボリュームとに書き込ませる
請求項1に記載の計算機システム。
【請求項5】
前記複数のノード又は前記管理計算機のいずれかのプロセッサ部は、
前記第1ノードがオンラインとなった場合において、前記第3ノードの前記第3ボリュームに書き込まれたライトデータに基づいて、前記第1ノードの前記第1ボリュームが、前記第2ノードの前記第2ボリュームと同一のデータとなるようにデータの書き込みを制御する
請求項1から請求項4のいずれか一項に記載の計算機システム。
【請求項6】
前記複数のノード又は前記管理計算機のいずれかのプロセッサ部は、
前記第1ノードがオフラインとなったことを検出した場合に、前記第1ノードの前記第1ボリュームと、前記第2ノードの前記第2ボリュームとのHAペアの状態を停止し、
前記第3ボリュームを作成する前記第3ノードを決定し、前記第3ノードに前記第3ボリュームを生成する
請求項1から請求項5のいずれか一項に記載の計算機システム。
【請求項7】
前記管理計算機のいずれかのプロセッサ部は、
オフラインの対象とする前記第1ノードの指定を受け付け、前記第1ノードの1以上のボリュームのうちのHAペアを構成している1以上の前記第1ボリュームを特定し、
前記1以上の前記第1ボリュームとHAペアとなっている1以上の前記第2ボリュームを特定し、
前記第3ボリュームを生成させる前記第3ノードを決定し、
前記第3ノードに前記第3ボリュームを生成させ、
前記第3ボリュームを生成させた以降において、前記第1ノードを停止させる要求を出力する
請求項1から請求項5のいずれか一項に記載の計算機システム。
【請求項8】
データを記憶可能な複数のノードと、前記複数のノードを管理する管理計算機とを備える計算機システムによるデータ管理方法であって、
第1ノードの第1ボリュームと、第2ノードの第2ボリュームとは、同一のデータを2重化して管理するHA(High Availabirity)ペアとして構成されており、
前記第1ノードを、オンラインに変更可能な状態でオフラインにし、
前記第1ノードがオフラインとなった場合において、それ以降に前記第2ノードの前記第2ボリュームに対して書き込まれるライトデータを、前記第2ボリュームに書き込ませるとともに、前記第1ノード及び第2ノードとは異なる第3ノードの第3ボリュームに書き込ませ
前記第2ノードに障害が発生した場合に、前記第1ノードをオンラインに変更し、前記オフライン前に前記第1ノードに書き込まれたライトデータと、前記オフライン後に前記第3ノードに書き込まれたライトデータとを用いて、前記第2ノードに書き込まれたデータと同じデータを復元することを特徴とする
データ管理方法。
【請求項9】
前記第1ノードがオンラインとなった場合において、前記第3ノードの前記第3ボリュームに書き込まれたライトデータに基づいて、前記第1ノードの前記第1ボリュームが、前記第2ノードの前記第2ボリュームと同一のデータとなるようにデータを書き込ませる
請求項8に記載のデータ管理方法。
【請求項10】
複数のノードに管理されているボリュームのデータを管理するためのコンピュータに実行させるためのデータ管理プログラムであって、
前記コンピュータを、
第1ノードの第1ボリュームと、第2ノードの第2ボリュームとが、同一のデータを2重化して管理するHA(High Availability)ペアとして構成されている場合に、
前記第1ノードを、オンラインに変更可能な状態でオフラインにさせ、
前記第1ノードがオフラインとなった場合において、それ以降に前記第2ノードの前記第2ボリュームに対して書き込まれるライトデータを、前記第2ボリュームに書き込ませるとともに、前記第1ノード及び第2ノードとは異なる第3ノードの第3ボリュームに書き込ませ、
前記第2ノードに障害が発生した場合に、前記第1ノードをオンラインに変更させ、前記オフライン前に前記第1ノードに書き込まれたライトデータと、前記オフライン後に前記第3ノードに書き込まれたライトデータとを用いて、前記第2ノードに書き込まれたデータと同じデータを復元させるように機能させる
データ管理プログラム。
【請求項11】
前記コンピュータを、
さらに、前記第1ノードがオンラインとなった場合において、前記第3ノードの前記第3ボリュームに書き込まれたライトデータに基づいて、前記第1ノードの前記第1ボリュームが、前記第2ノードの前記第2ボリュームと同一のデータとなるようにデータを書き込ませるように機能させる
請求項10に記載のデータ管理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データを管理する計算機システム等に関する。
【背景技術】
【0002】
複数の計算機(ノード)を、ストレージ機能を提供するソフトウェアを用いて連携することにより、ストレージシステムを構成するSDS(Software Defined Storege)が知られている。
【0003】
SDSに関する技術として、異なるノード間でデータの複製を行うことで、データ書き込み処理におけるノード間のデータの冗長化を行い、データ保護を行う手法が知られている(例えば、特許文献1,2,3参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許第8806161号明細書
【特許文献2】米国特許第8271447号明細書
【特許文献3】米国特許第6907543号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
SDSにおけるクライアントからのデータ書き込み処理は、データを冗長化することで、データ保護を行う。データの冗長化としては、ノード間でデータ転送を実施し、かつノード毎にデータを永続化してから、クライアントへ応答する。
【0006】
例えば、ソフトウェア・ハードウェアの更新・新規インストールなどのメンテナンス時には、一時的に一方のノードをシャットダウンさせる必要がある。
【0007】
一方のノードをシャットダウンさせた場合において、他方のノードへ新規書き込みが発生した場合には、他方のノードのみにデータが書き込まれることとなる。このような状態において、他方のノードに障害が発生した場合には、他方のノードのみに書き込まれたデータが消失してしまう、所謂データロスが発生してしまう。
【0008】
こうしたメンテナンス等によるデータの冗長性の低下を回避するために、メンテナンスを行う前に、メンテナンス対象のノードのデータを、他のノードに完全にコピーし、コピー先のノードを用いてデータの冗長化を実施することが行われている。
【0009】
しかしながら、メンテナンス対象のノードのデータを他のノードにコピーするようにすると、コピーが完了するまでに多くの時間とリソースとを費やしてしまうこととなる。この結果、ホスト計算機におけるI/Oの性能(ホストIOの性能)を低下させてしまう。特に、多くのノードによりクラスタを構成している場合においては、各ノードをメンテナンスする必要があるが、クラスタを稼動させつつ、1ノードずつメンテナンスする場合は、メンテナンス対象のノードのデータを他のノードにコピーすることを順次実行しなくてはならず、非常に多くの時間(例えば、数週間単位の時間)とリソースを費やしてしまうこととなる。
【0010】
本発明は、上記事情に鑑みなされたものであり、その目的は、データの冗長性を比較的容易に保持することのできる技術を提供することにある。
【課題を解決するための手段】
【0011】
上記目的を達成するため、一観点に係る計算機システムは、データを記憶可能な複数のノードと、複数のノードを管理する管理計算機とを備える計算機システムであって、第1ノードの第1ボリュームと、第2ノードの第2ボリュームとは、同一のデータを2重化して管理するHA(High Availability)ペアとして構成されており、第2ノードのプロセッサ部は、第1ノードがオフラインとなった場合において、それ以降に第2ノードの前記第2ボリュームに対して書き込まれるライトデータを、第2ボリュームに書き込ませるとともに、第1ノード及び第2ノードとは異なる第3ノードの第3ボリュームに書き込ませる。
【発明の効果】
【0012】
本発明によれば、データの冗長性を比較的容易に保持することができる。
【図面の簡単な説明】
【0013】
図1図1は、第1実施例に係る計算機システムの全体構成図である。
図2図2は、第1実施例に係る計算機システムにおけるノードを含む一部の構成図である。
図3図3は、第1実施例に係るペア管理テーブルの一例の構成図である。
図4図4は、第1実施例に係るジャーナルログの一例の構成図である。
図5図5は、第1実施例に係る管理計算機の構成図である。
図6図6は、第1実施例に係るホストコンピュータによるHAペアのボリュームへのアクセスを説明する図である。
図7図7は、第1実施例に係るノード停止に関わるデータ管理処理を説明する図である。
図8図8は、第1実施例に係る複数のHAペアと、それらに関する回復ボリュームを説明する図である。
図9図9は、第1実施例に係るノード計画停止処理のフローチャートである。
図10図10は、第1実施例に係るボリューム回復処理のフローチャートである。
図11図11は、第1実施例に係るホストライトIO処理のフローチャートである。
図12図12は、第1実施例に係るネットワーク障害発生時処理のフローチャートである。
図13図13は、第2実施例に係るデータ管理処理を説明する図である。
図14図14は、第3実施例に係るデータ管理処理を説明する図である。
【発明を実施するための形態】
【0014】
いくつかの実施例について、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0015】
以下の説明では、「AAAテーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「AAAテーブル」を「AAA情報」と呼ぶことができる。
【0016】
また、以下の説明では、「プロセッサ部」は、1以上のプロセッサを含む。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサである。1以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【0017】
また、以下の説明では、「プログラム」を動作主体として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU)によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インタフェースデバイス(例えばポート)を用いながら行うため、処理の主体がプログラムとされてもよい。プログラムを動作主体として説明された処理は、プロセッサ或いはそのプロセッサを有する計算機(例えば、管理計算機、ホスト計算機等)が行う処理としてもよい。
【0018】
また、プロセッサが行う処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。プロセッサが実行するプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア(例えば可搬型の記憶メディア)であってもよい。
【0019】
また、以下の説明では、「RAID」は、Redundant Array of Independent (or Inexpensive) Disksの略である。RAIDグループは、複数の物理デバイス(典型的には同種の物理デバイス)で構成され、そのRAIDグループに関連付けられたRAIDレベルに従いデータを記憶する。RAIDグループは、パリティグループと呼ばれてもよい。パリティグループは、例えば、パリティを格納するRAIDグループのことでよい。
【0020】
また、以下の説明では、要素の識別情報として、IDが使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたIDを使用することがある。また、以下の説明では、IO(Input/Output)要求は、ライト要求又はリード要求であり、アクセス要求と呼ばれてもよい。
【実施例1】
【0021】
まず、第1実施例について説明する。
【0022】
図1は、第1実施例に係る計算機システムの全体構成図である。
【0023】
計算機システム10は、1以上のホストコンピュータ(以下、ホストという)400と、管理計算機410と、複数のノード(計算機)100(100a、100b、100c等)とを備える。なお、計算機システム10に含まれる複数のノード群をストレージクラスタという。
【0024】
各ノード100は、SAN(Storage Area Network)300や、LAN(Local Area Network)310、バックエンドSAN320等で接続されている。また、ホスト400、管理計算機410、及びノード100は、SAN300やLAN310によって接続されている。このような構成により、ノード100間や、ノード100とホスト400との間、ノード100と管理計算機410との間で、制御情報やデータ等が送信される。
【0025】
次に、ノード100について詳細に説明する。
【0026】
図2は、第1実施例に係る計算機システムにおけるノードを含む一部の構成図である。
【0027】
ノード100は、ネットワークインタフェース110、プロセッサ部の一例としてのCPU120、メモリコントローラ130、ディスクコントローラ140、ストレージデバイス150、外部ストレージインタフェース160、入出力インタフェース170、内部ネットワークバス180、及びメモリ200を備える。ノード100は、各構成110、120、130、140、150、160、170、180、200のいずれか1つ以上を複数備えるようにしてもよい。なお、以下の説明においては、説明容易にするために、各構成が1つずつ存在している場合を例にする。
【0028】
ネットワークインタフェース110は、ノード100を、ホスト400、管理計算機410等の他の計算機とネットワーク111を介して通信可能に接続するためのインタフェースである。ノード100は、ネットワークインタフェース110を用いて、データや制御情報を、他の計算機とやり取りする。ネットワーク111は、例えば、SAN300、LAN310、インターネットでもよく、専用線でも、公衆回線でもよい。
【0029】
CPU120は、1以上のコアから構成されるプロセッサである。CPU120は、ある決まったタスクを高速かつ効率よく処理するために、GPU(Graphics Processing Unit)やASIC(Application Specific Integrated Circuit)であってもよい。CPU120は、メモリ200に格納された各種プログラムを実行することにより、各種処理を実行する。
【0030】
メモリコントローラ130は、CPU120からの指示に従って、メモリ200からのデータ読み取り、または、メモリ200へのデータの書き込みを行う。
【0031】
ディスクコントローラ140は、CPU120からの指示に従って、ストレージデバイス150からのデータ読み取り、または、ストレージデバイス150へのデータの書き込みを行う。
【0032】
ストレージデバイス150は、HDD(Hard Disk Drive)やSSD(Solid State Drive)等のデータを記憶するためのデバイスである。ストレージデバイス150は、ユーザデータ、OS、アプリケーションプログラム、アプリケーションデータ、ディスク管理用メタデータ、ノード100を運用するために必要なデータ等を格納する。ストレージデバイス150は、例えば、複数の物理ディスクを使用して設定された論理デバイスでもよく、RAIDによりデータ保護されていてもよい。ストレージデバイス150には、例えば、ホスト400から参照可能なボリュームが格納される。
【0033】
外部ストレージインタフェース160は、ノード100に接続された、1以上の外部ストレージシステム191、ストレージデバイス192等の外部ストレージとの間でのデータ転送を行う。ストレージデバイス192は、ストレージデバイス150と同様な構成としてもよい。ストレージデバイス192は、接続されているノード100で管理するボリュームを格納するようにしてもよい。なお、ストレージデバイス192に格納されているボリュームについても、ノード100に格納されているボリュームということができる。
【0034】
入出力インタフェース170は、ノード100に接続された入出力デバイス194との間の通信を行う。
【0035】
内部ネットワークバス180は、ノード100の各要素(110,120,130,140,160,170,200)を通信可能に接続する。
【0036】
メモリ200は、例えば、1以上のDRAM(Dynamic Random Access Memory)等により構成される。メモリ200は、各種情報を記憶する。メモリ200は、CPU120による処理中のデータや将来的に使用する可能性のあるデータを一時的に格納するキャッシュメモリ210を含んでもよい。キャッシュメモリ210は、データブロック管理のためのメタデータを一時的に格納してもよいし、OSやアプリケーションプログラムの処理に必要になる情報、CPU間の通信に必要な制御情報を格納してもよい。
【0037】
本実施例では、メモリ200は、ノードのペア情報を管理する制御情報であるペア管理テーブル220を格納する。また、メモリ200は、CPU120が実行するプログラムを格納する。本実施例では、メモリ200は、データ書き込みプログラム740、回復ボリューム作成プログラム780、再同期プログラム800、その他の必要なプログラムを格納する。
【0038】
ノード100は、汎用的または専用的な目的で使用される計算機又はシステムであり、例えば、ブロックデータストレージシステム、ファイルデータストレージシステム、オブジェクトデータストレージシステム、ユニファイドストレージシステムなどになり得る。
【0039】
次に、ペア管理テーブル220について詳細に説明する。
【0040】
図3は、第1実施例に係るペア管理テーブルの一例の構成図である。
【0041】
ペア管理テーブル220は、ノード100によって管理されている各ボリュームについてのペアに関する設定情報と、そのペアの状態とを格納する。ペア管理テーブル220は、ボリューム毎に対応するエントリーを格納する。ペア管理テーブル220のエントリーは、ボリュームID221と、HA(High Availability)ペア状態222と、HAペアボリューム情報223と、回復ペア状態224と、回復ペアボリューム情報225とのフィールドを含む。
【0042】
ボリュームID221には、エントリーに対応するボリュームの識別情報(ボリュームID)が格納される。HAペア状態222には、エントリーに対応するボリュームのHAペアの状態(HAペア状態)が格納される。ここで、HAペアとは、一方のボリュームのノードが停止した場合に、他方のボリュームのノードが引き続きデータを提供できるようにする関係を確保する対象とするボリュームのペアのことをいう。また、HAペア状態としては、HAペアとなるボリューム間で引き続きデータを提供できる状態(すなわち、データが同期している状態)を示す「PAIR」(ペア)と、HAペアの一方が一時的にオフラインとなっている状態を示す「一時的にオフライン」等がある。HAペアボリューム情報222には、エントリーに対応するボリュームとHAペアを組むボリューム(HAペアボリューム)の識別情報(ID)が格納される。
【0043】
回復ペア状態224には、エントリーに対応するボリュームと、このボリュームとHAペアにあるボリュームを回復させるために利用される回復ボリュームとを含む回復ペアの状態(回復ペア状態)が格納される。ここで、回復ペアとは、エントリーに対応するボリュームと、回復ボリュームとのペアのことをいう。また、回復ペア状態としては、回復ペアとなるボリューム間でデータが同期している状態を示す「PAIR」等がある。回復ペアボリューム情報225には、エントリーに対応するボリュームと回復ペアを組む回復ボリュームの識別情報(ID)が格納される。
【0044】
次に、ボリュームを回復させるための回復ボリュームに対して格納させるジャーナルログ600について詳細に説明する。
【0045】
図4は、第1実施例に係るジャーナルログの一例の構成図である。
【0046】
ジャーナルログ600は、固定長のヘッダ610と、可変長のボディ620とを含む。ヘッダ610は、ジャーナルログサイズ611と、エントリー数612とのフィールドを有する。ジャーナルログサイズ611には、ジャーナルログ600の全体のサイズが格納される。エントリー数612には、ボディ620に含まれる後述するエントリー621の総数が格納される。
【0047】
ボディ620は、1以上のエントリー621(621a,621b・・・)を有する。エントリー621は、LBA622と、オフセット623と、サイズ624と、データ625とのフィールドを有する。LBA622には、更新データ(ライトデータ)を格納したボリューム内の論理ブロックアドレス(LBA)が格納される。オフセット623には、LBAにおける更新した場所を示す情報(例えば、先頭からのバイト数)が格納される。サイズ624には、更新データのサイズが格納される。データ625には、更新データが格納される。データ625は、可変長のフィールドである。
【0048】
次に、管理計算機410について詳細に説明する。
【0049】
図5は、第1実施例に係る管理計算機の構成図である。
【0050】
管理計算機410は、ネットワークインタフェース411、プロセッサ部の一例としてのCPU412、メモリコントローラ413、ディスクコントローラ414、ストレージデバイス415、メモリ416、入出力インタフェース417、及び内部ネットワークバス418を備える。
【0051】
ネットワークインタフェース411は、管理計算機410を、ホスト400、ノード100等の他の計算機と通信可能に接続するためのインタフェースである。
【0052】
CPU412は、1以上のコアから構成されるプロセッサである。CPU412は、メモリ416に格納された各種プログラムを実行することにより、各種処理を実行する。
【0053】
メモリコントローラ413は、CPU412からの指示に従って、メモリ413からのデータ読み取り、または、メモリ413へのデータの書き込みを行う。
【0054】
ディスクコントローラ414は、CPU412からの指示に従って、ストレージデバイス415からのデータ読み取り、または、ストレージデバイス415へのデータの書き込みを行う。
【0055】
ストレージデバイス415は、HDDやSSD等のデータを記憶するためのデバイスである。ストレージデバイス415は、OS、アプリケーションプログラム、アプリケーションデータ、その他のデータ等を格納する。
【0056】
入出力インタフェース417は、管理計算機410に接続された入出力デバイス419との間の通信を行う。
【0057】
内部ネットワークバス418は、管理計算機410の各要素(411,412,413,414,416,417)を通信可能に接続する。
【0058】
メモリ416は、例えば、1以上のDRAM等により構成される。メモリ416は、各種情報を記憶する。メモリ416は、計画停止プログラム700、データ再同期プログラム720、その他の必要なプログラムを格納する。
【0059】
次に、ホスト400について詳細に説明する。
【0060】
図6は、第1実施例に係るホストコンピュータによるHAペアのボリュームへのアクセスを説明する図である。
【0061】
ホスト400は、例えば、CPU、メモリ等を備えた一般的な計算機であり、Microsoft Windows(登録商標)や、Linux(登録商標)等のOS(Operating system)401や、マルチパスソフトウェア402をメモリに格納して実行する。
【0062】
ホスト400は、例えば、図6(a)に示すように、ノード100aのボリューム155aに対して、SAN300を経由するパス301aにより接続されており、また、ノード100bのボリューム155bに対して、SAN300を経由するパス301bにより接続されている。
【0063】
ここで、ノード100aのボリューム155aと、ノード100bのボリューム155bとが、HAペアとして設定されている場合には、ノード100aと、ノード100bとは、ホスト400のマルチパスソフトウェア402に対して、ボリューム155aとボリューム155bとのそれぞれについて、同じボリュームIDを返す。この場合には、マルチパスソフトウェア402は、パス301aと、パス301bとに接続されているボリュームに対して同じボリュームIDを利用できること判定し、図6(b)に示すように、パス301aと、パス301bとの2つのパスに仮想ノード100kが接続され、その仮想ノード100k内に仮想ボリューム155kがあると想定する。
【0064】
このようにHAペアが設定されている場合には、マルチパスソフトウェア402は、仮想ボリューム155kにアクセスする際に、パス301a又は、パス301bを利用する。なお、ノード100aのボリューム155aと、ノード100bのボリューム155bとをHAペアと設定している場合には、いずれのボリュームがPVOL(Primary Volume)であるかをノード間で統一できていない問題、所謂スプリットブレイン問題が発生する可能性がある。これに対しては、いずれのボリュームがPVOLであるか等を管理する所謂クォーラムディスクを、HAペアのボリュームを管理するノード100a、100bと異なるノード100に設けるようにしてもよい。
【0065】
次に、ノード停止に関わるデータ管理処理について説明する。
【0066】
図7は、第1実施例に係るノード停止に関わるデータ管理処理を説明する図である。
【0067】
ここで、計算機システム10は、図7(a)に示すような初期状態にあるものとする。具体的には、計算機システム10には、ノード100a、ノード100b、及びノード100cがあり、ノード100aには、ボリューム155aが管理され、ノード100bには、ボリューム155bが管理され、ボリューム155aと、ボリューム155bとが、HAペアとして構成されているものとする。なお、ノード100cを、ボリューム155aと、ボリューム155bとのHAペアのクォーラムディスクを保持するノードとして使用してもよい。
【0068】
図7(a)に示す状態においては、ホスト400は、IO要求をボリューム155a又はボリューム155bに送ることができる。ホスト400からいずれかのボリュームに対するライト要求があった場合には、ライト要求の対象のライトデータは、ボリューム155aと155bとの間で同期され、結果として、ボリューム155aと155bとに冗長化(2重化)されて保持されることとなる。一方、ホスト400からいずれかのボリュームに対するリード要求があった場合には、リード要求を受信したノードが自身のボリュームからリード対象のデータを読み出して、ホスト400に送信することとなる。
【0069】
ここで、ノード100a(第1ノード)を計画停止するときには、図7(b)に示すように、管理計算機410の計画停止プログラム700は、HAペアであるボリューム155aと155bとを格納しているノード100a及びノード100b(第2ノード)以外のノード100c(第3ノード)に、ノード100aの動作を再開した場合にボリューム155aを回復するための回復ボリューム156a(ここでは、ジャーナルログ600を格納するジャーナルボリューム)を作成し、ボリューム155bと、回復ボリューム156aとにより、回復ペアを作成する。この場合において、ノード100bのボリューム155bに対するホスト400からのライト要求(ホストライトIO)のライトデータは、ボリューム155bと回復ボリューム156aとにより、二重化される。
【0070】
図7(b)に示す状態において、ノード100bに障害が発生した場合には、図7(c)に示すように、ホスト400からノード100bのボリューム155bに対してアクセスすることができなくなる。
【0071】
図7(c)に示す状態となった場合には、ノード100aの停止を解除した後に、図7(d)に示すように、管理計算機410のデータ再同期プログラム720は、ノード100cの回復ボリューム156aに格納されたジャーナルログ600を用いて、ボリューム155aを最新のデータを保持した状態に回復させる。
【0072】
具体的には、管理計算機410のデータ再同期プログラム720は、ホスト400からのIOを一時的に止めた状態で、ノード100aのボリューム155aと回復ボリューム156aとを再同期ペアに設定する。これにより、ノード100cの再同期プログラム800が、回復ボリューム156aに格納された全てのジャーナルログ600を読み、各ジャーナルログ600の各エントリー621のデータを、ボリューム155aにおけるエントリー621のLBA622が示す論理ブロックに対して、オフセット623が示すアドレスをオフセットとして書き出す。これにより、ノード100aのボリューム155aは、最新のデータを保持した状態となる。
【0073】
この後、管理計算機410のデータ再同期プログラム720が、ノード100aのボリューム155aに対するホスト400からのIOを再開すると、図7(e)に示すように、ホスト400は、最新のデータを保持しているボリューム155aに対してIOを行うことができるようになる。なお、ボリューム155aを最新のデータに回復させた後においては、回復ボリューム156aのジャーナルログ600の全てのエントリーを削除するようにしてもよい。
【0074】
次に、計算機システム10が3つのノード100(100a、100b、100c)を備え、これらノード100により管理されている複数のボリュームに対して、複数のHAペアを構成している場合における回復ボリュームの作成方法について説明する。
【0075】
図8は、第1実施例に係る複数のHAペアと、それらに関する回復ボリュームを説明する図である。
【0076】
ここで、計算機システム10は、図8(a)に示すような初期状態にあるものとする。具体的には、計算機システム10には、ノード100a、ノード100b、及びノード100cがあり、ノード100aには、ボリューム155a,155cが保持され、ノード100bには、ボリューム155b,155eが保持され、ノード100cには、ボリューム155d,155fが保持されているものとする。また、ノード100aのボリューム155aと、ノード100bのボリューム155bとが、HAペア(第1HAペア)として構成され、ノード100aのボリューム155cと、ノード100cのボリューム155dとが、HAペア(第2HAペア)として構成され、ノード100bのボリューム155eと、ノード100cのボリューム155fとが、HAペア(第3HAペア)として構成されているものとする。
【0077】
図8(a)に示す状態において、ノード100aを停止させる場合には、計算機システム10は、図8(b)に示すような構成とする。
【0078】
ノード100aを停止させると、第1HAペアと、第2HAペアについては、そのHAペアの一方のボリュームが使用できない状態となる。この場合においては、計算機システム10では、第1HAペアに対しては、ノード100cに回復ボリューム156aが作成され、ボリューム155bに対するライト要求のジャーナルログ600が、回復ボリューム156aに格納されることとなる。また、第2HAペアに対しては、ノード100bに回復ボリューム156bが作成され、ボリューム155dに対するライト要求のジャーナルログ600が、回復ボリューム156bに格納されることとなる。
【0079】
一方、第3HAペアについては、そのHAペアの両方のボリュームがノード100aに存在しないので、そのまま利用することができる。なお、第3HAペアに関するクォーラムディスクをノード100aに作成している場合においては、ノード100aが停止してしまうとクォーラムディスクを利用することができなくなる。この場合においては、スプリットブレイン問題を回避するために、管理計算機410の計画停止プログラム700は、HAペアのいずれか一方のボリュームへのホスト400からのIOを停止させて、ホストからのIOを受け付けるボリュームを1つとし、このボリュームを保持するノードが、このボリュームに対するライトデータを、他のボリュームへ同期コピーするようにしてもよい。図8(b)に示す例では、管理計算機410は、ボリューム155fに対するホスト400からのIOを停止し、ノード100bがボリューム155eに対するホスト400からのライトデータをボリューム155fへも書き込むことにより、データを二重化する。
【0080】
次に、計算機システム10における処理動作について説明する。
【0081】
図9は、第1実施例に係るノード計画停止処理のフローチャートである。
【0082】
ノード計画停止処理は、管理計算機410において、CPU412がメモリ416の計画停止プログラム700を実行することにより実現される処理である。
【0083】
管理計算機410の計画停止プログラム700は、入力デバイス419を介して管理者から計画停止するノード(第1ノード)を指定した計画停止の要求(ノード計画停止要求)を受け付ける(ステップS701)。
【0084】
次いで、計画停止プログラム700は、計画停止の対象となるノードが保持するボリュームであって、データ冗長度の維持が必要なボリュームを決定する(ステップS702)。具体的には、計画停止プログラム700は、停止対象の対象となるノード100に対して、そのノードが保持するボリュームとHAペアを構成している全てのボリュームのボリューム情報の要求を送信する。これに対して、ボリューム情報の要求を受けたノード100は、ペア管理テーブル220を参照し、HAペア状態222がPAIRであるエントリーのボリュームID221のボリュームIDと、HAペアボリューム情報223に格納されているボリューム情報とを特定し、そのボリュームIDと、ボリューム情報とを管理計算機410の計画停止プログラム700に送信する。この後、計画停止プログラム700は、取得したボリュームIDと、ボリューム情報とに基づいて、データ冗長度の維持が必要なボリュームを決定する。
【0085】
なお、管理者がHAペアを構成するボリュームのボリュームIDを指定することにより、回復ボリュームを作成する対象のボリュームを決定するようにしてもよい。また、管理計算機410において、ストレージクラスタを構成する複数のノード100がそれぞれ保持する最新のペア管理テーブル220の情報を予め取得しておき、計画停止プログラム700は、予め取得している情報に基づいてデータ冗長度の維持が必要なボリュームを決定するようにしてもよい。このようにすると、ノード計画停止処理時において、計画停止対象のノード100に対して、ボリューム情報を問い合わせる処理を省略することができる。
【0086】
次いで、計画停止プログラム700は、予め記憶しているストレージクラスタを構成しているノード100の情報を参照して、計画停止の対象のノード100のボリュームを回復するための回復ボリューム155を作成するノード100(第3ノード)を選択する(ステップS703)。
【0087】
計画停止プログラム700は、以下の2つの条件を満たすノード100を、回復ボリュームを作成するノード(第3ノード)として選択する。
条件1:ノードは、すぐに停止されるノードであってはいけない。
条件2:ノードは、計画停止対象のノードがオフラインの間、データ冗長度の維持が必要なボリュームに関するジャーナルログを格納できるだけの十分な空き容量を持つノードでなくてはならない。
【0088】
計画停止プログラム700は、計画停止対象のノード100内のデータの冗長性が必要な各ボリュームに対して、回復ボリュームを作成するノード100を選択する。回復ボリュームを作成するノード100として、冗長性が必要な各ボリュームとHAペアを構成するボリュームを保持するノード(第2ノード)と異なるノードが選択される。
【0089】
次いで、計画停止プログラム700は、選択されたノード100へ回復ボリュームの作成を指示する要求(回復ボリューム作成要求)を送る(ステップS704)。回復ボリューム作成要求を受けたノード100は、回復ボリュームを作成する。
【0090】
次いで、計画停止プログラム700は、データ冗長度の維持が必要なボリュームとHAペアを構成するボリュームを保持するノード100と、回復ボリュームを作成させたノード100とに対して、これらボリューム間で回復ボリュームペアを組むように指示する要求(回復ボリュームペア要求)を送る(ステップS705)。回復ボリュームペア要求を受信したそれぞれのノード100は、回復ボリュームペア要求に対応するボリューム情報を、各ノード100が持つペア管理テーブル220の要求に対応するエントリーの回復ペアボリューム情報225に格納する。
【0091】
次いで、計画停止プログラム700は、計画停止対象のノード100と、計画停止対象のノード100のボリュームとHAペアを構成するボリュームを保持するノード100に対して、これらのボリュームのHAペアを停止する要求を送信し、計画停止対象のノード100には、HAペアを構成するボリュームをオフラインにする要求を送信する(ステップS706)。
【0092】
この結果、計画停止対象のノード100は、自身のキューに格納されている処理中のIO要求をすべて処理し、対象のボリュームをオフラインとし、ペア管理テーブル220のそのボリュームに対応するエントリーのHAペア状態222を一時的にオフラインに設定する。一方、計画停止対象のノード100のボリュームとHAペアを構成するボリュームを保持するノード100は、ペア管理テーブル220のそのボリュームに対応するエントリーのHAペア状態222を一時的にオフラインに設定する。
【0093】
次いで、計画停止プログラム700は、計画停止対象のノード100に対して、停止要求を送る(ステップS707)。停止要求を受けたノード100は、自身の動作を停止し、オフライン状態にする。
【0094】
以上説明したように、上記したノード計画停止処理によると、データの冗長性が必要な各ボリュームに対応する回復ボリュームを作成でき、その回復ボリュームに対して、データの冗長性が必要な各ボリュームに反映させるべきジャーナルログを格納できるようになる。また、データの冗長性が必要な各ボリュームの全体を他のノードにコピーする必要が無いので、処理時間を低減することができると共に、必要となるリソースを低減することができ、比較的容易にデータの冗長性を保持することができる。
【0095】
次に、一旦停止させたノード100のボリュームを最新のデータに回復させるためのボリューム回復処理について説明する。
【0096】
図10は、第1実施例に係るボリューム回復処理のフローチャートである。
【0097】
ボリューム回復処理は、管理計算機410において、CPU412がメモリ416のデータ再同期プログラム720を実行することにより実現される処理である。ボリューム回復処理は、例えば、或るノード100の計画停止中に、アクティブとなっているボリュームに障害が発生した場合や、ノード100の計画停止が終了した場合等に実行される。
【0098】
管理計算機410のデータ再同期プログラム720は、計画停止されているノード100に対して、データの冗長性が必要であり、回復対象となるボリューム(回復対象ボリューム)がホスト400からのIO要求を受け付けない状態でオンにする要求を送信する(ステップS721)。この要求を受け取ると、計画停止されているノード100は、IO要求を受け付けない状態でのオン状態となる。
【0099】
次いで、データ再同期プログラム720は、オン状態となったノード100(再開ノード)に対して、回復対象ボリュームと、回復対象ボリュームに対応する回復ボリュームとを再同期ペアとする要求(再同期ペア要求)を送る。再同期ペア要求を受け取った再開ノードは、回復ボリュームを保持するノード100へ再同期ペア要求を送るとともに、ペア管理テーブル220の回復対象ボリュームに対応するエントリーの回復ペア状態224に再同期を設定する(ステップS722)。
【0100】
次いで、データ再同期プログラム720は、再開ノードへ再同期プログラム800の実行を開始する要求(実行開始要求)を送る(ステップS723)。実行開始要求を受け取った再開ノードは、再同期プログラム800の実行を開始する。再同期プログラム800は、回復対象ボリュームを、回復ボリュームが保持する最新のデータで更新する。これにより、回復対象ボリュームを最新の状態に回復させることができる。
【0101】
次いで、データ再同期プログラム720は、回復対象ボリュームの再同期(最新の状態となること)が完了するまで待つ(ステップS724)。なお、再開ノードからの再同期に関する完了の応答を非同期で待ってもよく、その間、別の回復対象ボリュームに対する処理を実行してもよい。
【0102】
回復対象ボリュームの再同期が完了した後に、データ再同期プログラム720は、再開ノードへ回復対象ボリュームのホスト400からのIOの受付を許可するようにする要求(IO受付許可要求)を送る(ステップS725)。IO受付許可要求を受け取ると、再開ノードは、回復対象ボリュームを、ホスト400からのIOを受け付け可能な状態とする。この結果、ホスト400は、パス再スキャンを実行することにより、再開ノードの回復対象ボリュームが利用可能になったことを発見することができ、回復対象ボリュームに対するIO要求を発行できるようになる。
【0103】
次いで、データ再同期プログラム720は、回復ボリュームを保持するノード100に対して回復ボリュームを削除する要求(回復ボリューム削除要求)を送る。この結果、回復ボリュームを保持するノード100では、回復ボリュームを削除することができ、使用可能な記憶容量を増加させることができる。なお、回復ボリュームを削除せずに、この回復ボリュームを、他のノード100を計画停止させる際の回復ボリュームとして利用するようにしてもよい。
【0104】
以上説明したように、上記したボリューム回復処理によると、再開ノードのボリュームを最新のデータに回復させて、ホスト400から利用できるようにすることができる。
【0105】
次に、ノード100におけるホスト400からの書き込み要求(ライト要求)があった場合のホストライトIO処理について説明する。
【0106】
図11は、第1実施例に係るホストライトIO処理のフローチャートである。
【0107】
ホストライトIO処理は、ノード100において、CPU120がメモリ200のデータ書き込みプログラム740を実行することにより実現される処理である。
【0108】
データ書き込みプログラム740は、ホスト400からライト要求と、ライト要求の対象のデータ(ライトデータ)を受信すると(ステップS741)、ライト要求の要求先のボリュームがPVOLであるかSVOL(Secondary Volume)であるかを判定する(ステップS742)。
【0109】
この結果、要求先のボリュームがSVOLである場合(ステップS742:SVOL)には、データ書き込みプログラム740は、ライト要求先のボリュームとHAペアを構成するPVOLであるボリュームを保持するノード100に対して、受信したライト要求と、ライトデータとを転送し(ステップS743)、処理をステップS741に進める。
【0110】
一方、要求先のボリュームがPVOLである場合(ステップS742:PVOL)には、データ書き込みプログラム740は、ライトデータを、要求先のボリュームに書き込む(ステップS744)。
【0111】
次いで、データ書き込みプログラム740は、ペア管理テーブル220の要求先のボリュームに対応するエントリーを参照し、そのエントリーのHAペア状態222に設定されているHAペア状態を確認する(ステップS745)。
【0112】
この結果、HAペア状態がペアである場合(ステップS745:ペア)には、データ書き込みプログラム740は、そのエントリーにおけるHAペアボリューム情報223からHAペアとなっているボリューム(HAペアボリューム)を特定し、このボリュームを保持するノードに対して、当該ボリュームへの書き込み要求と、ライトデータを送信し(ステップS746)、この要求に対する確認応答(ACK)を受信した後(ステップS747)、処理をステップS748に進める。これにより、HAペアを構成するボリュームのペアに同一データを格納させることができる、すなわち、データを冗長化することができる。
【0113】
一方、HAペア状態がペア以外である場合(ステップS745:ペア以外)には、データ書き込みプログラム740は、処理をステップS748に進める。
【0114】
ステップS748では、データ書き込みプログラム740は、ペア管理テーブル220の要求先のボリュームに対応するエントリーの回復ペア状態224に格納されている回復ペア状態を確認する。
【0115】
この結果、回復ペア状態がペアである場合(ステップS748:ペア)には、データ書き込みプログラム740は、そのエントリーにおける回復ペアボリューム情報225から回復ペアとなっているボリューム(回復ボリューム)を特定し、この回復ボリュームを保持するノードに対して、当該回復ボリュームへの書き込み要求と、ライトデータを送信する(ステップS749)。この要求を受け取ったノードでは、そのノードのデータ書き込みプログラム740が、書き込み要求に対応する内容(書き込み先のLBA、オフセット、データサイズ、データ等)をジャーナルログ600に追加し、要求に対する確認応答(ACK)を返すこととなる。要求を送信したノード100では、確認応答を受信した後(ステップS750)、処理をステップS751に進める。これにより、回復ペアを構成する回復ボリュームにライトデータを格納させることができる、すなわち、ライトデータを冗長化することができる。
【0116】
一方、回復ペア状態がペア以外である場合(ステップS748:ペア以外)には、データ書き込みプログラム740は、処理をステップS751に進める。
【0117】
ステップS751では、データ書き込みプログラム740は、ホスト400からのライト要求が完了したことをホスト400へ応答する。
【0118】
次に、HAペアを構成するボリュームを保持するノード100との間でネットワーク障害が発生した場合におけるネットワーク障害発生時処理を説明する。なお、本例では、ネットワーク障害には、ノード100との間のネットワーク自体に障害が発生していて通信できない状態だけでなく、ノード100自体に障害が発生していて通信ができない状態を含んでいる。
【0119】
図12は、第1実施例に係るネットワーク障害発生時処理のフローチャートである。
【0120】
ネットワーク障害発生時処理は、ノード100において、CPU120がメモリ200の回復ボリューム作成プログラム780を実行することにより実現される処理である。
【0121】
回復ボリューム作成プログラム780は、ペア管理テーブル220を参照し、自身のノード100で保持するボリュームとHAペアを構成するボリュームを保持するノードの中で、通信不可となっているノード100を検出する(ステップS781)と、自身のボリュームに対するホスト400からのIO要求に基づくIO処理を停止する(ステップS782)。
【0122】
次いで、回復ボリューム作成プログラム780は、HAペアの状態を停止し、ペア管理テーブル220のこのボリュームに対応するエントリーのHAペア状態222に停止を設定する(ステップS783)。
【0123】
次いで、回復ボリューム作成プログラム780は、通信不可となっているノードのHAペアを構成するボリュームを回復するための回復ボリュームを作成するノードを選択する(ステップS784)。
【0124】
本実施形態では、この回復ボリュームを作成するノードは、以下のいずれか1つの処理によって決定している。
処理1 計算機システム10における全てのオンラインであるノードと通信し、最大の空き容量を持つノードを選択する。
処理2 計算機システム10における全てのオンラインであるノードと通信し、十分な空き容量を持ち、かつ、IOワークロードが最も低いノードを選択する。
処理3 管理計算機410と通信し、管理計算機410による処理1又は処理2の実行により得られた結果に対応するノードを選択する。
【0125】
以下、選択されたノード100を回復用ノードという。
【0126】
次いで、回復ボリューム作成プログラム780は、回復用ノードに対して、回復ボリュームを作成する要求(回復ボリューム作成要求)を送信する(ステップS785)。回復ボリューム作成要求を受信した回復用ノードでは、回復ボリュームを作成することとなる。
【0127】
次いで、回復ボリューム作成プログラム780は、自身のボリュームと、作成された回復ボリュームとにより回復ペアを作成し、この回復ペアの情報を、ペア管理テーブル220のボリュームに対応するエントリーの回復ペアボリューム情報225に格納する(ステップS786)。なお、回復用ノードも、ペア管理テーブル220の回復ボリュームに対応するエントリーの回復ペアボリューム情報225に、回復ペアの情報を格納する。これにより、これ以降において、HAペアのうちのアクティブなボリュームに対してライトデータが書き込まれた場合に、そのライトデータが適切に回復ボリュームに格納されるようになる。
【0128】
次いで、回復ボリューム作成プログラム780は、ホスト400からのIO処理を停止しているボリュームに対するIO処理を再開する(ステップS787)。これにより、このノード100では、図11に示すホストライトIO処理が実行されることとなる。
【0129】
これにより、HAペアを構成するボリュームを保持するノード100との間でネットワーク障害が発生した場合において、その後においてボリュームに書き込まれるライトデータを適切に冗長化して格納することができる。
【実施例2】
【0130】
次に、第2実施例について説明する。
【0131】
第2実施例は、第1実施例とは、以下の点が異なっている。第1実施例では、回復ボリュームに対して、ジャーナルログ600を格納することにより、ライトデータと、ボリュームにおけるライトデータの格納先とを特定可能にしていたが、第2実施例では、回復ボリュームに対してライトデータを格納するとともに、ボリュームにおけるライトデータの格納先を、ボリュームにおける各ページの更新情報を示すビットマップで管理するようにしている。ここで、ページは、例えば、1つの論理ブロックに対応する領域であってもよいし、複数の論理ブロックに対応する領域であってもよい。
【0132】
次に、第2実施例に係るデータ管理処理を説明する。
【0133】
図13は、第2実施例に係るデータ管理処理を説明する図である。
【0134】
ここで、計算機システム10は、図13(a)に示すような初期状態にあるものとする。なお、図13(a)の状態は、図7(a)の状態と同じである。
【0135】
ここで、ノード100a(第1ノード)を停止するときには、図13(b)に示すように、管理計算機410の計画停止プログラム700は、HAペアであるボリューム155aと155bとを格納しているノード100a及びノード100b(第2ノード)以外のノード100c(第3ノード)に、ノード100aの動作を再開した場合にボリューム155aを回復するための回復ボリューム157aを作成し、ボリューム155bと、回復ボリューム157aとにより、回復ペアを作成する。また、管理計算機410の計画停止プログラム700は、ノード100bと、ノード100cとに、ボリューム155b、157aの各ページに対するライトデータの更新状態を示すビットマップ158a、158bを生成する。
【0136】
この場合において、ノード100bのボリューム155bに対するホスト400からのライト要求(ホストライトIO)のライトデータは、ボリューム155bと回復ボリューム157aとにより、二重化される。また、ライトデータを格納する際には、ノード100bは、ビットマップ158bにおけるライトデータを格納したボリューム155bのページに対応するビットを更新されたことを示す値(例えば“1”)に設定する。同様に、ノード100cは、ビットマップ158aにおけるライトデータを格納した回復ボリューム157aのページに対応するビットを更新されたことを示す値(例えば“1”)に設定する。
【0137】
図13(b)に示す状態において、ノード100bに障害が発生した場合には、図13(c)に示すように、ホスト400からノード100bのボリューム155bに対してアクセスすることができなくなる。
【0138】
図13(c)に示す状態となった場合には、ノード100aの停止を解除した後に、図13(d)に示すように、管理計算機410のデータ再同期プログラム720は、ノード100cのビットマップ158aと、回復ボリューム157aとに基づいて、ボリューム155aを最新のデータを保持した状態に回復させる。具体的には、管理計算機410のデータ再同期プログラム720は、ノード100cのビットマップ158aにおいて更新がされていることを示す値となっている回復ボリューム157aのページを特定し、回復ボリューム157aの特定されたページのデータをボリューム155aの対応するページに格納する。
【0139】
この後、管理計算機410のデータ再同期プログラム720が、ノード100aのボリューム155aに対するホスト400からのIOを再開すると、図13(e)に示すように、ホスト400は、最新のデータを保持しているボリューム155aに対してIOを行うことができるようになる。
【実施例3】
【0140】
次に、第3実施例について説明する。
【0141】
第3実施例は、第1実施例とは以下の点が異なっている。第1実施例では、回復ボリュームに対して、ジャーナルログ600を格納することにより、ライトデータと、ボリュームにおけるライトデータの格納先とを特定可能にしていたが、第3実施例では、HAペアのボリュームの静止点(ノード100を静止した時点)からの更新差分をスナップショットボリュームに格納するようにしている。スナップショットボリュームによると、更新された部分とそのデータが特定可能となっている。スナップショットボリュームは、HAペアのボリュームが格納されているノードとは異なるノードに作成される。
【0142】
次に、第3実施例に係るデータ管理処理を説明する。
【0143】
図14は、第3実施例に係るデータ管理処理を説明する図である。
【0144】
ここで、計算機システム10は、図14(a)に示すような初期状態にあるものとする。なお、図14(a)の状態は、図7(a)の状態と同じである。
【0145】
ここで、ノード100a(第1ノード)を停止するときには、図14(b)に示すように、管理計算機410の計画停止プログラム700は、HAペアであるボリューム155aと155bとを格納しているノード100a及びノード100b(第2ノード)以外のノード100c(第3ノード)に、ボリューム155bに対応するボリューム165を作成する。
【0146】
次に、図14(c)に示すように、管理計算機410の計画停止プログラム700は、ボリューム155bを格納しているノード100bにおいて、ボリューム155bのその時点のスナップショットをとってスナップショットボリューム166aを生成するとともに、ボリューム165を格納しているノード100cにおいて、ボリューム165のその時点のスナップショットをとってスナップショットボリューム166b(第3ボリューム)を生成し、スナップショットボリューム166aと、スナップショットボリューム166bと、をTC(True Copy)ペアとして構成する。
【0147】
この場合において、ノード100bは、ボリューム155bに対するホスト400からのライト要求(ホストライトIO)のライトデータを、ボリューム155bに対する格納位置を特定可能にスナップショットボリューム166aに格納する。また、ノード100bは、スナップショットボリューム166aに書き込まれた内容を、スナップショットボリューム166bにコピーする。これにより、スナップショットボリューム166bには、ボリューム155bの格納先を特定可能にライトデータが格納され、ライトデータが二重化される。
【0148】
図14(d)に示す状態において、ノード100bに障害が発生した場合には、図14(e)に示すように、ホスト400からノード100bのボリューム155bに対してアクセスすることができなくなる。
【0149】
図14(e)に示す状態となった場合には、ノード100aの停止を解除した後に、図14(f)に示すように、管理計算機410のデータ再同期プログラム720は、スナップショットボリューム166bの更新差分に基づいて、ボリューム155aを最新のデータを保持した状態に回復させる。具体的には、管理計算機410のデータ再同期プログラム720は、スナップショットボリューム166aに格納されている更新データを、ボリューム155aの対応する位置に格納する。
【0150】
この結果、管理計算機410のデータ再同期プログラム720が、ノード100aのボリューム155aに対するホスト400からのIOを再開すると、ホスト400は、最新のデータを保持しているボリューム155aに対してIOを行うことができるようになる。
【0151】
なお、本発明は、上述の実施例に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【0152】
例えば、上記実施例では、図12に示すネットワーク障害発生時処理をノード100が実行するようにして、障害の発生に対して早期に処理を実行できるようにしていたが、本発明はこれに限られず、図12に示すネットワーク障害発生時処理を、例えば、管理計算機410が実行するようにしてもよい。
【0153】
また、上記第3実施例では、スナップショットボリュームに、第1ノードのオフライン後のHAペアのアクティブのボリュームに対するライトデータの更新の内容を格納させるようにしていたが、本発明はこれに限られず、例えば、ノード100のCPU120は、スナップショットボリュームを通常の使用、すなわち、HAペアのアクティブのボリュームに対して更新が発生した場合に、スナップショットボリュームに、更新領域の更前のデータを格納させるようにしてもよい。この場合には、予め第2ノードのボリュームに対応するサイズのボリューム(回復ボリューム)を第3ノードに生成し、管理計算機410のCPU412は、第1ノードのオフライン後のライトデータを、第2ノードの対応するボリュームに格納させるとともに、第3ノードの回復ボリュームに格納させるようにすればよく、このようにすると、スナップショットボリュームの内容から、オフライン後に更新された領域を特定でき、回復ボリュームにおける特定した領域のデータが、第1ノードのオフライン後に更新されたデータとなる。したがって、管理計算機410のCPU412又はノード100のCPU120が、この更新されたデータを第1ノードのボリュームに対して書き込むことにより、第1ノードのボリュームを最新の状態に回復することができる。
【0154】
また、上記実施例では、ノード100と、管理計算機410とを別の計算機で構成した例を示していたが、本発明はこれに限られず、ノード100と管理計算機410とを一つの計算機で構成するようにしてもよい。
【0155】
また、上記実施例において、ノード100のCPU120、管理計算機410のCPU412が行っていた処理の一部又は全部を、ハードウェア回路で実現するようにしてもよい。また、上記実施例におけるノード100や管理計算機410で実行される各プログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア(例えば可搬型の記憶メディア)であってもよい。
【符号の説明】
【0156】
10…計算機システム、100,100a,100b,100c…ノード、120…CPU、400…ホスト、410…管理計算機、412…CPU
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14