(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022191854
(43)【公開日】2022-12-28
(54)【発明の名称】記憶システムおよびデータ処理方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20221221BHJP
G06F 12/0868 20160101ALI20221221BHJP
G06F 11/20 20060101ALI20221221BHJP
G06F 16/172 20190101ALI20221221BHJP
【FI】
G06F3/06 304E
G06F3/06 302A
G06F3/06 304N
G06F12/0868 100
G06F11/20 689
G06F11/20 666
G06F16/172
【審査請求】有
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2021100322
(22)【出願日】2021-06-16
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】特許業務法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】伊藤 晋太郎
(72)【発明者】
【氏名】田島 幸恵
(72)【発明者】
【氏名】山本 貴大
(72)【発明者】
【氏名】揚妻 匡邦
【テーマコード(参考)】
5B034
5B205
【Fターム(参考)】
5B034AA01
5B034CC02
5B205KK02
5B205MM12
5B205QQ16
(57)【要約】
【課題】ホスト応答性能を向上すること。
【解決手段】冗長化グループを構成する複数の制御ソフトウェアが複数のストレージノードに分散配置された記憶システムにおいて、前記冗長化グループを構成する複数の前記制御ソフトウェアのうち、アクティブ状態の制御ソフトウェアが上位装置からの書き込み要求を受け付け、前記アクティブ状態の制御ソフトウェアが、前記アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、同一の冗長化グループに属する非アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、に前記書き込み要求にかかるデータを書き込んで二重化し、前記アクティブ状態の制御ソフトウェアが、前記上位装置に書き込み完了の応答を行い、前記キャッシュメモリに書き込まれたデータを冗長化して記憶装置に格納する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
複数のストレージノードと、それぞれ記憶領域を提供する1又は複数の記憶装置と、
を有する記憶システムにおいて、
前記ストレージノードは、
上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする1又は複数の制御ソフトウェアと、
前記読み書きに係るキャッシュデータを保持するキャッシュメモリと
を備え、
複数の前記制御ソフトウェアが冗長化グループを構成して、同一の前記冗長化グループに属する各前記制御ソフトウェアは、それぞれ異なる前記ストレージノードに配置され、
前記冗長化グループを構成する複数の前記制御ソフトウェアのうち、前記上位装置からの要求を処理するアクティブ状態の制御ソフトウェアは、
書き込み要求を受け付けた場合に、アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、同一の冗長化グループに属する非アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、に前記書き込み要求にかかるデータを書き込んで二重化し、前記上位装置に書き込み完了の応答を行い、
前記キャッシュメモリに書き込まれたデータを冗長化して前記記憶装置に格納する
ことを特徴とする記憶システム。
【請求項2】
前記アクティブ状態の制御ソフトウェアは、
所定の条件が満たされない場合には、前記キャッシュメモリのデータの二重化を行ってから前記書き込み完了の応答を行うライトバック処理を行い、
所定の条件が満たされるときには、前記アクティブ状態の制御ソフトウェアが配置されたストレージノードの記憶装置に書き込みを行って、前記上位装置に書き込み完了の応答を行うライトスルー処理を行うことを特徴とする請求項1に記載の記憶システム。
【請求項3】
前記アクティブ状態の制御ソフトウェアは、ストレージノード間の通信負荷が閾値を超えることを前記所定の条件として用いることを特徴とする請求項2に記載の記憶システム。
【請求項4】
前記アクティブ状態の制御ソフトウェアは、前記書き込み要求に係るデータサイズが閾値を超えることを前記所定の条件として用いることを特徴とする請求項2に記載の記憶システム。
【請求項5】
前記アクティブ状態の制御ソフトウェアを実行するプロセッサの負荷が閾値を超えることを前記所定の条件として用いることを特徴とする請求項2に記載の記憶システム。
【請求項6】
前記アクティブ状態の制御ソフトウェアは、連続した書き込み要求を受け付けたことを前記所定の条件として用いることを特徴とする請求項2に記載の記憶システム。
【請求項7】
前記冗長化グループは、非アクティブ状態の制御ソフトウェアを2以上含む構成であることを特徴とする請求項1に記載の記憶システム。
【請求項8】
前記記憶装置に格納されたデータは、冗長化されて格納化されることにより、前記アクティブ状態の制御ソフトウェア及び前記非アクティブ状態の制御ソフトウェアが利用可能であり、
前記非アクティブ状態の制御ソフトウェアがアクティブ状態に切り替わった場合には、前記記憶装置に格納されたデータと、当該制御ソフトウェアが設置されたストレージノードのキャッシュメモリに二重化して格納されていたキャッシュデータを、以降の要求の処理に用いることを特徴とする請求項1に記載の記憶システム。
【請求項9】
冗長化グループを構成する複数の制御ソフトウェアが複数のストレージノードに分散配置された記憶システムにおけるデータ処理方法であって、
前記冗長化グループを構成する複数の前記制御ソフトウェアのうち、アクティブ状態の制御ソフトウェアが上位装置からの書き込み要求を受け付けるステップと、
前記アクティブ状態の制御ソフトウェアが、前記アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、同一の冗長化グループに属する非アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、に前記書き込み要求にかかるデータを書き込んで二重化するステップと、
前記アクティブ状態の制御ソフトウェアが、前記上位装置に書き込み完了の応答を行い、前記キャッシュメモリに書き込まれたデータを冗長化して記憶装置に格納するステップと
を含むことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、記憶システムおよびデータ処理方法に関する。
【背景技術】
【0002】
従来、ソフトウェアによりストレージシステムを構築する技術(ソフトウェアデファインドストレージ:SDS)が提案されている。
例えば、特許文献1には、次のように記載されている。「複数のストレージノードを有する記憶システムにおいて、前記ストレージノードは、それぞれ記憶領域を提供する1又は複数の記憶装置と、上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする1又は複数の制御ソフトウェアとを設け、各前記制御ソフトウェアは、それぞれ前記上位装置からの要求に応じて要求されたデータを対応する前記記憶装置に読み書きするために必要な所定の構成情報を保持し、複数の前記制御ソフトウェアが冗長化グループとして管理され、同一の前記冗長化グループに属する各前記制御ソフトウェアがそれぞれ保持する前記構成情報は同期して更新され、前記冗長化グループを構成する複数の前記制御ソフトウェアを、各前記ストレージノードの負荷を平準化するように、それぞれ異なる前記ストレージノードに配置するようにした。」
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載の技術によれば、SDSにおいてノード障害時にも読み書きを継続できるストレージシステムを構築できる。一方で、データを複数のストレージノードのドライブに書き込むことにより冗長化する必要があるため、ホストに書き込み成功の応答を返すまでの時間が大きい。本発明は、こうしたシステムにおいてホストへの応答時間を短縮できる記憶システム等を提案しようとするものである。
【課題を解決するための手段】
【0005】
かかる課題を解決するため本発明においては、複数のストレージノードと、それぞれ記憶領域を提供する1又は複数の記憶装置と、を有する記憶システムにおいて、前記ストレージノードは、上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする1又は複数の制御ソフトウェアと、前記読み書きに係るキャッシュデータを保持するキャッシュメモリとを備え、複数の前記制御ソフトウェアが冗長化グループを構成して、同一の前記冗長化グループに属する各前記制御ソフトウェアは、それぞれ異なる前記ストレージノードに配置され、前記冗長化グループを構成する複数の前記制御ソフトウェアのうち、前記上位装置からの要求を処理するアクティブ状態の制御ソフトウェアは、書き込み要求を受け付けた場合に、アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、同一の冗長化グループに属する非アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、に前記書き込み要求にかかるデータを書き込んで二重化し、前記上位装置に書き込み完了の応答を行い、前記キャッシュメモリに書き込まれたデータを冗長化して前記記憶装置に格納する。
また、冗長化グループを構成する複数の制御ソフトウェアが複数のストレージノードに分散配置された記憶システムにおけるデータ処理方法であって、前記冗長化グループを構成する複数の前記制御ソフトウェアのうち、アクティブ状態の制御ソフトウェアが上位装置からの書き込み要求を受け付けるステップと、前記アクティブ状態の制御ソフトウェアが、前記アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、同一の冗長化グループに属する非アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、に前記書き込み要求にかかるデータを書き込んで二重化するステップと、前記アクティブ状態の制御ソフトウェアが、前記上位装置に書き込み完了の応答を行い、前記キャッシュメモリに書き込まれたデータを冗長化して記憶装置に格納するステップとを含む。
【発明の効果】
【0006】
本発明によれば、ホスト応答性能を向上することができる。上記した以外の課題、構成及び効果は以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【0007】
【
図1】第1の実施の形態によるストレージシステムの全体を示すシステム構成図。
【
図2】ストレージノードの物理構成の一例を示す図。
【
図3】ストレージノードの論理構成の一例を示す図。
【
図4】データ保護制御部が管理する記憶領域の一例を示す図。
【
図7】ソフトウェアモジュール構造の一例を示す図。
【
図16】第2の実施例のソフトウェアモジュール図。
【
図17】第2の実施例における不揮発メモリ構成図。
【発明を実施するための形態】
【0008】
以下、図面を参照し、本発明の一実施の形態を詳述する。本実施の形態は、例えば、1以上のSDSが実装された複数のストレージノードを備えるストレージシステムに関するものである。
【実施例0009】
(1)第1の実施の形態
(1-1)本実施の形態によるストレージシステムの構成
図1は、第1の実施の形態によるストレージシステムの全体を示すシステム構成図である。
図1に示したストレージシステム100は、例えば、複数のホスト装置101(Host)と、複数のストレージノード103(Storage Node)と、管理ノード104(Management Node)とを備える。ホスト装置101とストレージノード103と管理ノード104とは、ファイバーチャネル(Fibre Channel)、イーサネット(登録商標)、LAN(Local Area Network)等から構成されるネットワーク102を介して相互に接続される。
【0010】
ホスト装置101は、ユーザ操作、実装されたアプリケーションプログラム等からの要求に応じて、ストレージノード103に対してリード要求またはライト要求(以下、適宜、これらをまとめてI/O(Input/Output)要求と呼ぶ)を送信する汎用のコンピュータ装置である。なお、ホスト装置101は、仮想マシンのような仮想的なコンピュータ装置であってもよい。
【0011】
ストレージノード103は、データを読み書きするための記憶領域をホスト装置101に対して提供するコンピュータ装置である。ストレージノード103は、例えば、汎用のサーバ装置である。
【0012】
管理ノード104は、システム管理者が本ストレージシステム100全体を管理するために利用するコンピュータ装置である。管理ノード104は、複数のストレージノード103をクラスタと呼ぶグループとして管理する。なお、
図1では、クラスタが1つのみ設けられた例を示しているが、ストレージシステム100内に複数のクラスタを設けるようにしてもよい。
【0013】
図2は、ストレージノード103の物理構成の一例を示す図である。
ストレージノード103は、CPU(Central Processing Unit)1031、揮発性メモリ1032(Volatile Memory)、不揮発メモリ(Non-Volatile Memory)1035、複数の記憶デバイス1033(Drive)および通信装置1034(NIC:Network Interface Card)を備える。
【0014】
CPU1031は、ストレージノード全体の動作制御を司るプロセッサである。揮発性メモリ1032は、SRAM(Static RAM(Random Access Memory))、DRAM(Dynamic RAM)等の揮発性の半導体メモリから構成される。不揮発メモリ1035は、NVRAM(Non-Volatile RAM)、NAND型フラッシュメモリ等から構成される。揮発性メモリ1032および不揮発メモリ1035は、各種のプログラム、必要なデータを一時的に保持するために利用される。揮発性メモリ1032および不揮発メモリ1035に格納されたプログラムをCPU1031が実行することにより、後述のようなストレージノード103全体としての各種の処理が実行される。
【0015】
記憶デバイス1033は、SSD(Solid State Drive)、SAS(Serial Attached SCSI(Small Computer System Interface))ハードディスクドライブ、SATA(Serial
ATA(Advanced Technology Attachment))ハードディスクドライブ等の1または複数種類の大容量の不揮発性の記憶装置から構成される。記憶デバイス1033は、ホスト装置101からのI/O要求に応じてデータをリードまたはライトするための物理的な記憶領域を提供する。
【0016】
通信装置1034は、ストレージノード103がネットワーク102を介してホスト装置101、他のストレージノード103または管理ノード104と通信を行うためのインターフェースである。通信装置1034は、例えば、NIC、FCカード等から構成される。通信装置1034は、ホスト装置101、他のストレージノード103または管理ノード104との通信時におけるプロトコル制御を行う。
【0017】
図3は、ストレージノード103の論理構成の一例を示す図である。
ストレージノード103は、フロントエンドドライバ1081(Front-end driver)と、バックエンドドライバ1087(Back-end driver)と、1または複数のストレージ制御部1083(Storage Controller)と、データ保護制御部1086(Data Protection Controller)と、を備える。
【0018】
フロントエンドドライバ1081は、通信装置1034を制御し、ストレージ制御部1083に対してホスト装置101、他のストレージノード103または管理ノード104との通信時における抽象化したインターフェースをCPU1031に提供する機能を有するソフトウェアである。
【0019】
バックエンドドライバ1087は、自ストレージノード103内の各記憶デバイス1033を制御し、各記憶デバイス1033との通信時における抽象化したインターフェースをCPU1031に提供する機能を有するソフトウェアである。
【0020】
ストレージ制御部1083は、SDSのコントローラとして機能するソフトウェアである。ストレージ制御部1083は、ホスト装置101からのI/O要求を受け付け、当該I/O要求に応じたI/Oコマンドをデータ保護制御部1086に発行する。また、ストレージ制御部1083は、論理ボリューム構成機能を有する。論理ボリューム構成機能は、データ保護制御部が構成した論理チャンクとホストに提供する論理ボリュームを対応付ける。例えばストレートマッピング(論理チャンクと論理ボリュームを1:1で対応付け、論理チャンクのアドレスと論理ボリュームのアドレスを同じとする)方式でも良いし、仮想ボリューム機能(ThinProvisioning)方式(論理ボリュームと論理チャンクを小サイズの領域(ページ)に分け、ページ単位で論理ボリュームと論理チャンクのアドレス同士を対応付ける方式)を採っても良い。
本実施の形態の場合、ストレージノード103に実装された各ストレージ制御部1083は、別のストレージノード103に配置された他のストレージ制御部1083と共に冗長構成を構成するペアとして管理される。以下においては、このペアをストレージ制御部グループ1085と呼ぶものとする。
【0021】
なお、
図3では、2つのストレージ制御部1083により1つのストレージ制御部グループ1085が構成される場合を示している。以下においても、2つのストレージ制御部1083によりストレージ制御部グループ1085が構成されるものとして説明を進めるが、3つ以上のストレージ制御部1083により1つの冗長構成を構成するようにしてもよい。
【0022】
ストレージ制御部グループ1085では、一方のストレージ制御部1083がホスト装置101からのI/O要求を受け付けることができる状態(現用系の状態であり、以下、アクティブモードと呼ぶ)に設定される。また、ストレージ制御部グループ1085では、他方のストレージ制御部1083がホスト装置101からのI/O要求を受け付けない状態(待機系の状態であり、以下、スタンバイモードと呼ぶ)に設定される。
【0023】
そして、ストレージ制御部グループ1085では、アクティブモードに設定されたストレージ制御部1083(以下、アクティブストレージ制御部と呼ぶ)、アクティブストレージ制御部が配置されたストレージノード103に障害が発生した場合等に、それまでスタンバイモードに設定されていたストレージ制御部1083(以下、スタンバイストレージ制御部と呼ぶ)の状態がアクティブモードに切り替えられる。これにより、アクティブストレージ制御部が稼働し得なくなった場合に、当該アクティブストレージ制御部が実行していたI/O処理を、スタンバイストレージ制御部により引き継ぐことができる。
【0024】
データ保護制御部1086は、各ストレージ制御部グループ1085に対して自ストレージノード103内または他のストレージノード103内の記憶デバイス1033が提供する物理的な記憶領域を割り当てると共に、ストレージ制御部1083から与えられる上述のI/Oコマンドに従って、指定されたデータを対応する記憶デバイス1033にリードまたはライトする機能を有するソフトウェアである。
【0025】
この場合、データ保護制御部1086は、ストレージ制御部グループ1085に対して他のストレージノード103内の記憶デバイス1033が提供する物理的な記憶領域を割り当てたときには、当該他のストレージノード103に実装されたデータ保護制御部1086と協働して、そのデータ保護制御部1086との間でネットワーク102を介してデータをやり取りすることにより、そのストレージ制御部グループ1085のアクティブストレージ制御部から与えられたI/Oコマンドに従ってそのデータをその記憶領域にリードまたはライトする。
【0026】
図4は、データ保護制御部1086が管理する記憶領域の一例を示す図である。
データ保護制御部1086は、
図4に示すように、各ストレージノード103内の記憶デバイス1033がそれぞれ提供する物理的な記憶領域を、それぞれ所定大きさの物理記憶領域1092(以下、物理チャンクと呼ぶ)に分割して管理する。
【0027】
また、データ保護制御部1086は、各ストレージ制御部グループ1085に対してそれぞれ専用のプールを対応付け、これらプールに物理チャンクと同じ大きさの論理的な記憶領域である論理記憶領域1091(以下、論理チャンク)を適宜割り当て、論理チャンクに対して1または複数の物理チャンクを対応付ける。
【0028】
さらに、各ストレージ制御部グループ1085のプール上には、1または複数の仮想的な論理ボリューム(以下、仮想ボリュームまたはボリュームと呼ぶ)が定義され、これらの仮想ボリュームがホスト装置101にホストボリュームとして提供される。
【0029】
ホスト装置101は、かかる仮想ボリュームにデータをライトする場合、データのライト先の仮想ボリューム(以下、ライト対象ボリュームと呼ぶ)の識別子(LUN(Logical Number Unit))と、当該ライト対象ボリュームにおける当該データのライト先の記憶領域(以下、ライト先記憶領域と呼ぶ)とを指定したライト要求を、対応するクラスタ内のいずれかのストレージノード103に送信する。
【0030】
ライト要求を受信したストレージノード103のフロントエンドドライバ1081は、受信したライト要求において指定されたライト対象ボリュームとプールとを介して対応付けられたストレージ制御部グループ1085のアクティブストレージ制御部またはスタンバイストレージ制御部が配置されている各ストレージノード103のフロントエンドドライバ1081に当該ライト要求、および、当該ライト要求と共にホスト装置101から送信されてきたライト対象のデータ(以下、ライトデータと呼ぶ)を転送する。
【0031】
また、ライト要求およびライトデータを受領したストレージノード103のフロントエンドドライバ1081は、ライト要求およびライトデータを、ライト要求において指定されたライト対象ボリュームとプールとを介して対応付けられたストレージ制御部グループ1085のストレージ制御部1083に引き渡す。
【0032】
そして、ライト要求およびライトデータが引き渡されたストレージ制御部1083のうちのアクティブストレージ制御部は、ライト対象ボリューム内のライト先記憶領域に対して、当該ライト対象ボリュームと対応付けられたプールを構成する論理チャンクから必要に応じて記憶領域(以下、論理領域と呼ぶ)を割り当てる。
【0033】
また、アクティブストレージ制御部は、ライト要求において指定されたライト対象ボリューム内のライト先記憶領域のアドレスを、当該ライト先記憶領域に論理領域を割り当てた論理チャンクのチャンク番号と、当該論理領域のオフセット位置とに変換したI/Oコマンド(ライトコマンド)を生成し、生成したI/Oコマンドをライトデータと共に自ストレージノード103内のデータ保護制御部1086に送信する。
【0034】
データ保護制御部1086は、I/Oコマンドおよびライトデータを受信すると、当該I/Oコマンドで指定された論理チャンクに対応付けた各物理チャンクをそれぞれ提供する各記憶デバイス1033内のかかるオフセット位置の記憶領域にデータをそれぞれ格納する。
【0035】
このようにしてストレージシステム100では、ホスト装置101からのデータが対応する論理チャンクに対応付けられた複数の物理チャンクに冗長化されて格納される。このため、論理チャンクに割り当てられる物理チャンクの数は、ストレージシステム100における冗長化方式の設定内容によって決定される。
【0036】
例えば、データを二重化して記憶する設定の場合には、1つの論理チャンクに対して2つの物理チャンクが対応付けられ、データを三重化以上に多重化して記憶する設定の場合、EC(Erasure-Coding)のようにデータから冗長化データを作成して記憶する設定がなされている場合等には、3つ以上の必要な数の物理チャンクが1つの論理チャンクに対応付けられる。
【0037】
一方、ホスト装置101は、仮想ボリュームからデータを読み出す場合、当該仮想ボリューム(以下、リード対象ボリュームと呼ぶ)のLUNと、当該リード対象ボリュームにおけるそのデータのリード先の記憶領域(以下、リード先領域と呼ぶ)とを指定したリード要求を当該リード対象ボリュームが含まれるクラスタ内のいずれかのストレージノード103に送信する。
【0038】
リード要求を受信したストレージノード103のフロントエンドドライバ1081は、受信したリード要求において指定されたリード対象ボリュームとプールとを介して対応付けられたストレージ制御部グループ1085のアクティブストレージ制御部またはスタンバイストレージ制御部が配置された各ストレージノード103にリード要求をそれぞれ転送する。
【0039】
また、リード要求を受領したストレージノード103のフロントエンドドライバ1081は、リード要求を当該リード要求において指定されたリード対象ボリュームとプールとを介して対応付けられたストレージ制御部グループ1085のストレージ制御部1083に引き渡す。
【0040】
リード要求が引き渡されたストレージ制御部1083のうちのアクティブストレージ制御部は、リード対象ボリューム内のリード先領域のアドレスを、当該リード先領域に論理領域を割り当てた論理チャンクのチャンク番号と、当該論理領域のオフセット位置とに変換したI/Oコマンド(リードコマンド)を生成し、生成したI/Oコマンドを自ストレージノード103内のデータ保護制御部1086に送信する。
【0041】
データ保護制御部1086は、I/Oコマンドを受信すると、当該I/Oコマンドで指定された論理チャンクと対応付けられた各物理チャンクのうち、「マスタ」に設定された物理チャンク内のI/Oコマンドで指定されたオフセット位置の記憶領域からデータを読み出し、読み出したデータをリードデータとしてI/Oコマンドの送信元のアクティブストレージ制御部に転送する。リードデータは、この後、アクティブストレージ制御部によりネットワーク102を介してリード要求の送信元のホスト装置101に転送される。
【0042】
(1-2)論理チャンクに対する物理チャンクの割当て
上述のように1つの論理チャンクに複数の物理チャンクを対応付け、物理チャンクにデータをそれぞれ格納することによりデータを冗長化する冗長化方式を採用する場合、データ保護の観点からも、1つの論理チャンクに対応付ける複数の物理チャンクをそれぞれ異なるストレージノード103が提供する物理チャンクから選択することが望ましい。これは、例えば、1つの論理チャンクに対して同じストレージノード103内の複数の物理チャンクを対応付けた場合、当該ストレージノード103が障害等によりデータの読み出しを行えなくなったときにデータロストが発生することになるからである。
【0043】
そこで、本ストレージシステム100では、データ保護制御部1086がストレージ制御部グループ1085に論理チャンクを割り当て、当該論理チャンクに複数の物理チャンクを対応付ける際に、複数の物理チャンクをそれぞれ互いに異なる複数のストレージノード103が提供する物理チャンクの中から選択することとしている。
【0044】
(1-3)ライトコマンドの処理
図5は、本発明の概要を説明する図である。図中の矢印はホストからのライトIOに対するデータの流れと、それがホストIO同期で行われるか否かを示している。ホストIO同期とは、ホストのライトコマンドに対する成功応答を返す前にその処理が行われることを意味する。ホストIO非同期とはその逆に、ホストのライトコマンドに対する成功応答を返した後で行われることを意味する。
【0045】
ホストから書き込まれたデータは、各ストレージノードのフロントエンドドライバを介してActiveなストレージ制御部に受け渡される(図ではフロントエンドドライバ及びバックエンドドライバは省略)。この図ではストレージ制御部グループ1に属するActiveなストレージ制御部に渡される。ストレージ制御部はライト処理を実行し、ストレージ制御部グループ1に属するActiveモードのストレージ制御部と、Standbyモードのストレージ制御部が属するノードにそれぞれ対応して配置された不揮発メモリ上のキャッシュエリア1に書き込まれたデータを二重化(Mirroring)して格納し、ホストにライトコマンドに対する成功応答を返す。
【0046】
ホストに成功応答を返した後、ストレージ制御部はデータ保護制御の非同期デステージ処理を呼び出し、キャッシュエリア上のデータをデータ保護制御部に渡す。データ保護制御部は、ミラーリングまたはECを用いてデータをノード間で冗長化して格納する。
【0047】
(1-4)メモリとデータ
図6は、不揮発メモリの構成図の一例である。不揮発メモリ内には、キャッシュエリアとキャッシュディレクトリが配置される。キャッシュエリアは、ホストから書き込まれたデータやホストへ読みだすためのデータを格納する。キャッシュディレクトリはキャッシュエリアを管理するための情報であり、細分化されたキャッシュエリアの部分領域(これをキャッシュセグメントと呼ぶ)それぞれについて、対応する論理ボリュームのアドレスを記録している。詳細を
図8で説明する。
【0048】
キャッシュディレクトリおよびキャッシュエリアは、同じノードに配置されているストレージ制御部1083と対応する形で同数存在しており、例えばストレージ制御部グループ1に対応づくキャッシュディレクトリはキャッシュディレクトリ1、ストレージ制御部グループ1に対応づくキャッシュエリアはキャッシュエリア1とし、ストレージ制御部グループ2に対応づくキャッシュディレクトリはキャッシュディレクトリ2、ストレージ制御部グループ2に対応づくキャッシュエリアはキャッシュエリア2とする。
【0049】
同じストレージ制御部グループに属するストレージ制御部にそれぞれ対応するキャッシュエリアには、同じキャッシュデータが格納され、それを管理するキャッシュディレクトリにも同じ情報が格納される(ミラーリング)。このミラーリング処理は後述するライト処理の中で行われる。
【0050】
図7は、ストレージ制御部1083、データ保護制御部1086のソフトウェアモジュール構造の一例を示す図である。
ストレージ制御部1083は、リード処理およびライト処理、非同期デステージ処理、SCフェイルオーバー処理を実行する。
【0051】
リード処理は、フロントエンドドライバから受け取ったリードコマンドに応じてリード対象データをキャッシュエリアまたは記憶デバイスから読みだす処理である。記憶デバイスからの読出しをステージングと呼び、データ保護制御部のステージング処理を呼び出すことによって行う。
【0052】
ライト処理は、フロントエンドドライバから受け取ったライトコマンドに応じてライト対象データをキャッシュエリアまたは記憶デバイスに書き込む処理である。記憶デバイスへの書き込みをデステージと呼び、データ保護制御部のデステージ処理を呼び出すことによって行う。
非同期デステージ処理は、キャッシュエリアから記憶デバイスへデータを書き込む処理である。
【0053】
SCフェイルオーバー処理は、システム内のストレージノードに障害が起きた際に実行され、ストレージ制御部グループ内のストレージ制御部の中でStandbyモードのものがActiveモードに遷移し、障害が起きたストレージノードで実行されていたActiveモードのストレージ制御部の構成やキャッシュエリアを引き継ぐ処理である。
【0054】
データ保護制御部1086はステージング処理、デステージ処理を備える。それぞれの処理の詳細については後述する。
【0055】
以下、制御情報について説明する。
図8~
図9に示すテーブルは、制御情報の一例である。
図8は、キャッシュディレクトリの一例を示す図である。キャッシュディレクトリはキャッシュエリアを細分化した領域(キャッシュセグメント)の管理情報であり、キャッシュセグメントそれぞれに対応するエントリを持つ。
各エントリには、キャッシュアドレス、論理ボリューム番号、論理ボリュームアドレス、属性エントリがある。キャッシュアドレスは各エントリが対応するキャッシュセグメントのメモリ上のアドレスを指し、論理ボリューム番号と論理ボリュームアドレスは、当該キャッシュセグメントに格納されているデータが、どの論理ボリュームのどのアドレスのものであるかを指し示す。キャッシュセグメントにデータが格納されていない場合は値無しを示す「-」が格納される。キャッシュセグメントにデータが格納されている場合、属性フィールドにDirtyまたはCleanの値を持つ。Dirtyとは、当該データがまだデステージされておらず、記憶デバイスに書き込まれていないことを示し、Cleanは当該データがデステージ済であり記憶デバイスに書き込まれた値と一致することを示す。
【0056】
図9は、ストレージ制御部管理テーブルの一例である。本実施例ではストレージ制御部管理テーブルは揮発性メモリに格納されているが、不揮発メモリに格納しても良いし、記憶デバイスに格納しても良く、または記憶デバイス上に格納した上でそのコピーを揮発性メモリに保持する形態もとりうる。
ストレージ制御部管理テーブルはストレージ制御部グループのそれぞれに対応するエントリを持ち、各エントリはストレージ制御部グループ番号、アクティブ配置先ノード番号、スタンバイ配置先ノード番号、のエントリを持つ。ストレージ制御部グループ番号は各ストレージ制御部グループを一意に識別するための番号を保持し、アクティブ配置先ノード番号とスタンバイ配置先ノード番号は同グループに属するストレージ制御部のうちアクティブモードのものとスタンバイモードのものをどのノードに配置しているかを示す。
【0057】
(1-5)動作の説明
図10はリード処理を示すフローチャートの例である。リード処理はストレージ制御部が実行する。ストレージ制御部は、まずフロントエンドドライバを介してホストから送信されたリードコマンドを受け取り、これを解釈してリード対象の論理ボリューム番号と論理ボリュームアドレスを得る(ステップS101)。次に、キャッシュヒットかどうかを判定する(ステップS102)。具体的には、ストレージ制御部は、キャッシュディレクトリを参照し、キャッシュディレクトリに当該論理ボリューム番号と論理ボリュームアドレスに対応するエントリを探し、ある場合は(ヒット)、当該エントリからキャッシュアドレスを参照し、分岐をYesに進んでキャッシュエリアからデータをリードして(ステップS107)、ホストにデータを応答する(ステップS108)。
【0058】
キャッシュディレクトリに当該論理ボリューム番号と論理ボリュームアドレスに対応するエントリが無い場合(ミス)、分岐をNoへ進み、当該論理ボリューム/アドレスに対応する論理チャンク番号/論理チャンクアドレスを算出する(ステップS103)。そうして算出された論理チャンク番号/論理チャンクアドレスをパラメタとしてステージング処理を呼び出す(ステップS104)。ステージング処理はデータ保護制御部によって実行される処理であり、その詳細は
図14にて説明するが、その実行結果として記憶デバイスから当該論理ボリューム番号/論理ボリュームアドレスに対応するデータが読みだされる。ストレージ制御部は、読みだしたデータをキャッシュ格納すべきか否かの判定を行い(ステップS105)、格納すべきと判定された場合はキャッシュに格納し(ステップS106)、キャッシュヒットした場合と同様にキャッシュからデータをリードする(ステップS107)。格納すべきでないと判断された場合はキャッシュエリアには格納せずにホストにデータを応答する(ステップS108)。
【0059】
キャッシュに格納すべきか否かの判定条件としては、例えば、キャッシュヒット率を集計しておき、キャッシュヒット率が低い場合はキャッシュに格納しない、という判定条件が挙げられる。
【0060】
なお、リード処理でキャッシュに格納したデータは、スタンバイのストレージに送って二重化してもよい。リード処理時もキャッシュデータの二重化を行うことで、アクティブとスタンバイでキャッシュメモリの内容を一致させることができる。一方で、ストレージノード間の通信負荷を抑制するのであれば、リード処理でキャッシュに格納したデータは二重化しないこととすればよい。
【0061】
図11はライト処理を示すフローチャートの例である。ライト処理はストレージ制御部が実行する。ストレージ制御部は、まずフロントエンドドライバを介してホストから送信されたライトコマンドを受け取り、これを解釈してライト対象の論理ボリューム番号と論理ボリュームアドレスを得る(ステップS201)。次に、キャッシュヒットかどうかを判定する(ステップS202)。具体的には、キャッシュディレクトリを参照し、キャッシュディレクトリに当該論理ボリューム番号と論理ボリュームアドレスに対応するエントリを探し、ある場合は(ヒット)、当該エントリからキャッシュアドレスを参照し、分岐をYesに進む。次に同じストレージ制御部グループと対応づくキャッシュエリア ( ActiveとStandbyのそれぞれのストレージ制御部と同じノードにある) にデータをそれぞれ格納する(ステップS207,ステップS208)。次にそれぞれに対応するキャッシュディレクトリにおいて、当該キャッシュセグメントに対応するエントリの属性をダーティに更新する(ステップS209,ステップS210)。そしてホストにライト成功を応答する(ステップS211)。
【0062】
キャッシュミスの場合は分岐をNoに進み、ライトスルー条件を満たすか否かの判定を行い、満たさない場合は分岐をNoに進んでキャッシュセグメントを確保し、以降はヒットした場合と同様にステップS207~S211の処理を行う。すなわち、ライトスルー条件が満たさない場合には、キャッシュメモリのデータの二重化を行ってから書き込み完了の応答を行うライトバック処理が行われる。
【0063】
ライトスルー条件を満たした場合は一時バッファにデータを格納して(ステップS205)、後述するデステージ処理を呼び出す。デステージ処理の完了後にホストにライト成功を応答する。
【0064】
このように、ライトスルー条件を満たしたときは、スタンバイとの間でキャッシュデータの二重化を行わず、アクティブ状態の制御ソフトウェアが配置されたストレージノードの記憶装置と、同一の冗長化グループに属するスタンバイ(非アクティブ)状態の制御ソフトウェアが配置された記憶装置に書き込みを行って、書き込み完了の応答を行うライトスルー処理を行うことになる。
この結果、ライトスルー条件を満たした場合には、ホストへの応答は遅くなるが、ストレージノード間のネットワーク負荷を下げることができる。
【0065】
ライトスルー条件としては、例えば次のような条件を用いることができる。
「ストレージノード間の通信負荷が閾値を超える」、
「書き込み要求に係るデータサイズが閾値を超える」、
「アクティブ状態の制御ソフトウェアを実行するプロセッサの負荷が閾値を超える」、
「連続した書き込み要求を受け付けた」。
これらの条件は、単独で用いてもよいし、組み合わせて用いてもよい。また、例示以外の条件を採用することを妨げるものではなく、任意の条件を設定することができる。
【0066】
図12は非同期デステージ処理のフローチャートである。非同期デステージ処理は、キャッシュディレクトリから属性が「ダーティ」であるエントリを探し(ステップS301)、このようなエントリが無ければ(ステップS302;No)、そのまま処理を終了する。ダーティであるようなエントリがあれば(ステップS302;Yes)、そのキャッシュセグメントを対象にデステージ処理を実行し(ステップS303)、完了したらキャッシュディレクトリから当該エントリを削除する(ステップS304)。この削除は同じストレージ制御部グループに対応づくActiveキャッシュディレクトリ、Standbyキャッシュディレクトリの双方に対して行う。
【0067】
図13はフェイルオーバー処理のフローチャートである。この処理はストレージノードが障害を起こした場合、当該ノードにActiveモードのストレージ制御部を持つストレージ制御部グループのStandbyモードのストレージ制御部で実行される。まず、該当のストレージ制御部は、管理ノード104からActiveモードへの切替を求める指示を受信する(ステップS401)。ストレージ制御部は、自ストレージ制御部が設置されているストレージノードのキャッシュを有効にし(ステップS402)、自ストレージ制御部のモードをStandbyからActiveに変更し、ストレージ制御部管理テーブルを書き換える(ステップS403)。
【0068】
図14はステージング処理のフローチャートである。ストレージ制御部から渡されたステージング要求を解釈し、リード対象の論理チャンク番号と論理チャンクアドレスを得る(ステップS501)。当該論理チャンクのマスター物理チャンクが格納された記憶デバイスに障害があるかどうかを判定し(ステップS502)、障害が無ければ(ステップS502;No)、当該物理チャンクが格納されたドライブからデータをリードする(ステップS504)。障害がある場合は(ステップS502;Yes)、当該論理チャンクを構成する他の物理チャンクから冗長データをリードし(ステップS503)、データを復元してドライブリードする(ステップS504)。ここでは、ECによる保護の場合を示したが、復元方法はデータ保護制御部で行っているデータ保護の方式に依存する。例えば、ミラーリングによる保護の場合はミラー物理チャンクからリードすればよい。その後、いずれかの方法によりリードしたデータを呼び出し元であるストレージ制御部に応答する(ステップS505)。
【0069】
図15はデステージ処理のフローチャートである。データ保護制御部は、ストレージ制御部から渡されたデステージ要求を解釈し(ステップS601)、ライト対象の論理チャンク番号と論理チャンクアドレスを得る。データ保護制御部は、ミラーリングまたはECによりデータを冗長化して記憶デバイスへ格納し(ステップS602)、成功を応答する(ステップS603)。
上述してきたように、開示の実施例に係るストレージシステムは、複数のストレージノードと、それぞれ記憶領域を提供する1又は複数の記憶装置と、を有する記憶システムであって、前記ストレージノードは、上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする1又は複数の制御ソフトウェアと、前記読み書きに係るキャッシュデータを保持するキャッシュメモリとを備え、複数の前記制御ソフトウェアが冗長化グループを構成して、同一の前記冗長化グループに属する各前記制御ソフトウェアは、それぞれ異なる前記ストレージノードに配置され、前記冗長化グループを構成する複数の前記制御ソフトウェアのうち、前記上位装置からの要求を処理するアクティブ状態の制御ソフトウェアは、書き込み要求を受け付けた場合に、アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、同一の冗長化グループに属する非アクティブ状態の制御ソフトウェアが配置されたストレージノードのキャッシュメモリと、に前記書き込み要求にかかるデータを書き込んで二重化し、前記上位装置に書き込み完了の応答を行い、前記キャッシュメモリに書き込まれたデータを冗長化して前記記憶装置に格納することを特徴とする。
かかる構成及び動作によれば、キャッシュへの書込みによりホストに成功を応答し、キャッシュから記憶装置への書き込みは、ホストI/Oとは非同期に行うことができるので、応答性能を向上することができる。
また、キャッシュを二重化することで、ホスト応答性能を向上と信頼性の高さを兼ね備えることができる。
また、開示の実施例によれば、前記アクティブ状態の制御ソフトウェアは、所定の条件が満たされない場合には、前記キャッシュメモリのデータの二重化を行ってから前記書き込み完了の応答を行うライトバック処理を行い、所定の条件が満たされるときには、前記アクティブ状態の制御ソフトウェアが配置されたストレージノードの記憶装置に書き込みを行って、前記上位装置に書き込み完了の応答を行うライトスルー処理を行う。
このため、キャッシュの二重化と記憶装置への書込みの双方が発生することでネットワークの負荷が過度に大きくなる事態を防止できる。
また、開示の実施例によれば、前記アクティブ状態の制御ソフトウェアは、ストレージノード間の通信負荷が閾値を超えることを前記所定の条件として用いることができる。
かかる条件を用いれば、通信負荷を直接的なフィードバック制御により抑制できる。
なお、本発明は上述の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、かかる構成の削除に限らず、構成の置き換えや追加も可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。