以下に図面を参照して、本発明にかかるストレージ制御装置、制御方法および制御プログラムの実施の形態を詳細に説明する。なお、本明細書では、ストレージ制御装置を「PU(Processor Unit)」と表記し、ストレージユニットを「SU(Storage Unit)」と表記し、スイッチを「SW(Switch)」と表記する場合がある。
(制御方法の一実施例)
図1は、実施の形態にかかる制御方法の一実施例を示す説明図である。図1において、ストレージ装置101は、PU#1〜#3と、SU#1,#2と、SW#1,#2と、を含む。ここで、PU#1は、ストレージ装置101内の他のPU(例えば、PU#2,#3)を管理し、ストレージ装置全体を制御するマスタ制御部として動作する。
各PU#1〜#3は、自配下のSU#1,#2を制御するコンピュータである。各PU#1〜#3は、業務サーバ等の上位装置から自配下のSU#1,#2に対するアクセス(I/O)を受け付け、受け付けたアクセスを処理する。
SU#1,#2は、それぞれストレージを有し、各ストレージに対するI/Oを制御するコンピュータである。ストレージは、一以上の記憶装置Dを含む。記憶装置Dは、例えば、ハードディスク、光ディスク、フラッシュメモリ、磁気テープなどの物理的な記憶装置であってもよく、また、論理的な記憶装置であるLUN(Logical Unit Number)であってもよい。
SW#1,#2は、スイッチング機能を有するコンピュータである。SW#1,#2は、受信したデータの宛先に対応する経路(ポート)を選択してデータを中継する。ストレージ装置101では、例えば、冗長化されたSW#1,#2を介してPU#1〜#3とSU#1,#2がフルメッシュ接続される。
これにより、ストレージ装置101内の全PUから全SUへのアクセスが可能となり、PUの故障等の障害発生時における縮退運転が可能となる。なお、縮退運転とは、システムに障害が発生したときに性能や機能を部分的に停止させた状態で稼働を続行することである。
同様に、ストレージ装置102は、PU#1,#2と、SU#1,#2と、SW#1,#2と、を含む。ストレージ装置101内の各PUとストレージ装置102内の各PUは、SW103,104を介して、リモートコピーのためのデータ転送用回線により接続される。
なお、図1では、ストレージ装置101が3つのPUを含む場合を例に挙げて説明したが、1以上であれば幾つのPUを含んでいてもよい。また、ストレージ装置101が2つのSUを含む場合を例に挙げて説明したが、1以上であれば幾つのSUを含んでいてもよい。ストレージ装置102についても同様である。
ここで、ストレージ装置101内のボリュームP1,P2と、ストレージ装置102内のボリュームS1,S2は、コンシステンシーグループG1に属するボリューム群である。ボリュームとは、各ストレージ装置101,102の管理単位となる記憶領域である。例えば、ボリュームは、複数の物理的な記憶装置または記憶装置(例えば、ハードディスク)内のパーティションをグループ化して、仮想的に一つのボリュームとした論理ボリュームであってもよい。
コンシステンシーグループとは、すべてのレプリケーションセットのプライマリボリューム間において書込順序の一貫性を確保するためにグループ化されたレプリケーションセットの集合である。レプリケーションセットとは、レプリケーション関係を持つボリュームのペアであり、物理的に分離されたプライマリボリュームとセカンダリボリュームで構成される。
図1の例では、ボリュームP1,P2がプライマリボリュームであり、ボリュームS1,S2がセカンダリボリュームである。また、ボリュームP1とボリュームS1のペアおよびボリュームP2とボリュームS2のペアが、それぞれレプリケーション関係を持つボリュームのペアである。
ここで、複数のPUが複数のSUを利用して仮想的なボリュームを構成する場合、コンシステンシー(書込順序の一貫性)を保ちたいボリュームが複数のPUに分散したり、ボリュームの実データが複数のSUに分散する状況が起こり得る。また、コンシステンシーグループに属するボリューム群のリモートコピーを実施する場合、業務サーバからのデータ更新要求を抑止しつつ、データ転送のための差分データを確保する、すなわち、当該ボリューム群の静止点を取ることになる。
このため、リモートコピーを実施する際は、PU間の連携にかかる通信オーバーヘッドをいかに抑えるかだけでなく、業務サーバからのI/Oにできるだけ影響を与えることなく、静止点を確保したデータをいかに退避するかが重要となる。
コンシステンシーグループに属するボリューム群のデータのコンシステンシーを保つためには、例えば、全PUまたは各PUに対するボリューム群への更新データ情報(例えば、更新データ、更新位置等)を一つの格納領域に格納することが考えられる。ただし、PUの揮発性メモリ上のみで更新データ情報を保持しておくと、PUがダウンした場合に更新データ情報を失うため、PUの不揮発性メモリやSUのストレージに更新データ情報を保存することになる。
ところが、業務サーバからの更新データ情報を一つの格納領域に順序性を保って格納するということは、格納処理にかかる時間が長くなると、業務サーバからのI/Oを待たせてしまう原因となる。キャッシュを持たないPUの場合は、ボリュームに対する更新があると、その都度更新データ情報をSUに書き込むことになり、この格納処理がボトルネックとなってしまう。
そこで、本実施の形態では、ストレージ装置101は、コンシステンシーグループに属する各ボリュームのスナップショットを同時に作成するとともに、各ボリュームに対する更新データを差分データとして格納する格納領域を作成する。そして、ストレージ装置101は、各ボリュームのスナップショットのデータをコピー先に転送する。これにより、コンシステンシーグループに属するボリューム間でのデータのコンシステンシーを保ちつつリモートコピーを効率的に行う。
以下、図2および図3を用いて、ストレージ装置101,102間でコンシステンシーグループG1に属するボリューム群のリモートコピーを行う場合のストレージ装置101,102の動作例について説明する。
まず、図2を用いて、コピー元のストレージ装置101の動作例について説明する。図2は、コピー元のストレージ装置101の動作例を示す説明図である。
(2−1)ストレージ装置101のPU#1は、グループ情報に基づいて、時点t1の各ボリュームP1,P2のスナップショットを作成するとともに、各ボリュームP1,P2の差分格納領域A1(t1),A2(t1)を作成する。ここで、グループ情報は、コンシステンシーグループに属するコピー元のボリューム群を特定する情報である。
グループ情報は、例えば、コンシステンシーグループに属するコピー元のボリュームとコピー先のボリュームとの対応関係を示す。図1の例では、グループ情報は、コンシステンシーグループG1に属するコピー元のボリュームP1,P2とコピー先のボリュームS1,S2とのそれぞれの対応関係を示す。
グループ情報は、例えば、ストレージ装置101,102のSU1,SU2に記憶される。スナップショットを作成するとは、ある時点tにおけるボリューム上のデータを確保することである。また、差分格納領域A1(t),A2(t)は、時点t以降の各ボリュームP1,P2に対する更新データを差分データとして格納する格納領域である。
図1の例では、コンシステンシーグループG1に属するコピー元のボリュームP1,P2のうち、ボリュームP1はストレージ装置101のPU#1に存在し、ボリュームP2はストレージ装置101のPU#2に存在する。この場合、ストレージ装置101のPU#1は、時点t1のボリュームP2のスナップショットの作成指示をPU#2に通知する。そして、ストレージ装置101のPU#1は、時点t1のボリュームP1のスナップショットを作成するとともに、ボリュームP1の差分格納領域A1(t1)を作成する。
具体的には、例えば、PU#1は、ボリュームP1をリネームして、スナップショットのマスタボリュームとなるボリュームsnap1(t1)を作成する。ボリュームsnap1(t1)は、ReadOnly属性のボリュームとなる。また、PU#1は、時点t1以降のボリュームP1に対する更新データを差分データとして格納する空のボリュームを差分格納領域A1(t1)として作成する。
この結果、ボリュームsnap1(t1)と差分格納領域A1(t1)とを連携させた論理的なボリュームP1を生成することができる。例えば、ストレージ装置101は、ボリュームP1に対するRead要求に対して、差分格納領域A1(t1)に対象となるデータが存在しない場合は、ボリュームsnap1(t1)からデータを読み出す。一方、差分格納領域A1(t1)にデータが存在する場合は、ストレージ装置101は、差分格納領域A1(t1)からデータを読み出す。
また、ストレージ装置101は、ボリュームP1に対するWrite要求に対しては、差分格納領域A1(t1)にデータを書き込む。これにより、新たな論理的なボリュームP1は、スナップショット作成前のデータと、スナップショット作成後の更新データをマージした形のボリュームとして見える。
一方、ストレージ装置101のPU#2は、時点t1のボリュームP2のスナップショットの作成指示を受け付けたことに応じて、時点t1のボリュームP2のスナップショットを作成するとともに、ボリュームP2の差分格納領域A2(t1)を作成する。
具体的には、例えば、PU#2は、ボリュームP2をリネームして、ボリュームP2のマスタボリュームとなるボリュームsnap2(t1)を作成する。ボリュームsnap2(t1)は、ReadOnly属性のボリュームとなる。また、PU#2は、時点t1以降のボリュームP2に対する更新データを差分データとして格納する空のボリュームを差分格納領域A2(t1)として作成する。
時点t1において、PU#1,#2は、業務サーバ等の上位装置からの各ボリュームP1,P2に対するI/Oを抑止する。業務サーバ等の上位装置からのI/Oは、各PU#1,#2が、時点t1の各ボリュームP1,P2のスナップショットを作成し、各ボリュームP1,P2の差分格納領域A1(t1),A2(t1)を作成した時点で再開する。時点t1は、任意に設定可能である。
(2−2)ストレージ装置101のPU#1は、ボリュームP1,P2のスナップショットのデータをコピー先のストレージ装置102に転送する。図1の例では、ストレージ装置101のPU#1は、作成したボリュームP1のスナップショットのデータを、コピー先のボリュームS1が存在するストレージ装置102のPU#1に転送する。また、ストレージ装置101のPU#2は、作成したボリュームP2のスナップショットのデータを、コピー先のボリュームS2が存在するストレージ装置102のPU#2に転送する。
(2−3)ストレージ装置101のPU#1は、時点t1以降の時点t2の各ボリュームP1,P2のスナップショットを作成するとともに、各ボリュームP1,P2の差分格納領域A1(t2),A2(t2)を作成する。時点t2は、時点t1以降のいずれかの時点であり、任意に設定可能である。
図1の例では、ストレージ装置101のPU#1は、時点t2のボリュームP2のスナップショットの作成指示をPU#2に通知する。そして、ストレージ装置101のPU#1は、時点t2のボリュームP1のスナップショットを作成するとともに、ボリュームP1の差分格納領域A1(t2)を作成する。
一方、ストレージ装置101のPU#2は、時点t2のボリュームP2のスナップショットの作成指示を受け付けたことに応じて、時点t2のボリュームP2のスナップショットを作成するとともに、ボリュームP2の差分格納領域A2(t2)を作成する。この結果、ボリュームsnap1(t2)と差分格納領域A1(t2)とを連携させた論理的なボリュームP1と、ボリュームsnap2(t2)と差分格納領域A2(t2)とを連携させた論理的なボリュームP2が生成される。
また、時点t2において業務サーバ等の上位装置からのI/Oは抑止することになる。業務サーバ等の上位装置からのI/Oは、時点t2の各ボリュームP1,P2のスナップショットの作成が完了し、各ボリュームP1,P2の差分格納領域A1(t2),A2(t2)の作成が完了した時点で再開する。
(2−4)ストレージ装置101のPU#1は、時点t2の各ボリュームP1,P2の差分データをコピー先のストレージ装置102に転送する。図1の例では、ストレージ装置101のPU#1は、時点t2のボリュームP1の差分データをコピー先のストレージ装置102のPU#1に転送する。ここで、時点t2のボリュームP1の差分データは、時点t1から時点t2までのボリュームP1に対する更新データであり、差分格納領域A1(t1)に格納された差分データである。
また、ストレージ装置101のPU#2は、時点t2のボリュームP2の差分データをコピー先のストレージ装置102のPU#2に転送する。ここで、時点t2のボリュームP2の差分データは、時点t1から時点t2までのボリュームP2に対する更新データであり、差分格納領域A2(t1)に格納された差分データである。
つぎに、図3を用いて、コピー先のストレージ装置102の動作例について説明する。図3は、コピー先のストレージ装置102の動作例を示す説明図である。
(3−1)ストレージ装置102のPU#1は、ストレージ装置101のPU#1から、時点t1のコピー元のボリュームP1のスナップショットのデータを受信したことに応じて、受信したデータをコピー先のボリュームS1に格納する。
また、ストレージ装置102のPU#2は、ストレージ装置101のPU#2から、時点t1のコピー元のボリュームP2のスナップショットのデータを受信したことに応じて、受信したデータをコピー先のボリュームS2に格納する。
(3−2)ストレージ装置102のPU#1は、ストレージ装置101のPU#1から、時点t2のコピー元のボリュームP1の差分データを受信したことに応じて、差分格納領域A1’(t1)を作成する。差分格納領域A1’(t)は、時点t以降のボリュームS1に対する更新データを差分データとして格納する格納領域である。そして、ストレージ装置102のPU#1は、受信した差分データを、作成した差分格納領域A1’(t1)に格納する。
また、ストレージ装置102のPU#2は、ストレージ装置101のPU#2から、時点t2のコピー元のボリュームP2の差分データを受信したことに応じて、差分格納領域A2’(t1)を作成する。差分格納領域A2’(t)は、時点t以降のボリュームS2に対する更新データを差分データとして格納する格納領域である。そして、ストレージ装置102のPU#2は、受信した差分データを、作成した差分格納領域A2’(t1)に格納する。
(3−3)ストレージ装置102のPU#1は、コピー先のボリュームS1のスナップショットを作成する。具体的には、例えば、PU#1は、ボリュームS1をリネームして、ボリュームS1のマスタボリュームとなるボリュームsnap1(t1)を作成する。
また、ストレージ装置102のPU#2は、コピー先のボリュームS2のスナップショットを作成する。具体的には、例えば、PU#2は、ボリュームS2をリネームして、ボリュームS2のマスタボリュームとなるボリュームsnap2(t1)を作成する。
これらのことから、PU#1によれば、コンシステンシーグループG1に属するボリュームP1,P2のスナップショットを同時に取ることができ、コンシステンシーグループG1に属するボリューム間でのデータの書込順序の一貫性を保つことができる。また、ボリューム間でのデータの書込順序の一貫性を保つためのアクセスを差分格納領域A1(t1),A2(t1)に分散させてアクセスの一極集中を回避でき、業務サーバ等の上位装置からのI/O遅延を防ぐことができる。また、リモートサイトにおいて、ローカルサイトから転送されたデータをスナップショットの形で参照可能にすることができる。
(PU等のハードウェア構成例)
つぎに、図1に示したストレージ装置101,102のPU、SU、SW等のコンピュータ(ここでは、単に「PU等」と称する)のハードウェア構成例について説明する。
図4は、PU等のハードウェア構成例を示すブロック図である。図4において、PU等は、CPU(Central Processing Unit)401と、メモリ402と、I/F(Interface)403と、を有する。また、各構成部はバス410によってそれぞれ接続されている。
ここで、CPU401は、PU等の全体の制御を司る。メモリ402は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。より具体的には、例えば、フラッシュROMがOS(Operating System)やファームウェアなどのプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU401のワークエリアとして使用される。メモリ402に記憶されているプログラムは、CPU401にロードされることで、コーディングされている処理をCPU401に実行させることになる。
I/F403は、他のコンピュータからのデータの入出力を制御する。具体的には、例えば、I/F403は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続され、このネットワークを介して他のコンピュータに接続される。そして、I/F403は、ネットワークと内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。
以下の説明では、各ストレージ装置101,102内の一以上のPUを「PU#1〜#n」と表記し(nは、1以上の自然数)、PU#1〜#nのうちの任意のPUを「PU#i」と表記する場合がある(i=1,2,…,n)。
(PU#iの機能的構成例)
つぎに、ストレージ装置101のマスタ制御部となるPU#iの機能的構成例について説明する。ただし、ストレージ装置101において、PU#iがダウンした場合は、他のPU#j(j≠i、j=1,2,…,n)が、PU#iの機能を引き継ぐ。
図5は、PU#iの機能的構成例を示すブロック図である。図5において、PU#iは、記憶部501と、作成部502と、通信制御部503と、を含む構成である。作成部502〜通信制御部503は、具体的には、例えば、図4に示したメモリ402に記憶されたプログラムをCPU401に実行させることにより、または、I/F403により、その機能を実現する。また、各機能部の処理結果は、例えば、メモリ402に記憶される。
<ストレージ装置101がコピー元のストレージ装置>
まず、ストレージ装置101がコピー元のストレージ装置である場合の各機能部について説明する。また、ストレージ装置102をコピー先のストレージ装置とする。
記憶部501は、ストレージ装置101の記憶領域の構成を示す構成情報を記憶する。ここで、構成情報は、コンシステンシーグループGのグループ情報を含む。グループ情報は、コンシステンシーグループGに属するコピー元のボリューム群を特定する情報であり、例えば、コンシステンシーグループGに属するコピー元のボリュームPとコピー先のボリュームSとの対応関係を示す。
グループ情報には、例えば、コピー元のボリュームPが存在するストレージ装置101内のPU#iを特定する情報が含まれていてもよく、コピー先のボリュームSが存在するストレージ装置102内のPU#iを特定する情報が含まれていてもよい。PU#iを特定する情報は、例えば、PU#iのIP(Internet Protocol)アドレスである。
また、構成情報は、例えば、ストレージ装置101内のSUの記憶領域の割当状況を示す割当情報を含むことにしてもよい。割当情報は、例えば、ボリュームがストレージ装置101内のどのSUのどの記憶装置Dに割り当てられているかを示す情報である。構成情報は、例えば、ストレージ装置101内のSUに記憶されている。PU#iは、例えば、ストレージ装置101内のSUから構成情報を読み出して記憶部501に記憶する。
以下の説明では、コンシステンシーグループGに属するコピー元のボリューム群を「ボリュームP1〜PK」と表記し(Kは、2以上の自然数)、ボリュームP1〜PKのうちの任意のボリュームを「ボリュームPk」と表記する場合がある(k=1,2,…,K)。また、コンシステンシーグループGに属するコピー先のボリューム群を「ボリュームS1〜SK」と表記し、ボリュームS1〜SKのうちの任意のボリュームを「ボリュームSk」と表記する場合がある。
作成部502は、グループ情報に基づいて、時点t1のコピー元のボリュームP1〜PKの各ボリュームPkのスナップショットを作成するとともに、各ボリュームPkの差分格納領域Ak(t1)を作成する。ここで、差分格納領域Ak(t)は、時点t以降のボリュームPkに対する更新データを差分データとして格納する格納領域である。差分格納領域Ak(t)は、例えば、シンプロビジョニングボリュームによって実現される。
具体的には、例えば、まず、作成部502は、ボリュームP1〜PKの中に自PUとは異なる他のPU#jに存在するボリュームPkがあるか否かを判断する。ボリュームPkが存在するPUは、作成部502が、グループ情報から特定してもよく、各PU#1〜#nに問い合わせることで特定してもよい。
ここで、他のPU#jに存在するボリュームPkがない場合、作成部502は、時点t1の自PUに存在する各ボリュームP1〜PKのスナップショットを作成するとともに、各ボリュームP1〜PKの差分格納領域A1(t1)〜AK(t1)を作成する。時点t1のボリュームPkのスナップショットのデータは、時点t1のボリュームPkのデータそのものである。
一方、他のPU#jに存在するボリュームPkがある場合、作成部502は、時点t1のボリュームPkのスナップショットの作成指示を他のPU#jに通知する。そして、作成部502は、時点t1の自PUに存在する各ボリュームPkのスナップショットを作成するとともに、各ボリュームPkの差分格納領域Ak(t1)を作成する。
時点t1において、ボリュームPkが存在する各PUは、業務サーバ等の上位装置からのボリュームPkに対するI/Oを抑止する。そして、各PUは、時点t1の各ボリュームPkのスナップショットを作成し、各ボリュームPkの差分格納領域Ak(t1)を作成した時点で、業務サーバ等の上位装置からのI/Oを再開する。抑止中のI/Oは、例えば、各PUのキャッシュ等に退避しておくことにしてもよい。
通信制御部503は、時点t1のコピー元のボリュームP1〜PKの各ボリュームPkのスナップショットのデータをコピー先のストレージ装置102に転送する。具体的には、例えば、通信制御部503は、割当情報を参照して、作成部502によって作成された時点t1の自PUに存在するボリュームPkのスナップショットのデータをSUから読み出す。
そして、通信制御部503は、読み出したデータを、コピー先のボリュームSkが存在するストレージ装置102内のPUに転送する。コピー先のボリュームSkが存在するPUは、通信制御部503が、グループ情報から特定してもよく、コピー先のストレージ装置102内の各PU#1〜#nに問い合わせることで特定してもよい。
また、作成部502は、時点t1以降の時点t2のコピー元のボリュームP1〜PKの各ボリュームPkのスナップショットを作成するとともに、各ボリュームPkの差分格納領域Ak(t2)を作成する。具体的には、例えば、まず、作成部502は、ボリュームP1〜PKの中に自PUとは異なる他のPU#jに存在するボリュームPkがあるか否かを判断する。
ここで、他のPU#jに存在するボリュームPkがない場合、作成部502は、時点t2の自PUに存在する各ボリュームP1〜PKのスナップショットを作成するとともに、各ボリュームP1〜PKの差分格納領域A1(t2)〜AK(t2)を作成する。この際、作成部502は、時点t1のボリュームPkのスナップショットのデータと、差分格納領域Ak(t1)に格納された差分データとに基づいて、時点t2のボリュームPkのスナップショットを作成する。
一方、他のPU#jに存在するボリュームPkがある場合、作成部502は、時点t2のボリュームPkのスナップショットの作成指示を他のPU#jに通知する。そして、作成部502は、時点t2の自PUに存在する各ボリュームPkのスナップショットを作成するとともに、各ボリュームPkの差分格納領域Ak(t2)を作成する。
通信制御部503は、時点t2のコピー元のボリュームP1〜PKの各ボリュームPkの差分データを、コピー先のストレージ装置102に転送する。具体的には、例えば、通信制御部503は、割当情報を参照して、自PUに存在するボリュームPkの差分格納領域Ak(t1)のデータをSUから読み出す。そして、通信制御部503は、読み出したデータを、コピー先のボリュームSkが存在するストレージ装置102内のPUに転送する。
また、作成部502は、定期的または不定期に時点t1以降のいずれかの時点tpのコピー元の各ボリュームPkのスナップショットを作成するとともに、各ボリュームPkの差分格納領域Ak(tp)を作成することにしてもよい(pは、2以上の自然数)。この場合、通信制御部503は、時点tpのコピー元の各ボリュームPkの差分データを、コピー先のストレージ装置102に転送する。
時点tpは、任意に設定可能である。例えば、時点tpは、時点t1以降の一定時間間隔ごとの時点であってもよい。一定時間は、任意に設定可能であり、例えば、数分、数時間、数日などに設定される。
PU#iがマスタ制御部ではない場合には、PU#iは、ストレージ装置101のマスタ制御部となる他のPU#jから、時点t1の自PUに存在するボリュームPkのスナップショットの作成指示を受け付ける。この場合、作成部502は、時点t1の自PUに存在するボリュームPkのスナップショットを作成するとともに、ボリュームPkの差分格納領域Ak(t1)を作成する。そして、通信制御部503は、時点t1のボリュームPkのスナップショットのデータをコピー先のストレージ装置102に転送する。
この際、PU#iは、他のPU#jからスナップショットの作成指示を受け付けたことに応じて、業務サーバ等の上位装置からのボリュームPkに対するI/Oを抑止する。そして、PU#iは、時点t1のボリュームPkを作成し、ボリュームPkの差分格納領域Ak(t1)を作成した時点で、業務サーバ等の上位装置からのI/Oを再開する。
また、PU#iがマスタ制御部ではない場合、PU#iは、ストレージ装置101のマスタ制御部となる他のPU#jから、時点tpの自PUに存在するボリュームPkのスナップショットの作成指示を受け付ける。この場合、作成部502は、スナップショットの作成指示を受け付けたことに応じて、時点tpの自PUに存在するボリュームPkのスナップショットを作成するとともに、ボリュームPkの差分格納領域Ak(tp)を作成する。そして、通信制御部503は、ボリュームPkの差分格納領域Ak(t(p−1))のデータをコピー先のストレージ装置102に転送する。
この際、PU#iは、他のPU#jからスナップショットの作成指示を受け付けたことに応じて、業務サーバ等の上位装置からのボリュームPkに対するI/Oを抑止する。そして、PU#iは、時点tpのボリュームPkを作成し、ボリュームPkの差分格納領域Ak(tp)を作成した時点で、業務サーバ等の上位装置からのI/Oを再開する。
ここで、ストレージ装置101,102がそれぞれ複数のPUを含む場合、ストレージ装置101,102が同一のPU構成であっても、コピー元のボリュームPkが存在するPUとコピー先のボリュームSkが存在するPUの関係が、1対1になるとは限らない。
例えば、ストレージ装置101のPU#1上に2つのボリュームがあり、いずれもリモートコピー対象であるとすると、それらのボリュームの相手(コピー先のボリューム)が、ストレージ装置102内の1つのPU上に存在しているとは限らない。また、ストレージ装置101,102のPU構成が異なる場合もある。
このため、コピー元・コピー先のリモートコピー関係(以下、「セッション」と称する)を結ぶ場合に、ストレージ装置101が、ストレージ装置102内のどのPUにコピー先のボリュームSkが存在するかを効率的に把握できることが望ましい。
さらに、PU故障や回線異常などの何らかの不具合により、セッション関係を結んだコピー先のボリュームSkが存在するストレージ装置102内のPUとの通信が不能となる場合がある。この場合、異常PU上のボリュームSkは、正常動作している別のPUにフェイルオーバする。フェイルオーバとは、例えば、あるPUに異常が発生した場合に、別のPUが、異常PUに代わって処理やデータを引き継ぐ機能である。
そこで、通信制御部503は、コピー先のストレージ装置102内のPU#1〜#nのうちのいずれかのPU(以下、「代表PU」と称する)に、コピー先のボリュームSkが存在するPUを問い合わせることにしてもよい。また、通信制御部503は、コピー先のボリュームSkが存在するPUとの通信が不能となった場合に、代表PUに、コピー先のボリュームSkの移動先のPU(フェイルオーバ先のPU)を問い合わせることにしてもよい。
ここで、代表PUは、コピー先のストレージ装置102内のPU#1〜#nのうちの特定のPUであり、例えば、ストレージ装置102のマスタ制御部となるPUである。代表PUには代表アドレスが割り振られる。代表アドレスは、コピー先のストレージ装置102内の代表PUに割り振られたリモートコピー用の論理的なIPアドレスである。代表アドレスは、例えば、コンシステンシーグループGのグループ情報に含まれる。
代表PUは、例えば、リモートコピーを開始する際に、他のPUと通信してコピー先のボリュームSの情報を収集することにより、コピー先のボリュームSがどのPU上に存在しているかを把握する。コピー先のストレージ装置102の代表PUおよび代表アドレスは任意に設定可能である。また、代表PUがダウンした場合は、コピー先のストレージ装置102内の他のPUが、代表PUの機能を引き継ぐ。
通信制御部503は、代表アドレスを用いて、コピー先のストレージ装置102内の代表PUと通信することにより、コピー先のボリュームSkが存在するPUや、コピー先のボリュームSkの移動先のPUを問い合わせることができる。これにより、コピー元・コピー先のセッション関係を結ぶ際、あるいは、セッション関係が切れた際に、コピー先のストレージ装置102内の個々のPUに対して問い合わせを行う必要がなくなり、接続先のPUを効率的に探すことができる。
<ストレージ装置101がコピー先のストレージ装置>
つぎに、ストレージ装置101がコピー先のストレージ装置である場合の各機能部について説明する。また、ストレージ装置102をコピー元のストレージ装置とする。
作成部502は、ストレージ装置102から時点t1のコピー元のボリュームPkのスナップショットのデータを受信したことに応じて、受信したデータを、コピー先のボリュームSkに格納する。
また、作成部502は、時点t1以降の時点tpのコピー元のボリュームPkの差分データを受信したことに応じて、ボリュームSkの差分格納領域Ak’(t(p−1))を作成して、受信した差分データを差分格納領域Ak’(t(p−1))に格納する。そして、作成部502は、時点t(p−1)のコピー先のボリュームSkのスナップショットを作成する。
なお、リモートコピーの実施中においてはコピー先のボリュームSkに対するアクセスは禁止とする。Write要求を許可しないのは、スナップショット形式を採用しているため、マスタとなるスナップショットとしてのデータが変更されるとコピー元のデータを失うためである。
一方、Read要求を許可しないのは、業務サーバのOSが特定のOSである場合に不具合が発生してしまうためである。ここで、特定のOSは、Readのみ可能なボリュームに対してもWrite要求を発行してしまうOSである。特定のOSの場合、Read要求のみを許可してもWrite要求が発行され、Writeに失敗した旨のエラーログが業務サーバ上のイベントログに大量に記録されるという不具合が発生する。
ところが、このアクセス制限を設けることにより、コピー先には初回の転送が終わったデータが存在しているのに参照ができないという問題が生じる。データが参照可能となるのは、次回の差分転送がされて、コピー先のボリュームSkがスナップショットの扱いになってからである。
そこで、作成部502は、時点t1のコピー元のボリュームPkのスナップショットのデータを受信したことに応じて、受信したデータを、コピー先のボリュームSkに格納し、ボリュームSkの差分格納領域Ak’(t1)を作成して、時点t1のコピー先のボリュームSkのスナップショットを作成することにしてもよい。ここで、図6を用いて、コピー先のボリュームSkのスナップショットの作成例について説明する。
図6は、コピー先のボリュームSkのスナップショットの作成例を示す説明図である。(6−1)作成部502は、時点t1のコピー元のボリュームPkのスナップショットのデータを受信したことに応じて、受信したデータを、コピー先のボリュームSkに格納する。
(6−2)作成部502は、ボリュームSkの差分格納領域Ak’(t1)を作成する。この差分格納領域Ak’(t1)は、ダミー(空)の格納領域である。
(6−3)作成部502は、時点t1のコピー先のボリュームSkのスナップショットを作成する。具体的には、例えば、作成部502は、ボリュームSkをリネームして、ボリュームSkのマスタボリュームとなるボリュームsnap1(t1)を作成する。これにより、ボリュームSk(ボリュームsnap1(t1))のデータが参照可能となる。
このように、コピー元からの初回のデータ転送が終わった時点で、作成部502が、ダミー(空の)の差分格納領域Ak’(t1)を併せて作成し、即座に転送が完了したボリュームSkをスナップショットの扱いとする。これにより、初回のデータ転送が終わった時点でボリュームSkがスナップショットの扱いとなり、初回のデータ転送完了後に、コピー先にて転送されたデータの参照が可能となる。
ただし、本来スナップショットは、ReadOnly属性として、データの更新をさせないボリュームである。このため、2回目のデータ転送でスナップショットとなったボリュームSkへのWrite要求は禁止される。しかし、上述したように、特定のOSがインストールされた業務サーバにボリュームSkをマウントさせるためには、Write可能なボリュームである必要がある。
そのため、PU#iは、Read/Write可能なスナップショットの差分クローンを作成し、業務サーバにはあたかもそのスナップショットを割り当てたかのように見せることにより、(擬似)スナップショットへのRead/Writeを可能とする。ただし、PU#iは、差分クローンにデータがWriteされたとしても、該データを元のスナップショットへ書き戻すことはせず破棄する。
また、時点t1以降において、作成部502は、例えば、時点tpのコピー元のボリュームPkの差分データを受信した場合、受信した差分データを、差分格納領域Ak’(t(p−1))に格納する。つぎに、作成部502は、ボリュームSkの差分格納領域Ak’(tp)を作成する。そして、作成部502は、時点t(p−1)のコピー先のボリュームSkのスナップショットのデータと差分格納領域Ak’(t(p−1))に格納された差分データに基づいて、時点tpのコピー先のボリュームSkのスナップショットを作成する。
(ストレージ装置101の制御処理手順)
つぎに、ストレージ装置101の制御処理手順について説明する。まず、ストレージ装置101がコピー元のストレージ装置である場合の制御処理手順について説明する。また、ストレージ装置102をコピー先のストレージ装置とする。
図7は、コピー元のストレージ装置101の制御処理手順の一例を示すフローチャートである。図7のフローチャートにおいて、まず、ストレージ装置101は、時点tpの「p」を「p=1」とする(ステップS701)。
そして、ストレージ装置101は、グループ情報に基づいて、時点tpの各ボリュームP1〜PKのスナップショットを作成するとともに、各ボリュームP1〜PKの差分格納領域A1(tp)〜AK(tp)を作成する(ステップS702)。つぎに、ストレージ装置101は、時点tpの各ボリュームP1〜PKのスナップショットのデータをコピー先のストレージ装置102に転送する(ステップS703)。
そして、ストレージ装置101は、時点tpから一定時間が経過したか否かを判断する(ステップS704)。ここで、ストレージ装置101は、一定時間が経過するのを待って(ステップS704:No)、一定時間が経過した場合(ステップS704:Yes)、時点tpの「p」をインクリメントする(ステップS705)。
つぎに、ストレージ装置101は、時点tpの各ボリュームP1〜PKのスナップショットを作成するとともに、各ボリュームP1〜PKの差分格納領域A1(tp)〜AK(tp)を作成する(ステップS706)。そして、ストレージ装置101は、時点tpの各ボリュームP1〜PKの差分データを、コピー先のストレージ装置102に転送する(ステップS707)。
つぎに、ストレージ装置101は、ストレージ装置101,102間のリモートコピーが終了したか否かを判断する(ステップS708)。ここで、リモートコピーが終了していない場合(ステップS708:No)、ストレージ装置101は、ステップS704に戻る。
一方、リモートコピーが終了した場合(ステップS708:Yes)、ストレージ装置101は、本フローチャートによる一連の処理を終了する。
これにより、定期的にボリュームP1〜PKのスナップショットを同時に取ることができ、一定時間間隔ごとのコンシステンシーグループGに属するボリューム間でのデータの書込順序の一貫性を保つことができる。
つぎに、ストレージ装置101がコピー先のストレージ装置である場合の制御処理手順について説明する。また、ストレージ装置102をコピー元のストレージ装置とする。
図8は、コピー先のストレージ装置101の制御処理手順の一例を示すフローチャートである。図8のフローチャートにおいて、まず、ストレージ装置101は、時点tpの「p」を「p=1」とする(ステップS801)。
そして、ストレージ装置101は、コピー元のストレージ装置102から、コピー元のボリュームPkのスナップショットのデータを受信したか否かを判断する(ステップS802)。ここで、ストレージ装置101は、コピー元のボリュームPkのスナップショットのデータを受信するのを待つ(ステップS802:No)。
そして、ストレージ装置101は、コピー元のボリュームPkのスナップショットのデータを受信した場合(ステップS802:Yes)、受信したデータを、コピー先のボリュームSkに格納する(ステップS803)。つぎに、ストレージ装置101は、ボリュームSkの差分格納領域Ak’(tp)を作成する(ステップS804)。
そして、ストレージ装置101は、時点tpのコピー先のボリュームSkのスナップショットを作成する(ステップS805)。つぎに、ストレージ装置101は、コピー元のストレージ装置102から、コピー元のボリュームPkの差分データを受信したか否かを判断する(ステップS806)。
ここで、コピー元のボリュームPkの差分データを受信した場合(ステップS806:Yes)、ストレージ装置101は、受信した差分データを差分格納領域Ak’(tp)に格納する(ステップS807)。そして、時点tpの「p」をインクリメントして(ステップS808)、ステップS804に戻る。
また、ステップS806において、コピー元のボリュームPkの差分データを受信していない場合(ステップS806:No)、ストレージ装置101は、ストレージ装置101,102間のリモートコピーが終了したか否かを判断する(ステップS809)。ここで、リモートコピーが終了していない場合(ステップS809:No)、ストレージ装置101は、ステップS806に戻る。
一方、リモートコピーが終了した場合(ステップS809:Yes)、ストレージ装置101は、本フローチャートによる一連の処理を終了する。
これにより、コピー元のボリュームPkのデータを、コピー先のボリュームSkに転送することができる。また、初回のデータ転送が終わった時点でボリュームSkがスナップショットの扱いとなり、初回のデータ転送完了後に、コピー先にて転送されたデータの参照を可能にすることができる。
以上説明したように、実施の形態にかかるストレージ装置101によれば、時点t1のコピー元の各ボリュームP1〜PKのスナップショットを作成するとともに、各ボリュームP1〜PKの差分格納領域A1(t1)〜AK(t1)を作成することができる。そして、ストレージ装置101によれば、時点t1の各ボリュームP1〜PKのスナップショットのデータをコピー先のストレージ装置102に転送することができる。
これにより、コンシステンシーグループGに属するボリュームP1〜PKのスナップショットを同時に取ることができ、コンシステンシーグループGに属するボリューム間でのデータの書込順序の一貫性を保つことができる。また、各ボリュームP1〜PKに対する更新データを差分データとして格納する際のアクセスを差分格納領域A1(t1)〜AK(t1)に分散させてアクセスの一極集中を回避でき、業務サーバ等の上位装置からのI/O遅延を防ぐことができる。
また、ストレージ装置101によれば、定期的または不定期に時点t1以降の時点tpの各ボリュームP1〜PKのスナップショットを作成するとともに、各ボリュームP1〜PKの差分格納領域A1(tp)〜AK(tp)を作成することができる。そして、ストレージ装置101によれば、時点tpの各ボリュームP1〜PKの差分データを、コピー先のストレージ装置102に転送することができる。
これにより、任意の時間間隔で、コンシステンシーグループGに属するボリューム間でコンシステンシーが保たれた更新データを保障することができる。
また、ストレージ装置101によれば、ストレージ装置102から、コピー元のボリュームPkのスナップショットのデータを受信したことに応じて、受信したデータを、コピー先のボリュームSkに格納することができる。また、ストレージ装置101によれば、ストレージ装置102から、コピー元のボリュームPkの差分データを受信したことに応じて、差分格納領域Ak’(t(p−1))を作成し、受信した差分データを差分格納領域Ak’(t(p−1))に格納することができる。そして、ストレージ装置101によれば、コピー先のボリュームSkのスナップショットを作成することができる。
これにより、ストレージ装置102からコピー元のボリュームPkの差分データが転送されてきた時点で、コピー先のボリュームSkがスナップショット扱いとなり、コピー先のボリュームSkのデータを参照可能にすることができる。
また、ストレージ装置101によれば、時点tpのコピー元のボリュームPkのスナップショットのデータを受信したことに応じて、コピー先のボリュームSkの差分格納領域Ak’(tp)を作成して、ボリュームSkのスナップショットを作成することができる。これにより、初回のデータ転送が終わった時点でボリュームSkがスナップショットの扱いとなり、初回のデータ転送完了後に、コピー先にて転送されたデータの参照が可能となる。
また、ストレージ装置101によれば、代表アドレスを用いて、コピー先のストレージ装置102内の代表PUと通信することにより、コピー先のボリュームSkが存在するPUや、コピー先のボリュームSkの移動先のPUを問い合わせることができる。これにより、コピー元・コピー先のセッション関係を結ぶ際、あるいは、セッション関係が切れた際に、コピー先のストレージ装置102内の個々のPUに対して問い合わせを行う必要がなくなり、接続先のPUを効率的に探すことができる。
これらのことから、実施の形態にかかるストレージ装置101によれば、コンシステンシーグループGに属するボリューム間でのデータの書込順序の一貫性を保ちつつリモートコピーを効率的に行うことができる。
(実施例)
つぎに、実施の形態にかかるストレージ装置101の実施例について説明する。実施例では、ストレージ装置101をスケールアウト型の仮想化環境向けのストレージシステムSMに適用した場合を例に挙げて説明する。
(ストレージシステムSMのシステム構成例)
図9は、ストレージシステムSMのシステム構成例を示す説明図である。図9において、ストレージシステムSMは、PU#1,#2と、SW#1,#2と、SU#1と、を含む。ここで、PU#1,#2は、SU#1を制御するコンピュータであり、例えば、後述する業務サーバBSや管理サーバMSからアクセス可能である。
SW#1,#2は、スイッチング機能を有するコンピュータである。SU#1は、RAID(Redundant Arrays of Inexpensive Disks)#1〜#4を有し、RAID#1〜#4に対するアクセスを制御するコンピュータである。各RAID#1〜#4は、複数の記憶装置(例えば、ハードディスク)をまとめて一つの記憶装置としたRAIDグループである。具体的には、各RAID#1〜#4は、それぞれ2つのLUNで構成される。
ストレージシステムSMは、ワイドストライピングによるデータアクセスを行う。ワイドストライピングによれば、アクセス集中による性能低下を抑止し、サーバ等の上位装置からのストレージシステムSMへのアクセス量やボリュームの物理的位置を意識した複雑な性能設計を行うことなく、安定した性能を確保することができる。
また、ストレージシステムSMは、ストレージシステムSMに要求される記憶容量の増加にともなって、装置全体の記憶領域を拡張することができる。例えば、ストレージシステムSMでは、PUとSUを1セットとして、装置全体の記憶領域を拡張することができる。
以下の説明では、PUとSUを1セットとする拡張セット(PU+SU)を、ストレージシステムSMに追加することを「スケールアウト」と表記する場合がある。また、ストレージシステムSMに含まれるPU#1,#2とSW#1,#2とSU#1を「基本ノード」と表記し、ストレージシステムSMに追加される拡張セットを「増設ノード」と表記する場合がある。また、ストレージシステムSMにより提供される仮想的なボリュームを「VDISK」と表記する場合がある。
(VDISKの構成例)
図10は、VDISKの構成例を示す説明図である。図10において、VDISK#iは、セグメントセット#1〜#nの集合体である(i:自然数、n:2以上の自然数)。各セグメントセット#1〜#nは、8個のセグメント#1〜#8の集合体である。ここでは、各セグメントセット#1〜#8の容量は、例えば、2[GB]であり、また、各セグメント#1〜#8の容量は、例えば、256[MB]である。
図9に示したストレージシステムSMを例に挙げると、各セグメント#1〜#8は、SU#1内のLUN#1〜#8ごとに割り当てられる。ユーザのデータは、固定長のストリップ(1[MB])単位で記録される。また、このストリップはセグメント#1〜#8を順に利用する形でストライピングされる。
(ストレージシステムSM内のPUの機能的構成例)
図11は、実施例にかかるPUの機能的構成例を示す説明図である。図11において、ストレージシステムSMは、基本ノードN1と、増設ノードN2と、を含む。図11では、ストレージシステムSMに増設ノードN2を増設した直後、すなわち、スケールアウト直後のストレージシステムSMの状態を表す。基本ノードN1は、PU#1,#2と、SU#1と、を含む。増設ノードN2は、PU#3と、SU#2と、を含む。
基本ノードN1内のPU#1,#2と、増設ノードN2内のPU#3と、管理サーバMSとは、管理用LANを介して接続される。管理サーバMSは、ストレージシステムSMの管理者が使用するコンピュータであり、装置管理GUI(Graphical User Interface)を有する。
また、基本ノードN1内のPU#1,#2と、増設ノードN2内のPU#3と、業務サーバBSとは、I/O用LANを介して接続される。業務サーバBSは、業務用のアプリケーションがインストールされたコンピュータである。
また、PU#1,#2,#3と、SU#1,#2とは、I/O用LANおよび内部管理LANを介して接続される。各SU#1,#2は、構成管理DB#1,#2と、ストレージ制御部#1,#2とを有する。ストレージ制御部#1,#2は、ストレージ制御プログラムをCPUが実行することにより実現される。ストレージ制御プログラムは、各SU#1,#2内のST(ストレージ)に対するアクセスを制御するプログラムである。
構成管理DB#1,#2は、コンシステンシーグループ管理テーブル700と、ボリューム管理テーブル710と、再配置計画テーブル720と、を含む。ここで、コンシステンシーグループ管理テーブル700は、コンシステンシーグループGを管理する情報である(図12参照)。上述したグループ情報は、例えば、コンシステンシーグループ管理テーブル700に相当する。
ボリューム管理テーブル710は、ボリュームインデックステーブル1500(図15参照)と、ミラーボリュームインデックステーブル1600(図16参照)と、ボリュームセグメントテーブル1700(図17参照)と、を含む。上述した割当情報は、例えば、ボリューム管理テーブル710に相当する。
ボリュームインデックステーブル1500は、ボリューム(VDISK)を管理するテーブルである。ミラーボリュームインデックステーブル1600は、ミラーボリュームを管理するテーブルである。ボリュームセグメントテーブル1700は、ボリュームのセグメントを管理するテーブルである。各テーブル700,1500,1600,1700は、ボリューム番号をインデックスとして関連付けられる。
また、再配置計画テーブル720は、VDISKを構成する各セグメントをどこへ配置するかを計画した計画後の配置先のストレージ装置(SU)、LUN番号および再配置状況を管理するテーブルである。既に再配置が完了した(もしくは、再配置が不要な)セグメントの再配置状況については「再配置完了(もしくは、再配置不要)」とする。また、現状再配置中のセグメントの再配置状況については「再配置中」とし、今後再配置されるセグメントの再配置状況については「再配置待」とする。
再配置の一時停止中は、PU#1は、再配置計画テーブル720を削除することなく保持しておく。再配置が停止された場合は、PU#1は、再配置計画テーブル720を破棄する。また、再配置の一時停止中にボリューム(VDISK)が削除された場合、PU#1は、ボリューム管理テーブル710のボリュームインデックステーブル1500から該当レコードを削除するとともに、再配置計画テーブル720から該当レコードを削除する。なお、ボリューム管理テーブル710と再配置計画テーブル720についての詳細な説明は、図15〜図18を用いて後述する。
PU#1は、I/O制御部#1と、PU制御部#1と、クラスタ制御Mと、装置管理GUI制御部#1と、PU負荷監視部#1と、SU制御部#1と、ボリューム管理Mと、ボリューム管理A#1と、を含む。また、PU#1は、コンシステンシーグループ管理テーブル700と、ボリューム管理テーブル710と、再配置計画テーブル720と、を有する。
PU#1は、例えば、構成管理DB#1(または、構成管理DB#2)から、コンシステンシーグループ管理テーブル700、ボリューム管理テーブル710および再配置計画テーブル720を読み出して使用する。図5に示した作成部502および通信制御部503は、例えば、I/O制御部#1、クラスタ制御M、SU制御部#1、ボリューム管理M、ボリューム管理A#1等により実現される。
また、PU#2は、I/O制御部#2と、PU制御部#2と、クラスタ制御部#2と、PU負荷監視部#2と、SU制御部#2と、ボリューム管理A#2と、を含む。また、PU#3は、I/O制御部#3と、PU制御部#3と、クラスタ制御部#3と、PU負荷監視部#3と、SU制御部#3と、ボリューム管理A#3と、を含む。
ここで、I/O制御部#1〜#3は、業務サーバBSからのI/O要求を受け付けて処理する。PU制御部#1〜#3は、各PU#1〜#3を制御する。クラスタ制御Mは、PU同士をクラスタリングする。ここでは、PU#1とPU#2とPU#3とでクラスタが形成されている。クラスタ制御部#2,#3は、クラスタ制御MによってクラスタリングされたPU#1〜#3を認識する。また、クラスタ制御Mは、ストレージ装置間のリモートコピーを制御する。
装置管理GUI制御部#1は、管理サーバMSからの指示に従って、ストレージシステム100の状態を判断したり、新規ボリュームを作成したりする。PU負荷監視部#1〜#3は、各PU#1〜#3にかかる負荷を監視する。SU制御部#1〜#3は、各SU#1,#2を制御する。
ボリューム管理Mは、ボリューム管理A#1〜#3を制御する。具体的には、例えば、ボリューム管理Mは、再配置制御スレッドを起動して、ボリューム管理A#1〜#3に実行させる。ボリューム管理A#1〜#3は、ボリューム管理Mの制御に従って、ボリュームを管理する。
なお、ストレージシステム100において、PU#1がダウンした場合は、例えば、PU#2またはPU#3が、PU#1の機能を引き継ぐ。また、業務サーバBS、管理サーバMSのハードウェア構成は、例えば、CPU、メモリ、磁気ディスクドライブ、磁気ディスク、ディスプレイ、I/F、キーボード、マウス等により実現される。
(コンシステンシーグループ管理テーブル700の記憶内容)
ここで、コンシステンシーグループ管理テーブル700の記憶内容について説明する。
図12は、コンシステンシーグループ管理テーブル700の記憶内容の一例を示す説明図である。図12において、コンシステンシーグループ管理テーブル700は、エントリ番号、グループ名、ペア数、代表アドレス、コピー元のボリューム番号、コピー先のボリューム番号、チャンク数およびステータスを表す。
ここで、エントリ番号は、コンシステンシーグループGのエントリ番号である。グループ名は、コンシステンシーグループGの名称である。ペア数は、コンシステンシーグループGに登録されているコピー元のボリュームP(VDISK)とコピー先のボリュームS(VDISK)のペアの総数である。代表アドレスは、コピー先のストレージ装置内の代表PUに割り振られたリモートコピー用の論理的なIPアドレスである。代表PUおよび代表アドレスは任意に設定可能である。
コピー元のボリューム番号は、コピー元のボリュームPの識別子である。コピー先のボリューム番号は、コピー先のボリュームSの識別子である。チャンク数は、コピー元のデータのうちコピー先への転送が完了したチャンクの数である。ステータスは、コピー元のボリュームPとコピー先のボリュームSの状態を示す。ステータスには、例えば、Active、Reserved、Halt、Suspend、ErrorSuspend等の状態が設定される。
Activeは、リモートコピー中であることを示す状態である。Reservedは、リモートコピー用に予約済みであることを示す状態である。Haltは、不慮の事故等により回線異常が発生してリモートコピーが一時停止していることを示す状態である。Suspendは、意図的にリモートコピーを一時停止している状態である。ErrorSuspendは、コピー元のデータが壊れていることを示す状態である。
コンシステンシーグループ管理テーブル700によれば、例えば、コンシステンシーグループG1のグループ名「Kaikei−1」、ペア数「n」および代表アドレス「xxxx」を特定することができる。また、コンシステンシーグループG1に属するコピー元のボリュームPとコピー先のボリュームSとの対応関係を特定することができる。
(コンシステンシーグループ管理テーブル700の更新例)
つぎに、コンシステンシーグループ管理テーブル700の更新例について説明する。ここでは、PU#1が、グループ名「Kaikei−1」のコンシステンシーグループG1のグループ作成指示を受け付けた場合のコンシステンシーグループ管理テーブル700の更新例について説明する。ただし、コンシステンシーグループG1に属するボリューム群を、ボリュームP1,P2,S1,S2とする。
図13および図14は、コンシステンシーグループ管理テーブル700の更新例を示す説明図である。図13に示す(i)において、コンシステンシーグループ管理テーブル700は、コンシステンシーグループGが未設定の状態である。
図13に示す(ii)において、PU#1は、コンシステンシーグループG1のグループ作成指示を受け付けると、コンシステンシーグループ管理テーブル700に、エントリ番号「1」、グループ名「Kaikei−1」、ペア数「0」および代表アドレス「xxxx」を設定する。グループ名「Kaikei−1」および代表アドレス「xxxx」は、例えば、管理サーバMSのユーザによって指定される。代表アドレス「xxxx」は、PU#1が、リモートサイト(コピー先のストレージシステムSM)に問い合わせることにしてもよい。
図13に示す(iii)において、PU#1は、コンシステンシーグループ管理テーブル700に、リモートコピーを実施するコピー元のボリュームP1とコピー先のボリュームS1とのペアを登録する。そして、PU#1は、ペア数をインクリメントし、ステータスを「Reserved」に設定する。この時点のチャンク数は「0」である。
図14に示す(iv)において、PU#1は、コンシステンシーグループ管理テーブル700に、リモートコピーを実施するコピー元のボリュームP2とコピー先のボリュームS2とのペアを登録する。そして、PU#1は、ペア数をインクリメントし、ステータスを「Reserve」に設定する。この時点のチャンク数は「0」である。
図14に示す(v)において、コピー元のボリュームPとコピー先のボリュームSとのセッションを確立すると、PU#1は、ステータスを「Active」に設定する。
図14に示す(vi)において、コピー先のストレージ装置へのチャンク単位のデータ転送が完了する度に、PU#1は、チャンク数を更新する。
(ボリューム管理テーブル710の記憶内容)
つぎに、図15〜図17を用いて、ボリューム管理テーブル710の記憶内容について説明する。上述した構成情報は、例えば、ボリューム管理テーブル710に相当する。
図15は、ボリュームインデックステーブル1500の記憶内容の一例を示す説明図である。図15において、ボリュームインデックステーブル1500は、ボリューム番号、ボリューム名、稼働PU番号、ボリューム属性、ボリュームサイズ、ボリューム状態および再配置状況のフィールドを有する。各フィールドに情報を設定することで、ボリューム情報1500−1〜1500−nがレコードとして記憶される。
ここで、ボリューム番号は、VDISKの識別子である。ボリューム名は、VDISKの名称である。稼働PU番号は、VDISKが稼働しているPUの識別子である。ボリューム属性は、VDISKの属性である。ボリュームサイズは、業務サーバBSからみたVDISKのサイズ(GB)である。ボリューム状態は、VDISKにアクセスできるか否かを示す状態である。再配置状況は、VDISKの再配置状況を示す。
例えば、ボリューム情報1500−1は、VDISK1のボリューム名「Vdisk1」、稼働PU番号「1」、ボリューム属性「シンプロボリューム」、ボリュームサイズ「500」、ボリューム状態「正常」および再配置状況「再配置中」を示している。なお、ボリューム情報1500−nのように、ボリューム名が「NULL」のボリューム情報は、未作成のVDISKの情報である。
図16は、ミラーボリュームインデックステーブル1600の記憶内容の一例を示す説明図である。図16において、ミラーボリュームインデックステーブル1600は、ボリューム番号、ミラー数、ミラーボリューム番号1およびミラーボリューム番号2のフィールドを有する。各フィールドに情報を設定することで、ミラーボリューム情報(例えば、ミラーボリューム情報1600−1,1600−2)がレコードとして記憶される。
ここで、ボリューム番号は、ミラーボリュームの識別子である。ミラー数は、ミラーリングするボリュームの数である。ミラーボリューム番号1,2は、ミラーボリュームの実体であるVDISKの識別子である。例えば、ミラーボリューム情報1600−1は、VDISK2のミラー数「2」、ミラーボリューム番号1「127」およびミラーボリューム番号2「128」を示している。
図17は、ボリュームセグメントテーブル1700の記憶内容の一例を示す説明図である。図17において、ボリュームセグメントテーブル1700は、ボリューム番号、セグメントセット番号、セグメント番号、ストレージ装置、LUN番号、セグメント状態および再配置状況のフィールドを有する。各フィールドに情報を設定することで、セグメント情報(例えば、セグメント情報1700−1,1700−2)がレコードとして記憶される。
ここで、ボリューム番号は、VDISKの識別子である。セグメントセット番号は、VDISKを構成するセグメントセットの識別子である。セグメント番号は、セグメントセットを構成するセグメントの識別子である。ストレージ装置は、セグメントが属するSUの識別子である。LUN番号は、セグメントが割り当てられたLUNの識別子である。セグメント状態は、セグメントにアクセスできるか否かを示す状態である。再配置状況は、セグメントの再配置状況を示す。
例えば、セグメント情報1700−1は、VDISK1のセグメントセット1のセグメント1のストレージ装置「1」、LUN番号「1」、セグメント状態「有効」および再配置状況「ブランク(空)」を示している。
(再配置計画テーブル720の記憶内容)
つぎに、図18を用いて、再配置計画テーブル720の記憶内容について説明する。
図18は、再配置計画テーブル720の記憶内容の一例を示す説明図である。図18において、再配置計画テーブル720は、ボリューム番号、セグメントセット番号、セグメント番号、現ストレージ装置、現LUN番号、再配置ストレージ装置、再配置LUN番号および再配置状況のフィールドを有する。各フィールドに情報を設定することで、再配置計画情報(例えば、再配置計画情報1800−1〜1800−5)がレコードとして記憶される。
ここで、ボリューム番号は、VDISKの識別子である。セグメントセット番号は、VDISKを構成するセグメントセットの識別子である。セグメント番号は、セグメントセットを構成するセグメントの識別子である。現ストレージ装置は、再配置前のセグメントが属するSUの識別子である。現LUN番号は、再配置前のセグメントが割り当てられたLUNの識別子である。再配置ストレージ装置は、再配置後のセグメントが属するSUの識別子である。再配置LUN番号は、再配置後のセグメントが割り当てられるLUNの識別子である。再配置状況は、セグメントの再配置状況を示す。
例えば、再配置計画情報1800−1は、VDISK1のセグメントセット1のセグメント1の現ストレージ装置「1」、現LUN番号「1」、再配置ストレージ装置「1」、再配置LUN番号「1」および再配置状況「再配置不要」を示している。
(セグメントの割当量qの偏りの判定例)
つぎに、ストレージシステムSM内の各LUNのセグメントの割当量qの偏りの判定例について説明する。割当量qに偏りがある状態とは、割当中のセグメントを再配置したほうが望ましい程度にセグメントの割当状況が偏っている状態である。PU#1は、ストレージシステムSM内の各LUNのセグメントの割当量qを監視し、「偏りあり」と検出した場合に、装置管理GUI制御部により、偏りが発生している旨を通知する。監視契機としては、例えば、ノードの増設にともなうシステム構成変更時、定期的な監視時間の到来、SUの搭載量の増加時などがある。
具体的には、例えば、まず、PU#1は、ボリューム管理テーブル710を参照して、ストレージシステムSM内の各LUNのセグメントの割当量qを算出する。つぎに、PU#1は、ストレージシステムSM内の全LUNのうち、セグメントの割当量qが最大であるLUNの最大割当量qmaxとセグメントの割当量qが最小であるLUNの最小割当量qminとを特定する。
そして、PU#1は、最大割当量qmaxと最小割当量qminとの差分dが、最大割当量qmaxの所定の割合α以上、かつ、差分dが所定のサイズβ以上である場合に、ストレージシステムSM内の各LUNのセグメントの割当量qに偏りがあると判定する。所定の割合αおよびサイズβは、任意に設定可能である。割合αは、例えば、5〜10[%]程度の値に設定される。サイズβは、例えば、64[GB]や128[GB]程度の値に設定される。
なお、各LUNのセグメントの割当量qは、例えば、各LUNに割り当てられているボリュームのセグメント数から求めることができる。例えば、セグメントの容量を256[MB]とし、あるLUNに割り当てられているセグメント数が「2」の場合、このLUNの割当量qは512[MB]となる。セグメントは、所定容量で規定された管理単位の記憶領域であり、ホストからボリュームへの記録再生指示アドレス(LBA)等の位置情報で管理される。
(ボリュームの再配置計画)
つぎに、ボリューム(VDISK)の再配置計画について説明する。PU#1は、SUを構成するLUNにおけるセグメントの割当量qにより再配置計画を立てる。このため、増設されるSUの搭載容量が既存のSUの搭載容量と異なる場合であっても均等な再配置を行うことができる。
図19は、ボリュームの再配置計画例を示す説明図である。図19の1項に示すように、8.4[TB]の基本セット(SU#1)に、8.4[TB]の拡張セット(SU#2)を増設する場合を想定する。この場合、PU#1は、SU#1とSU#2との間で各LUNのセグメントの割当量qが均等になるように分散配置する。
図19の2項に示すように、8.4[TB]の基本セット(SU#1)に、16.8[TB]の拡張セット(SU#2)を増設する場合を想定する。この場合、PU#1は、SU#1とSU#2との間で各LUNのセグメントの割当量qが均等になるように分散配置する。
図19の3項に示すように、8.4[TB]の基本セット(SU#1)と8.4[TB]の拡張セット(SU#2)に、16.8[TB]の拡張セット(SU#3)を増設する場合を想定する。この場合、PU#1は、SU#1とSU#2とSU#3との間で各LUNのセグメントの割当量qが均等になるように分散配置する。なお、ここでは、PUとSUを1セットとする拡張セットを増設する場合について説明したが、SUのみを拡張セットとして増設することにしてもよい。
ここで、図20を用いて、スケールアウトによって増設されるSU#2に対して、既存のボリュームがどのように再配置されるのかを説明する。ここでは、スケールアウト後に自動で再配置処理が起動される場合について説明するが、管理サーバMSのGUI画面から再配置指示を手動で行うこともできる。
図20は、ボリュームの再配置例を示す説明図(その1)である。図20において、ボリューム1を構成するセグメントA0〜A31と、ボリューム2を構成するセグメントB0〜B15とがSU#1に配置されている(図20中、再配置前)。なお、図20中、各SU#1,#2内の円柱は、各SU#1,#2内のLUNを表す。
まず、PU#1は、SU#1とSU#2との間で各LUNのセグメントの割当量qが均等になるように再配置計画テーブル720を作成する(図20中、再配置の案)。なお、各セグメントの配置位置は暫定的なものである。
つぎに、PU#1は、再配置計画テーブル720を参照して、ボリューム1のセグメントA0〜A31について再配置する。ここでは、ボリューム1のセグメントA8〜A15およびA24〜A31がSU#2に再配置されている(図20中、再配置中)。
つぎに、PU#1は、再配置計画テーブル720を参照して、ボリューム2のセグメントB0〜B15について再配置する。ここでは、ボリューム2のセグメントB8〜B15がSU#2に再配置されている(図20中、再配置後)。これにより、SU#1とSU#2とで物理容量としては均等となる。
なお、LUNの使用状況は不連続に見えるが、ボリュームがワイドストライピングされたセグメントで構成されていれば性能面で問題はない。すなわち、LUNの使用状況の不連続性は性能面に影響しない。このため、不要な移動処理を避ける意味でもセグメントA16〜A23やセグメントB0〜B7を移動させないほうが、装置として無駄な処理を削減することができる。
また、各PUや各SUの保守点検等で一時的に再配置処理を止めたい場合のために、ストレージシステムSMは、再配置処理の一時停止機能および再開機能を有する。また、ストレージシステムSMは、再配置処理の停止機能を有する。ただし、再配置処理を停止すると、一度計画した再配置計画を破棄することになり、再配置を再度実行する際に、ストレージシステムSM内の各LUNのセグメントの割当量qの偏り判定および再計画テーブル作成の処理が実行されることとなる。
これに対し、一時停止機能を利用した場合は、再配置の一時停止中、PU#1は、ボリュームの再配置のために立てた再配置計画を破棄せずに保持しておく。そして、PU#1は、再開指示を受けた場合に、ボリューム管理テーブル710および再配置計画テーブル720を参照して、再開すべきエントリから再配置処理を継続する。これにより、再配置中の一時停止および一時停止からの再開が可能となる。
(各種テーブル710,720の更新例)
つぎに、図21〜図24を用いて、各種テーブル710,720の更新例について説明する。
図21は、ボリュームの配置例を示す説明図である。図21において、VDISK1を構成するセグメント#1〜#16がSU#1に配置されている。また、基本ノードN1に、PU#3とSU#2をセットとする増設ノードN2が増設されている。この場合、ストレージシステムSM内の各LUNのセグメントの割当量qに偏りが生じるため、VDISK1の再配置処理が行われる。
図22は、ボリュームインデックステーブル1500の更新例を示す説明図である。図22において、基本ノードN1に増設ノードN2が増設されると、ボリュームインデックステーブル1500内のボリューム情報2200−1の再配置状況が「再配置待」から「再配置中」に更新される。
図23は、ボリュームセグメントテーブル1700の更新例を示す説明図である。図23の(23−1)において、ボリュームセグメントテーブル1700には、ボリューム番号「1」のVDISK1のセグメント情報が記憶されている。セグメントセットを構成する8つのセグメントは、基本的には異なる8つのLUNに連続に配置される(例えば、図23中、実線枠)。
ただし、VDISK1を作成する前に作成済みのボリュームがあると、そのボリュームに割り当てられていたLUNを削除するタイミングでVDISK1にLUNが割り当てられる場合がある。この場合、連番でLUNが空いていないと、セグメントセットを構成するセグメントが配置されるLUNが平準化されないことがある(例えば、図23中、点線枠)。
図23の(23−2)において、PU#1のボリューム管理Mは、再配置計画テーブル720(例えば、後述の図24参照)が作成されると、ボリュームセグメントテーブル1700の再配置状況を「再配置処理中」とする。つぎに、ボリューム管理Mは、再配置計画テーブル720を参照して、再配置状況が「再配置待ち」となっているセグメントについて、各PU用に再配置制御スレッドを生成し、再配置を実施する。
各PUの再配置制御スレッドは、再配置すべきセグメントについてボリューム管理Aに再配置のためのコピー処理を指示する。ボリューム管理Mは、ボリューム管理Aから再配置制御スレッドに対してコピー完了を応答してきたら、再配置計画テーブル720の再配置状況を「再配置完了」に変更するとともに、ボリュームセグメントテーブル1700の再配置状況を「ブランク」に変更する。
図24は、再配置計画テーブル720の更新例を示す説明図である。図24の(24−1)において、PU#1は、VDISK1のセグメントセット単位ですべてのSUに割り付け、かつ、セグメントを割り付ける。また、PU#1は、LUN番号についても連続LUNを利用するように割り付けるように計画を立てる。具体的には、例えば、PU#1は、偶数セグメントをSU#2の連続LUNに割り付けるように計画する。また、PU#1は、奇数セグメントをSU#1の連続LUNに割り付けるように計画する。
図24の(24−2)において、PU#1は、上述したように機械的に再配置計画を立てた後、再配置によるデータ移動のためのコピー処理が少なくなるように再配置計画の見直しを行う。具体的には、例えば、PU#1は、現状(現ストレージ装置および現LUN番号)と、再配置後(再配置ストレージ装置および再配置LUN番号)とをセグメントセット単位で比べる。
例えば、セグメントセット番号3については、現LUN番号と再配置LUN番号がすべて不一致であるが、現LUN番号を見ると2つのセグメントが同じLUN番号に割り当たっている以外は、異なるLUNに割り振られている。このため、PU#1は、同じLUNに2つのセグメントが割り付けられているものだけをその他のLUNに割り振るように再計画する(LUN番号的にはセグメント順ではないが、異なるLUNに割り付けられているならば性能影響はないと判断)。
再配置すべきセグメントについては、PU#1は、再配置状況を「再配置待ち」とし、かつ、ボリュームセグメントテーブル1700の再配置状況を「再配置処理中」とする。また、再配置不要なセグメントについては、PU#1は、再配置計画テーブル720の再配置状況を「再配置不要」とする。
(同一SU内の再配置計画)
つぎに、同一SUにおいて再配置によるセグメント移動のためのコピー処理が少なくなるようにする再配置計画について説明する。同一SU内の再配置計画は、例えば、SU間で各LUNのセグメントの割当量qが均等になるようにするSU間の再配置計画が行われた後に作成される。
図25は、ボリュームの再配置例を示す説明図(その2)である。図25において、あるSU(例えば、SU#1)内にセグメントa〜pから構成されるセグメントセットが「再配置前」のように配置されていたとする。この場合、例えば、PU#1は、「再配置の案」のように、セグメントの未使用領域(図25中、白抜き四角)とセグメント移動により空くセグメントを利用してセグメントa〜hを整列させることができる。なお、図25中、黒塗り四角は、セグメントの使用中領域である。
ただし、セグメントa〜dおよびセグメントe〜gが互いに異なるRAIDグループに配置されているので、セグメントhだけを別のRAIDグループに移動すればIOアクセス性能の観点からは十分改善される。このため、PU#1は、セグメントhだけを移動させる再配置計画を立てる。
この結果、「再配置後」のように、セグメントhだけが別のLUNに移動されて、LUN間で均等になる。このように、同一SUにおいて再配置によるセグメント移動のためのコピー処理が少なくなるようにする再配置計画を立てることにより、余分なセグメントの移動を抑えつつ、アクセス性能を向上させることができる。また、再配置のためにPU/SU間のアクセスも削減することができる。
(再配置処理の具体的処理内容)
つぎに、ボリュームの再配置処理の具体的な処理内容の一例について説明する。各PUは、再配置処理によるセグメント移動による内部的な回線帯域の使用、および各PUのCPU負荷の影響により業務の運用に支障が出ないように、再配置処理を制御する。
具体的には、例えば、PU(例えば、PU#1)は、業務サーバBSからの1秒当たりのアクセス数(IOPS:Input Output Per Second)が、PUが処理できる最大IOPSに達しているか否かを判断する。ここで、業務サーバBSからのIOPSが最大IOPSに達している場合、PUは、再配置処理をせず業務IOを優先させる。
一方、業務サーバBSからのIOPSが最大IOPSに達していない場合は、PUは、空きのIOPS分を利用して再配置処理を行う。なお、空きのIOPSとは、最大IOPSから現IOPSを引いたものである。これにより、業務停止することなく、また、業務への影響を最小限に抑えつつボリュームの再配置を行うことができる。
ただし、再配置処理の実行によるPU/SU間の帯域利用およびPUのCPU負荷が増大することにより、業務IOのIOPSが減少することが考えられる。そこで、PUは、現IOPSとPUの最大IOPSの差分だけをみるのではなく、再配置処理により現IOPSの減少率が所定の割合(例えば、15[%])を超える場合には、再配置処理を間引くことにより業務のIOPSを維持できるようにしてもよい。
具体的には、例えば、PUは、以下のように、現IOPSが最大IOPSの95%以上である場合は再配置処理を抑止するために処理中にスリープ(例えば、1〜5[秒]程度待つ)を入れることにしてもよい。なお、xは、PUの最大IOPSであり、yは、現IOPSである。また、PUの最大IOPSは、予め設定されている。
0.95x≦y ・・・再配置処理をスリープさせる
0.95x>y ・・・再配置処理を稼働させる
また、PUは、再配置を稼働させたことにより、「0.85(直前y)≦(現y)」となった場合も、例えば、再配置処理中にスリープを入れることにより業務への影響を抑える。なお、「直前y」は、例えば、再配置処理直前の現IOPSである。
(ストレージシステムSMの各種処理手順)
つぎに、ストレージシステムSMの各種処理手順について説明する。まず、ストレージシステムSMのリモートコピー処理手順について説明する。ここでは、ストレージシステムSMの基本ノードN1(以下、「ローカルサイト」と称する)と、他のストレージシステムSMの基本ノードN1(以下、「リモートサイト」と称する)との間のリモートコピーを例に挙げて説明する。
<リモートコピー処理手順>
図26〜図29は、ストレージシステムSM間のリモートコピー処理手順の一例を示すシーケンス図である。図26のシーケンス図において、管理サーバMSの装置管理GUIは、ユーザの操作入力により、リモートコピーの準備を行う(ステップS2601)。具体的には、例えば、装置管理GUIは、コンシステンシーグループGのグループ名、ペア数、代表アドレスおよび代表アドレスを割り振るPU番号等の指定を受け付ける。そして、装置管理GUIは、ローカルサイトのPU#1の装置管理GUI管理部#1に、コンシステンシーグループGの作成指示を通知する。
そして、ローカルサイトのPU#1のクラスタ制御Mは、管理サーバMSの装置管理GUIからのグループ作成指示を受け付けると、コンシステンシーグループGを作成する(ステップS2602)。具体的には、例えば、クラスタ制御Mは、構成管理DB#1内のコンシステンシーグループ管理テーブル700を更新する(例えば、図13(ii)参照)。
つぎに、管理サーバMSの装置管理GUIは、ユーザの操作入力により、コンシステンシーグループGに属するコピー元のボリュームPとコピー先のボリュームSのペアを設定する(ステップS2603)。具体的には、例えば、装置管理GUIは、コピー元のボリュームPのボリューム番号とコピー先のボリュームSのボリューム番号を受け付ける。
そして、ローカルサイトのPU#1のクラスタ制御Mは、コピー元のボリュームPとコピー先のボリュームSをコンシステンシーグループGに登録する(ステップS2604)。具体的には、例えば、ローカルサイトのPU#1のクラスタ制御Mは、コピー元のボリュームPをリモートコピー対象にするとともに、リモートサイトのPU#1のクラスタ制御Mと通信して、コピー先のボリュームSをリモートコピー対象にする。そして、ローカルサイトのPU#1のクラスタ制御Mは、構成管理DB#1内のコンシステンシーグループ管理テーブル700を更新する(例えば、図13(iii)参照)。ステップS2603およびステップS2604は、コンシステンシーグループGに登録するペア数分だけ繰り返す。
つぎに、リモートサイトのPU#1のボリューム管理Mは、ローカルサイトのPU#1のクラスタ制御Mの初期化指示に応じて、コピー先のボリュームSの初期設定を行う(ステップS2605)。なお、リモートサイトのPU#1は、ローカルサイト内のコピー先のPU(PU#1,#2のいずれか一方のPU)と通信する。
図27のシーケンス図において、管理サーバMSの装置管理GUIは、ユーザの操作入力により、コンシステンシーグループGのリモートコピーを起動する(ステップS2701)。そして、ローカルサイトのPU#1のI/O制御部#1は、ローカルサイトのPU#1のクラスタ制御Mのセッション状態設定指示に応じて、コピー元のボリュームPとコピー先のボリュームSのセッション状態(ステータス)をActiveに変更する(ステップS2702)。この際、ローカルサイトのPU#1は、リモートサイト内のコピー先のPU(PU#1,#2のいずれか一方のPU)だけと通信する。
そして、リモートサイトのPU#1のI/O制御部#1(または、PU#2のI/O制御部#2)は、構成管理DB#1内のコンシステンシーグループ管理テーブル700を更新する(例えば、図13(v)参照)。同様に、ローカルサイトのPU#1のI/O制御部#1は、構成管理DB#1内のコンシステンシーグループ管理テーブル700を更新する(例えば、図13(v)参照)。
また、ローカルサイトのPU#2のI/O制御部#2は、ローカルサイトのPU#1のクラスタ制御Mのセッション状態設定指示に応じて、コピー元のボリュームPとコピー先のボリュームSのセッション状態をActiveに変更する(ステップS2703)。この際、ローカルサイトのPU#2は、リモートサイト内のコピー先のPU(PU#1,#2のいずれか一方のPU)だけと通信する。
そして、リモートサイトのPU#1のI/O制御部#1(または、PU#2のI/O制御部#2)は、構成管理DB#1内のコンシステンシーグループ管理テーブル700を更新する(例えば、図13(v)参照)。同様に、ローカルサイトのPU#2のI/O制御部#2は、構成管理DB#1内のコンシステンシーグループ管理テーブル700を更新する(例えば、図13(v)参照)。
図28のシーケンス図において、ローカルサイトのPU#1のクラスタ制御Mは、ローカルサイトのPU#1のボリューム管理Mに、コピー元のボリュームPのスナップショットの作成指示を通知する(ステップS2801)。この結果、ローカルサイトのPU#1のボリューム管理Mは、コンシステンシーグループ管理テーブル700を参照して、ローカルサイトのPU#1,#2のボリューム管理A#1,#2に、コピー元のボリュームPのスナップショットの作成指示を通知する。
そして、ローカルサイトのPU#1,#2のボリューム管理A#1,#2は、コピー元のボリュームPのスナップショットを作成する(ステップS2802)。この結果、ローカルサイトのPU#1のボリューム管理Mは、スナップショット作成に伴う構成管理DB#1の更新を行う。
つぎに、ローカルサイトのPU#1のクラスタ制御Mは、ローカルサイトのPU#1のI/O制御部#1に、コピー元のボリュームPのデータ転送処理指示を通知する(ステップS2803)。初回(時点t1)のデータ転送処理指示は、時点t1のコピー元のボリュームPのスナップショットのデータを、コピー先のPU(リモートサイトのPU#1またはPU#2)に転送するよう指示するものである。2回目以降(時点tp)のデータ転送処理指示は、時点tpのコピー元のボリュームPの差分データ、すなわち、ボリュームPの差分格納領域A(t(p−1))のデータを、コピー先のPU(リモートサイトのPU#1またはPU#2)に転送するよう指示するものである。
そして、ローカルサイトのPU#1のI/O制御部#1は、データ転送処理指示に応じて、SU#1から転送データを読み出して(ステップS2804)、コピー先のPU(リモートサイトのPU#1またはPU#2)に転送する(ステップS2805)。ステップS2804およびステップS2805は、転送データ分繰り返す。
つぎに、リモートサイトのPU#1のI/O制御部#1(または、PU#2のI/O制御部#2)は、ローカルサイトのPU#1のI/O制御部#1から転送データを受信したことに応じて、受信した転送データをSU#1に格納する(ステップS2806)。
具体的には、例えば、初回(時点t1)のデータ転送処理時は、リモートサイトのPU#1のI/O制御部#1(または、PU#2のI/O制御部#2)は、時点t1のコピー元のボリュームPのスナップショットのデータを、コピー先のボリュームSkに格納するまた、2回目以降(時点tp)のデータ転送処理時は、リモートサイトのPU#1のI/O制御部#1(または、PU#2のI/O制御部#2)は、時点tpのコピー元のボリュームPkの差分データを、ボリュームSの差分格納領域A’(t(p−1))に格納する。
つぎに、リモートサイトのPU#1のボリューム管理Mは、I/O制御部#1(または、PU#2のI/O制御部#2)からデータ転送完了通知を受け付けたことに応じて、リモートサイトのPU#1のボリューム管理A#1(または、PU#2のボリューム管理A#2)に、転送データをスナップショットとして構築指示を通知する(ステップS2807)。
そして、リモートサイトのPU#1のボリューム管理A#1(または、PU#2のボリューム管理A#2)は、コピー先のボリュームSのスナップショットを作成する(ステップS2808)。
図29のシーケンス図において、ローカルサイトのPU#1のクラスタ制御Mは、ローカルサイトのPU#2のI/O制御部#2に、コピー元のボリュームPのデータ転送処理指示を通知する(ステップS2901)。
そして、ローカルサイトのPU#1のI/O制御部#2は、データ転送処理指示に応じて、SU#1から転送データを読み出して(ステップS2902)、コピー先のPU(リモートサイトのPU#1またはPU#2)に転送する(ステップS2903)。ステップS2902およびステップS2903は、転送データ分繰り返す。
つぎに、リモートサイトのPU#1のI/O制御部#1(または、PU#2のI/O制御部#2)は、ローカルサイトのPU#1のI/O制御部#2から転送データを受信したことに応じて、受信した転送データをSU#1に格納する(ステップS2904)。
つぎに、リモートサイトのPU#1のボリューム管理Mは、I/O制御部#1(または、PU#2のI/O制御部#2)からデータ転送完了通知を受け付けたことに応じて、リモートサイトのPU#1のボリューム管理A#1(または、PU#2のボリューム管理A#2)に、転送データをスナップショットとして構築指示を通知する(ステップS2905)。
そして、リモートサイトのPU#1のボリューム管理A#1(または、PU#2のボリューム管理A#2)は、コピー先のボリュームSのスナップショットを作成する(ステップS2906)。
以降、ローカルサイトのPU#1のクラスタ制御Mは、コンシステンシーを保障するための時間間隔ごとに、ローカルサイトのPU#1のボリューム管理Mに、コピー元のボリュームPのスナップショットの作成指示を通知する。この結果、図28に示したステップS2801〜S2808および図29に示したステップS2901〜S2906の処理が、コンシステンシーを保障するための時間間隔ごとに繰り返される。
これにより、定期的にコンシステンシーグループGに属するボリュームP1〜PKのスナップショットを同時に取ることができ、一定時間間隔ごとのボリューム間でのデータの書込順序の一貫性を保つことができる。
<フェイルオーバ時のリモートコピー処理手順>
つぎに、ストレージシステムSM間のリモートコピーの実施中にコピー先のボリュームSがフェイルオーバした場合のリモートコピー処理手順について説明する。ここでは、リモートサイトのPU#1がダウンして、リモートサイトのPU#2にフェイルオーバした場合を例に挙げて説明する。
図30および図31は、ストレージシステムSM間のフェイルオーバ時のリモートコピー処理手順の一例を示すシーケンス図である。図30のシーケンス図において、ローカルサイトのPU#1のクラスタ制御Mは、ローカルサイトのPU#1のボリューム管理Mに、コピー元のボリュームPのスナップショットの作成指示を通知する(ステップS3001)。
そして、ローカルサイトのPU#1,#2のボリューム管理A#1,#2は、コピー元のボリュームPのスナップショットを作成する(ステップS3002)。つぎに、ローカルサイトのPU#1のクラスタ制御Mは、ローカルサイトのPU#1のI/O制御部#1に、コピー元のボリュームPのデータ転送処理指示を通知する(ステップS3003)。
そして、ローカルサイトのPU#1のI/O制御部#1は、データ転送処理指示に応じて、SU#1から転送データを読み出して(ステップS3004)、コピー先のPU(リモートサイトのPU#1またはPU#2)に転送する(ステップS3005)。ステップS3004およびステップS3005は、転送データ分繰り返す。
つぎに、リモートサイトのPU#1のI/O制御部#1(または、PU#2のI/O制御部#2)は、ローカルサイトのPU#1のI/O制御部#1から転送データを受信したことに応じて、受信した転送データをSU#1に格納する(ステップS3006)。
つぎに、リモートサイトのPU#1のボリューム管理Mは、PU#1のI/O制御部#1(または、PU#2のI/O制御部#2)からデータ転送完了通知を受け付けたことに応じて、PU#1のボリューム管理A#1(または、PU#2のボリューム管理A#2)に、転送データをスナップショットとして構築指示を通知する(ステップS3007)。
そして、リモートサイトのPU#1のボリューム管理A#1(または、PU#2のボリューム管理A#2)は、コピー先のボリュームSのスナップショットを作成する(ステップS3008)。
ここで、リモートサイトのPU#2がダウン(または、コピー先のボリュームSがPU#2上に存在しない)した場合を想定する。
図31のシーケンス図において、ローカルサイトのPU#1のクラスタ制御Mは、ローカルサイトのPU#2のI/O制御部#2に、コピー元のボリュームPのデータ転送処理指示を通知する(ステップS3101)。
・リモートサイトのPU#1に転送する場合
ローカルサイトのPU#2のI/O制御部#2は、データ転送処理指示に応じて、SU#1から転送データを読み出して(ステップS3102)、コピー先であるリモートサイトのPU#1に転送する(ステップS3103)。
つぎに、リモートサイトのPU#1のI/O制御部#1は、ローカルサイトのPU#2のI/O制御部#2から転送データを受信したことに応じて、受信した転送データをSU#1に格納する(ステップS3104)。
つぎに、リモートサイトのPU#1のボリューム管理Mは、I/O制御部#1からデータ転送完了通知を受け付けたことに応じて、リモートサイトのPU#1のボリューム管理A#1に、転送データをスナップショットとして構築指示を通知する(ステップS3105)。そして、リモートサイトのPU#1のボリューム管理A#1は、コピー先のボリュームSのスナップショットを作成する(ステップS3106)。
・リモートサイトのPU#2に転送する場合
ローカルサイトのPU#2のI/O制御部#2は、データ転送処理指示に応じて、SU#1から転送データを読み出して(ステップS3102)、コピー先であるリモートサイトのPU#2に転送する(ステップS3103)。
ここで、リモートサイトのPU#2との通信が不能の場合、ローカルサイトのPU#2のI/O制御部#2は、コンシステンシーグループ管理テーブル700に登録された代表アドレスを用いて、代表PU(ここでは、PU#1)に、コピー先のボリュームSの移動先のPUを問い合わせる(ステップS3107)。
リモートサイトの代表PU(PU#1)のクラスタ制御Mは、移動先のPUの問い合わせを受け受けたことに応じて、コピー先のボリュームSの移動先のPU#1を通知する(ステップS3108)。なお、コピー先のボリュームSの移動先のPUは、代表PUが管理している。
そして、ローカルサイトのPU#2のI/O制御部#2は、リモートサイトの代表PU(PU#1)から通知された移動先のPU#1に、SU#1から読み出した転送データを転送する(ステップS3109)。
つぎに、リモートサイトのPU#1のI/O制御部#1は、ローカルサイトのPU#2のI/O制御部#2から転送データを受信したことに応じて、受信した転送データをSU#1に格納する(ステップS3110)。
つぎに、リモートサイトのPU#1のボリューム管理Mは、I/O制御部#1からデータ転送完了通知を受け付けたことに応じて、リモートサイトのPU#1のボリューム管理A#1に、転送データをスナップショットとして構築指示を通知する(ステップS3111)。そして、リモートサイトのPU#1のボリューム管理A#1は、コピー先のボリュームSのスナップショットを作成する(ステップS3112)。
これにより、コピー元・コピー先のセッション関係が切れた際に、コピー先のストレージ装置102内の個々のPUに対して問い合わせを行うことなく、接続先のPUを効率的に探すことができる。
<ノード増設処理手順>
つぎに、ストレージシステムSMのノード増設処理手順について説明する。ここでは、基本ノードN1に増設ノードN2を追加する場合を例に挙げて、ストレージシステムSMのノード増設処理手順について説明する。
図32および図33は、ストレージシステムSMのノード増設処理手順の一例を示すシーケンス図である。図32のシーケンス図において、CE(Customer Engineer)は、基本ノードN1に増設ノードN2を物理的に接続し、SU#2の電源を投入する(ステップS3201)。
クラスタ制御Mは、SU#2の増設を検出する(ステップS3202)。クラスタ制御Mは、装置管理GUI制御部#1にSU#2の増設検出を通知する(ステップS3203)。装置管理GUI制御部#1は、SU増設検出事象を管理サーバMSのGUIに出力する(ステップS3204)。
クラスタ制御Mは、SU#2のストレージ制御部#2に対して、新たな管理用IPアドレスの割り付けを指示する(ステップS3205)。SU#2のストレージ制御部#2は、管理用IPアドレスを指示された値に設定する(ステップS3206)。クラスタ制御Mは、PU#1のSU制御部#1とPU#2のSU制御部#2にSU#2への接続を指示する(ステップS3207)。
SU制御部#1は、SU#2の管理DB用のLUNおよびユーザデータ用のLUNを検出する(ステップS3208)。SU制御部#2は、SU#2の管理DB用のLUNおよびユーザデータ用のLUNを検出する(ステップS3209)。SU制御部#1は、検出したLUNに対してログイン処理を行う(ステップS3210)。SU制御部#2は、検出したLUNに対してログイン処理を行う(ステップS3211)。
SU制御部#1は、SU#2との接続完了をクラスタ制御Mに通知する(ステップS3212)。SU制御部#2は、SU#2との接続完了をクラスタ制御Mに通知する(ステップS3213)。クラスタ制御Mは、装置管理GUI制御部#1にSU#2の追加完了を通知する(ステップS3214)。装置管理GUI制御部#1は、SU追加完了事象を管理サーバMSのGUIに出力する(ステップS3215)。
CEは、増設ノードN2のPU#3の電源を投入する(ステップS3216)。クラスタ制御Mは、PU#3の増設を検出すると、装置管理GUI制御部#1にPU#3の増設検出を通知する(ステップS3217)。装置管理GUI制御部#1は、PU検出事象を管理サーバMSのGUIに出力する(ステップS3218)。
図33のシーケンス図において、クラスタ制御Mは、検出したPU#3のIPアドレスの設定をPU制御部#3に指示する(ステップS3219)。PU制御部#3は、IPアドレスを管理用IPアドレスに変更する(ステップS3220)。クラスタ制御Mは、PU#3のSU制御部#3にSU#1およびSU#2への接続を指示する(ステップS3221)。
SU制御部#3は、SU#1の管理DB用のLUNおよびユーザデータ用のLUNを検出する(ステップS3222)。SU制御部#3は、検出したLUNに対してログイン処理を行う(ステップS3223)。SU制御部#3は、SU#2の管理DB用のLUNおよびユーザデータ用のLUNを検出する(ステップS3224)。
SU制御部#3は、検出したLUNに対してログイン処理を行う(ステップS3225)。SU制御部#3は、SU#1およびSU#2との接続完了をクラスタ制御Mに通知する(ステップS3226)。クラスタ制御Mは、PU#2のクラスタ制御部#2およびPU#3のクラスタ制御部#3に対してクラスタ変更を指示する(ステップS3227)。
クラスタ制御Mは、PU#3をクラスタ管理情報に組み込むことにより、クラスタ構成をPU#1,#2,#3に更新する(ステップS3228)。クラスタ制御部#2は、PU#3をクラスタ管理情報に組み込むことにより、クラスタ構成をPU#1,#2,#3に更新する(ステップS3229)。クラスタ制御部#3は、PU#3をクラスタ管理情報に組み込むことにより、クラスタ構成をPU#1,#2,#3に更新する(ステップS3230)。
クラスタ制御Mは、装置管理GUI制御部#1にPU#3の追加完了を通知する(ステップS3231)。装置管理GUI制御部#1は、PU追加完了事象を管理サーバMSのGUIに出力する(ステップS3232)。装置管理GUI制御部#1は、スケールアウトボタンを管理サーバMSのGUIに出力する(ステップS3233)。
利用者が、接続および内部的な装置組み込みが完了したことを了承する意味で、管理サーバMSのGUI上の「スケールアウトボタン」をクリックすると増設処理が完了する。スケールアウトの完了指示により、ストレージシステムSMとしてのストレージ容量はSU#2の分だけ増加し、SU#2上にも新たなデータを格納できるようになる。
<再配置処理手順>
つぎに、ストレージシステムSMの再配置処理手順について説明する。再配置処理は、例えば、ストレージシステムSMのスケールアウト完了後、または管理サーバMSのGUI画面から再配置指示を行った場合に実行される。
図34〜図37は、ストレージシステムSMの再配置処理手順の一例を示すシーケンス図である。図34のシーケンス図において、管理サーバMSの装置管理GUIは、スケールアウト指示または再配置指示をPU#1の装置管理GUI制御部#1に通知する(ステップS3401)。スケールアウト指示は、例えば、GUI画面上の「スケールアウトボタン」がクリックされると通知される。また、再配置指示は、例えば、GUI画面上の「再配置ボタン」がクリックされると通知される。
PU#1の装置管理GUI制御部#1は、スケールアウト指示を受け付けたか否かを判断する(ステップS3402)。ここで、スケールアウト指示を受け付けた場合(ステップS3402:Yes)、装置管理GUI制御部#1からボリューム管理Mにスケールアウト指示が通知され、ボリューム管理Mは、追加されたSU#2の容量分をストレージシステムSM全体の容量に加えて、SU#2の領域も利用できる状態にする(ステップS3403)。
一方、再配置指示を受け付けた場合(ステップS3402:No)、装置管理GUI制御部#1は、ボリューム管理Mに再配置指示を通知する(ステップS3404)。ボリューム管理Mは、構成管理DBからボリューム管理テーブル710を読み出す(ステップS3405)。
図35のシーケンス図において、ボリューム管理Mは、ボリューム管理テーブル710を参照して、ストレージシステムSM内の各LUNのセグメントの割当量qを算出する(ステップS3406)。ボリューム管理Mは、算出した各LUNのセグメントの割当量qに基づいて、ストレージシステムSM内の各LUNのセグメントの割当量qに偏りがあるか否かを判断する(ステップS3407)。
ここで、偏りがない場合(ステップS3407:No)、ボリューム管理Mは、図37のステップS3419に移行する。一方、偏りがある場合(ステップS3407:Yes)、ボリューム管理Mは、再配置計画を立てて再配置計画テーブル720を作成する(ステップS3408)。この際、ボリューム管理Mは、再配置すべきセグメントについて、再配置計画テーブル720の再配置状況を「再配置待ち」にするとともに、ボリュームセグメントテーブル1700の再配置状況を「再配置処理中」にする。
ボリューム管理Mは、再配置計画テーブル720を参照して、各PU#1,#2,#3の再配置制御スレッドを生成する(ステップS3409)。各PU#1,#2,#3の再配置制御スレッドは、ボリューム管理Mから指示されたボリュームの再配置をセグメント単位で各PU#1,#2,#3のボリューム管理A#1,#2,#3に指示する(ステップS3410)。
具体的には、例えば、各PU#1,#2,#3の再配置制御スレッドは、各PU#1,#2,#3のボリューム管理A#1,#2,#3に再配置すべきディスク情報(ディスクを特定するための情報、移動すべきセグメント)および移動先の情報を通知する。
図36のシーケンス図において、各ボリューム管理A#1,#2,#3は、業務IOの現IOPSが最大IOPSの95%以上か否かを判断する(ステップS3411)。ここで、現IOPSが最大IOPSの95%以上の場合(ステップS3411:Yes)、各ボリューム管理A#1,#2,#3は、一定時間スリープして(ステップS3412)、ステップS3411に戻る。
一方、現IOPSが最大IOPSの95%未満の場合(ステップS3411:No)、各ボリューム管理A#1,#2,#3は、指示に従ってセグメントのコピーを行うことにより、指示されたセグメントを更新する(ステップS3413)。
各ボリューム管理A#1,#2,#3は、業務IOのIOPSが15%ダウンしたか否かを判断する(ステップS3414)。ここで、15%ダウンした場合(ステップS3414:Yes)、各ボリューム管理A#1,#2,#3は、一定時間スリープして(ステップS3415)、ステップS3414に戻る。
一方、15%ダウンしていない場合(ステップS3414:No)、各ボリューム管理A#1,#2,#3は、指示を依頼してきた各PU#1,#2,#3の再配置制御スレッドに対してコピー完了を通知する(ステップS3416)。なお、コピー完了の通知を受けた再配置制御スレッドは、コピー完了したセグメントについて、再配置計画テーブル720の再配置状況を「再配置完了」にするとともに、ボリュームセグメントテーブル1700の再配置状況をブランクにする。
図37のシーケンス図において、各PU#1,#2,#3の再配置制御スレッドは、再配置計画テーブル720を参照して、再配置していない残セグメントがあるか否かを判断する(ステップS3417)。ここで、残セグメントがある場合(ステップS3417:Yes)、各PU#1,#2,#3の再配置制御スレッドは、図35に示したステップS3410に戻る。
一方、残セグメントがない場合(ステップS3417:No)、各PU#1,#2,#3の再配置制御スレッドは、ボリュームの再配置完了をボリューム管理Mに通知する。ボリューム管理Mは、再配置計画テーブル720を参照して、未処理のボリュームがあるか否かを判断する(ステップS3418)。
ここで、未処理のボリュームがある場合(ステップS3418:Yes)、ボリューム管理Mは、図35に示したステップS3409に戻る。一方、未処理のボリュームがない場合(ステップS3418:No)、ボリューム管理Mは、再配置指示を契機として動作したか否かを判断する(ステップS3419)。
ここで、再配置指示を契機として動作した場合(ステップS3419:Yes)、ストレージシステムSMは一連の処理を終了する。一方、スケールアウト指示を契機として動作した場合(ステップS3419:No)、ボリューム管理Mは、一定時間スリープして(ステップS3420)、図34に示したステップS3405に戻る。
これにより、SU間で各LUNのセグメントの割当量qが均等になるようにボリュームの再配置を行うことができる。また、スケールアウト指示を契機として動作した場合には、ストレージシステムSM内の各LUNのセグメントの割当量qに偏りがあるか否かを定期的に判断してボリュームの再配置を行うことができる。
<再配置停止処理手順>
つぎに、ストレージシステムSMの再配置停止処理手順について説明する。まず、管理サーバMSのユーザにより再配置処理の停止指示が行われる場合の再配置停止処理手順について説明する。
図38は、ストレージシステムSMの第1再配置停止処理手順の一例を示すシーケンス図である。図38のシーケンス図において、管理サーバMSの装置管理GUIは、再配置処理の停止指示を受け付けた場合、再配置処理の停止指示をPU#1の装置管理GUI制御部#1に通知する(ステップS3801)。
装置管理GUI制御部#1は、再配置処理の停止指示を受け付けた場合、再配置処理の停止指示をボリューム管理Mに通知する(ステップS3802)。ボリューム管理Mは、ボリューム管理テーブル710および再配置計画テーブル720の再配置状況を「再配置済」に変更する(ステップS3803)。
ボリューム管理Mは、再配置処理を実施中の各PU#1,#2,#3の再配置制御スレッドに対して再配置処理の停止指示を通知する(ステップS3804)。各PU#1,#2,#3の再配置制御スレッドは、仕掛け中の再配置処理を中止する(ステップS3805)。ボリューム管理Mは、再配置計画テーブル720を破棄して(ステップS3806)、ストレージシステムSMは一連の処理を終了する。これにより、管理サーバMSのユーザにより、実施中の再配置処理を任意のタイミングで停止することができる。
つぎに、再配置の停止事象が発生した場合のストレージシステムSMの再配置停止処理手順について説明する。再配置の停止事象としては、例えば、新たなスケールアウトが実施された場合、RAIDグループが閉塞した場合、SUにおけるLUNが削除された場合などがある。
図39は、ストレージシステムSMの第2再配置停止処理手順の一例を示すシーケンス図である。図39のシーケンス図において、ボリューム管理Mは、再配置の停止事象が発生した場合、ボリューム管理テーブル710および再配置計画テーブル720の再配置状況を「再配置済」に変更する(ステップS3901)。
ボリューム管理Mは、再配置処理を実施中の各PU#1,#2,#3の再配置制御スレッドに対して再配置処理の停止指示を通知する(ステップS3902)。各PU#1,#2,#3の再配置制御スレッドは、仕掛け中の再配置処理を中止する(ステップS3903)。ボリューム管理Mは、再配置計画テーブル720を破棄して(ステップS3904)、ストレージシステムSMは一連の処理を終了する。これにより、再配置の停止事象が発生した場合に、実施中の再配置処理を停止することができる。
<再配置一時停止処理手順>
つぎに、ストレージシステムSMの再配置一時停止処理手順について説明する。再配置一時停止処理は、例えば、各PUや各SUの保守点検等で一時的に再配置処理を止めたい場合に行われる。
図40は、ストレージシステムSMの再配置一時停止処理手順の一例を示すシーケンス図である。図40のシーケンス図において、管理サーバMSの装置管理GUIは、再配置処理の一時停止指示を受け付けた場合、再配置処理の一時停止指示をPU#1の装置管理GUI制御部#1に通知する(ステップS4001)。
装置管理GUI制御部#1は、再配置処理の一時停止指示を受け付けた場合、再配置処理の一時停止指示をボリューム管理Mに通知する(ステップS4002)。ボリューム管理Mは、ボリューム管理テーブル710および再配置計画テーブル720の再配置状況が「再配置中」のエントリについて、再配置状況を「一時停止」に変更する(ステップS4003)。
ボリューム管理Mは、再配置処理を実施中の各PU#1,#2,#3の再配置制御スレッドに対して再配置処理の停止指示を通知する(ステップS4004)。各PU#1,#2,#3の再配置制御スレッドは、仕掛け中の再配置処理を中止して(ステップS4005)、ストレージシステムSMは一連の処理を終了する。これにより、管理サーバMSのユーザにより、実施中の再配置処理を任意のタイミングで一時停止することができる。
<再配置再開処理手順>
つぎに、ストレージシステムSMの再配置再開処理手順について説明する。再配置再開処理は、例えば、各PUや各SUの保守点検等で一時的に再配置処理を止めた後に再配置を再開する場合に行われる。
図41は、ストレージシステムSMの再配置再開処理手順の一例を示すシーケンス図である。図41のシーケンス図において、管理サーバMSの装置管理GUIは、再配置処理の再開指示を受け付けた場合、再配置処理の再開指示をPU#1の装置管理GUI制御部#1に通知する(ステップS4101)。
装置管理GUI制御部#1は、再配置処理の再開指示を受け付けた場合、再配置処理の再開指示をボリューム管理Mに通知する(ステップS4102)。ボリューム管理Mは、ボリューム管理テーブル710および再配置計画テーブル720の再配置状況が「一時停止」のエントリを検索して(ステップS4103)、図35に示したステップS3409に移行する。これにより、管理サーバMSのユーザにより、一時停止中の再配置処理を任意のタイミングで再開することができる。
以上説明したように、実施例にかかるストレージシステムSMによれば、コンシステンシーグループGに属するボリューム間でのデータの書込順序の一貫性を保ちつつリモートコピーを効率的に行うことができる。また、ストレージシステムSMによれば、スケールアウト前に格納されたデータについても、ストレージシステムSM内のSU全体に再割り当てすることができる。これにより、スケールアウト後のストレージシステムSMが有するポテンシャルに相当するアクセス性能の向上を図ることができる。
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)ストレージ装置内のストレージユニットを制御するストレージ制御装置であって、
コンシステンシーグループに属するコピー元のボリューム群を特定するグループ情報を記憶する記憶部と、
前記グループ情報に基づいて、ある時点の前記ボリューム群の各々のボリュームのスナップショットを作成するとともに、前記ある時点以降の前記各々のボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記各々のボリュームのスナップショットのデータをコピー先のストレージ装置に転送し、前記ある時点以降のいずれかの時点の前記各々のボリュームのスナップショットを作成するとともに、前記いずれかの時点以降の前記各々のボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記いずれかの時点の前記各々のボリュームの差分データを前記コピー先のストレージ装置に転送する制御を行う制御部と、
を有することを特徴とするストレージ制御装置。
(付記2)前記制御部は、
定期的または不定期に前記ある時点以降のいずれかの時点の前記各々のボリュームのスナップショットを作成するとともに、前記いずれかの時点以降の前記各々のボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記いずれかの時点の差分データを前記コピー先のストレージ装置に転送することを特徴とする付記1に記載のストレージ制御装置。
(付記3)前記制御部は、
他のストレージ装置からコピー元のボリュームのスナップショットのデータを受信したことに応じて、コピー先のボリュームに前記データを格納し、前記コピー元のボリュームの差分データを受信したことに応じて、前記コピー先のボリュームに対する更新データを差分データとして格納する差分格納領域を作成して、受信した前記差分データを前記差分格納領域に格納し、前記コピー先のボリュームのスナップショットを作成することを特徴とする付記1または2に記載のストレージ制御装置。
(付記4)前記制御部は、
前記コピー元のボリュームのスナップショットのデータを受信したことに応じて、前記コピー先のボリュームに前記データを格納し、前記コピー先のボリュームに対する更新データを差分データとして格納する差分格納領域を作成して、前記コピー先のボリュームのスナップショットを作成することを特徴とする付記3に記載のストレージ制御装置。
(付記5)前記制御部は、
前記コピー先のストレージ装置内のストレージ制御装置群のうちの前記各々のボリュームのコピー先のボリュームが存在するストレージ制御装置との通信が不能となった場合、前記ストレージ制御装置群のうちの特定のストレージ制御装置に、前記コピー先のボリュームの移動先のストレージ制御装置を問い合わせることを特徴とする付記1〜4のいずれか一つに記載のストレージ制御装置。
(付記6)前記制御部は、
前記ボリューム群のいずれかのボリュームが前記ストレージ装置内の自装置とは異なる他のストレージ制御装置に存在する場合、前記ある時点の前記いずれかのボリュームのスナップショットの作成指示を前記他のストレージ制御装置に通知し、当該作成指示を通知したことに応じて、前記ある時点の前記ボリューム群のうちの自装置に存在するボリュームのスナップショットを作成するとともに、前記ある時点以降の前記ボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記ボリュームのスナップショットのデータをコピー先のストレージ装置に転送し、
前記ある時点以降のいずれかの時点の前記いずれかのボリュームのスナップショットの作成指示を前記他のストレージ制御装置に通知し、当該作成指示を通知したことに応じて、前記いずれかの時点の前記ボリュームのスナップショットを作成して、前記いずれかの時点以降の前記ボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記いずれかの時点の前記ボリュームの差分データを前記コピー先のストレージ装置に転送することを特徴とする付記1〜5のいずれか一つに記載のストレージ制御装置。
(付記7)前記制御部は、
前記ある時点の前記ボリューム群のうちの自装置に存在するボリュームのスナップショットの作成指示を他のストレージ制御装置から受け付けたことに応じて、前記ある時点の前記ボリュームのスナップショットを作成するとともに、前記ある時点以降の前記ボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記ボリュームのスナップショットのデータをコピー先のストレージ装置に転送し、
前記ある時点以降のいずれかの時点の前記ボリュームのスナップショットの作成指示を前記他のストレージ制御装置から受け付けたことに応じて、前記いずれかの時点の前記ボリュームのスナップショットを作成して、前記いずれかの時点以降の前記ボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記いずれかの時点の前記ボリュームの差分データを前記コピー先のストレージ装置に転送することを特徴とする付記6に記載のストレージ制御装置。
(付記8)ストレージ装置内のストレージユニットを制御するストレージ制御装置が、
コンシステンシーグループに属するコピー元のボリューム群を特定するグループ情報を記憶する記憶部に記憶された前記グループ情報に基づいて、ある時点の前記ボリューム群の各々のボリュームのスナップショットを作成するとともに、前記ある時点以降の前記各々のボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記各々のボリュームのスナップショットのデータをコピー先のストレージ装置に転送し、
前記ある時点以降のいずれかの時点の前記各々のボリュームのスナップショットを作成して、前記いずれかの時点以降の前記各々のボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記いずれかの時点の前記各々のボリュームの差分データを前記コピー先のストレージ装置に転送する、
制御を行うことを特徴とする制御方法。
(付記9)ストレージ装置内のストレージユニットを制御するストレージ制御装置に、
コンシステンシーグループに属するコピー元のボリューム群を特定するグループ情報を記憶する記憶部に記憶された前記グループ情報に基づいて、ある時点の前記ボリューム群の各々のボリュームのスナップショットを作成するとともに、前記ある時点以降の前記各々のボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記各々のボリュームのスナップショットのデータをコピー先のストレージ装置に転送し、
前記ある時点以降のいずれかの時点の前記各々のボリュームのスナップショットを作成して、前記いずれかの時点以降の前記各々のボリュームに対する更新データを差分データとして格納する各々の差分格納領域を作成して、前記いずれかの時点の前記各々のボリュームの差分データを前記コピー先のストレージ装置に転送する、
制御を行わせることを特徴とする制御プログラム。