(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-02
(45)【発行日】2024-08-13
(54)【発明の名称】ストレージシステム及びストレージプログラム更新方法
(51)【国際特許分類】
G06F 8/65 20180101AFI20240805BHJP
G06F 3/06 20060101ALI20240805BHJP
G06F 11/16 20060101ALI20240805BHJP
G06F 13/10 20060101ALI20240805BHJP
【FI】
G06F8/65
G06F3/06 301Z
G06F11/16 612
G06F13/10 330B
(21)【出願番号】P 2021196415
(22)【出願日】2021-12-02
【審査請求日】2023-02-22
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】田島 幸恵
(72)【発明者】
【氏名】伊藤 晋太郎
(72)【発明者】
【氏名】山本 貴大
(72)【発明者】
【氏名】大平 良徳
【審査官】山本 俊介
(56)【参考文献】
【文献】特開2020-021277(JP,A)
【文献】特開平11-191069(JP,A)
【文献】特開2001-275140(JP,A)
【文献】国際公開第2018/179106(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/65
G06F 3/06
G06F 13/10
G06F 11/16
(57)【特許請求の範囲】
【請求項1】
データを格納するストレージデバイスと、
前記ストレージデバイスへのデータの入出力処理を行うストレージプログラムを実行する処理部を有する複数のストレージノードと、を備え、
前記ストレージプログラムは、メタデータを用いて前記ストレージデバイスのデータへアクセスし、前記メタデータを前記ストレージノードのメモリに格納し、
それぞれ異なる複数のノードに配置された複数の前記ストレージプログラムは、ストレージデバイスへのデータの入出力処理を行うアクティブ状態のストレージプログラムと、前記アクティブ状態のストレージプログラムに障害が発生した場合にその処理を引き継ぐスタンバイ状態のストレージプログラムと、によりストレージプログラムグループを構成し、
前記ストレージプログラムグループ内の前記アクティブ状態のストレージプログラム及び前記スタンバイ状態のストレージプログラムは、前記アクティブ状態のストレージプログラムが前記データを書き込んだ場合に、それぞれの前記メタデータをそれぞれ変更し、
更新後のストレージプログラムの前記ストレージノードへの配置と、更新後のストレージプログラムが旧版メタデータから新版メタデータを生成すること、とを含む前記ストレージプログラムの更新を行う場合に、
スタンバイ状態の更新後のストレージプログラムが旧版メタデータから新版メタデータを生成することを、前記ストレージプログラムのアクティブ状態とスタンバイ状態を前記ストレージプログラムグループ内の複数のストレージプログラムで入れ替えながら、前記複数のストレージノードのストレージプログラムについて行う
ことを特徴とするストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
スタンバイ状態の更新後ストレージプログラムが旧版メタデータから新版メタデータを生成している期間の、前記アクティブ状態のストレージプログラムのデータ書き込みによるメタデータ変更は、スタンバイ状態の新版ストレージプログラムは旧版メタデータ及び新版メタデータの両方に変更を加え、
前記アクティブ状態のストレージプログラムに障害が発生して前記スタンバイ状態のストレージプログラムがアクティブ状態になる場合に、前記変更を加えた旧版メタデータを用いてデータにアクセスする
ことを特徴とするストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
前記スタンバイ状態の更新後ストレージプログラムが旧版メタデータから新版メタデータを生成している期間
、前記スタンバイ状態の更新後ストレージプログラムは、前記アクティブ状態のストレージプログラムからメタデータの更新要求を受信し、当該更新要求に基づいて前記旧版メタデータを更新し、更新した前記旧版メタデータを前記新版メタデータに変換し、新版メタデータ用の領域に格納する
ことを特徴とするストレージシステム。
【請求項4】
請求項1に記載のストレージシステムであって、
ストレージプログラムグループに含まれるストレージプログラムを有する第1のストレージノードと第2のストレージノードとを有し、
第2のストレージノードの更新後ストレージプログラムを稼働させ、第1のストレージノードの更新前ストレージプログラムがアクティブ状態で稼働中に、第2のストレージノードのスタンバイ状態の更新後ストレージプログラムが、旧版メタデータから新版メタデータを生成し、
前記
第2のストレージノードでの新版メタデータ作成後に、前記第2のストレージノードの更新後ストレージプログラムをスタンバイ状態からアクティブ状態に切り替え、第1のストレージノードの更新後ストレージプログラムをスタンバイ状態で稼働させて、旧版メタデータから新版メタデータを生成する
ことを特徴とするストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記ストレージプログラムグループを複数有し、
前記複数のストレージプログラムグループは、異なる組み合わせのストレージノードに前記ストレージプログラムを配置させるとともに、そのアクティブ状態の前記ストレージプログラムを前記ストレージノード間で分散するように前記アクティブ状態及びスタンバイ状態を設定しており、
前記複数のストレージプログラムグループは、前記ストレージプログラムの更新を行う場合に、前記アクティブ状態の前記ストレージプログラムを前記ストレージノード間で分散するように、前記ストレージプログラムのアクティブ状態とスタンバイ状態の切り替えを、複数のストレージプログラムグループで連動して行う
ことを特徴とするストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
前記ストレージノードは、メモリを有し、
前記アクティブ状態のストレージプログラムは、前記メモリに、入出力するデータを入出力性能向上のために一時的に格納し、
前記スタンバイ状態のストレージプログラムは、前記メモリの前記入出力するデータを一時的に格納するための領域を用いて、前記旧版メタデータから新版メタデータを生成する
ことを特徴とするストレージシステム。
【請求項7】
データを格納するストレージデバイスと、
前記ストレージデバイスへのデータの入出力処理を行うストレージプログラムを実行する処理部を有する複数のストレージノードと、を備え、
前記ストレージプログラムは、メタデータを用いて前記ストレージデバイスのデータへアクセスし、前記メタデータを前記ストレージノードのメモリに格納し、
それぞれ異なる複数のノードに配置された複数の前記ストレージプログラムは、ストレージデバイスへのデータの入出力処理を行うアクティブ状態のストレージプログラムと、前記アクティブ状態のストレージプログラムに障害が発生した場合にその処理を引き継ぐスタンバイ状態のストレージプログラムと、によりストレージプログラムグループを構成し、
前記ストレージプログラムグループ内の前記アクティブ状態のストレージプログラム及び前記スタンバイ状態のストレージプログラムは、前記アクティブ状態のストレージプログラムが前記データを書き込んだ場合に、それぞれの前記メタデータをそれぞれ変更するストレージシステムが、
更新後のストレージプログラムの前記ストレージノードへの配置と、更新後のストレージプログラムが旧版メタデータから新版メタデータを生成すること、とを含む前記ストレージプログラムの更新を行う場合に、
スタンバイ状態の更新後のストレージプログラムが旧版メタデータから新版メタデータを生成することを、前記ストレージプログラムのアクティブ状態とスタンバイ状態を前記ストレージプログラムグループ内の複数のストレージプログラムで入れ替えながら、前記複数のストレージノードのストレージプログラムについて行う
ことを特徴とする
ストレージプログラム更新方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム及びストレージプログラム更新方法に関する。
【背景技術】
【0002】
ストレージ装置であるSDS(Software Defined Storage)においては、ユーザからの明示的な停止指示がない限り、データを入出力する機能(IO機能)を提供し続ける必要がある。一方で、ストレージ装置内で動作してIO機能を提供するストレージプログラムには機能追加や修正が必要となることがある。そのため、ユーザに対してIO機能を提供し続けながらストレージプログラムを交換可能とする必要がある。ストレージプログラムが用いるメタデータのマップが交換前後で同一であれば、ストレージプログラムの置き換えで交換が可能だが、交換前後でマップが変更される場合は、ストレージプログラムの置き換えに加えてマップの変換が必要となる。この場合、マップを変換しながらIO機能を提供し続ける必要がある。
【0003】
例えば、特許文献1では、複数計算機から構成されるSDSにおいてストレージプログラムを交換する際に、交換対象であるストレージプログラムが動作する計算機が有するボリュームを他の計算機に移動する。当該計算機が有する全てのボリュームを他の計算機に移動させ、当該計算機の有するボリュームがない状態にした上で当該計算機上で動作するストレージプログラムを新規に起動することでIO機能を提供し続けながらメタデータマップ変更を伴うストレージプログラムの交換を実現している。具体的には、特許文献1には、「仮想化機能を備えたSDS(Software Defined Storage)である第1の計算機と、SDSである第2の計算機とを含んでいる。第1の計算機は仮想化機能により、第2の計算機が有するボリュームを記憶領域として用いる論理ボリュームを提供できる。情報システムは、第2の計算機へのストレージ制御プログラムのインストール指示を受け付けると、第1の計算機が有する論理ボリュームのうち第2の計算機が有するボリュームを記憶領域とする論理ボリュームを特定し、特定された論理ボリュームが記憶領域として使用している、第2の計算機が有するボリュームに格納されたデータを、第1の計算機の有する記憶装置に移動する。その後第2の計算機にストレージ制御プログラムをインストールする。」との記載がある。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1では、ストレージプログラムを交換する計算機が有するボリュームを他の計算機に移動する。この時、他の計算機には当該ボリュームの移動が可能な未使用のストレージ容量が必要となる。特許文献1の提案する方式では、複数のストレージプログラムを同時に交換することは可能だが、同時に交換するプログラムの数が増加すると、交換の際に必要となる未使用のストレージ容量が増加する。また、ボリューム移動の際にもIO機能を提供し続ける必要がある。ボリューム移動に用いる通信帯域と、IO機能提供の際に用いる通信帯域が同一の場合は、IO機能の性能の劣化を抑止するためにはボリューム移動で使用する通信帯域などを制限する必要となる可能性がある。通信帯域に限らず、ボリューム移動とIO機能提供でコンピュートリソースを共有する場合には制限が必要となる可能性がある。制限が小さいとIO性能に与える影響が大きくなり、制限が大きいと、ボリューム移動に要する時間が長くなりストレージプログラムの交換に要する時間が長くなる。
交換のために余剰の未使用ストレージ容量等のリソースを必要としないこと、IO性能に大きな影響を与えないこと、および、交換に要する時間を短縮することが課題となる。
【課題を解決するための手段】
【0006】
上記目的を達成するために、代表的な本発明のストレージシステム及びストレージプログラム更新方法の一つは、データを格納するストレージデバイスと、前記ストレージデバイスへのデータの入出力処理を行うストレージプログラムを実行する処理部を有する複数のストレージノードと、を備え、前記ストレージプログラムは、メタデータを用いて前記ストレージデバイスのデータへアクセスし、前記メタデータを前記ストレージノードのメモリに格納し、それぞれ異なる複数のノードに配置された複数の前記ストレージプログラムは、ストレージデバイスへのデータの入出力処理を行うアクティブ状態のストレージプログラムと、前記アクティブ状態のストレージプログラムに障害が発生した場合にその処理を引き継ぐスタンバイ状態のストレージプログラムと、によりストレージプログラムグループを構成し、前記ストレージプログラムグループ内の前記アクティブ状態のストレージプログラム及び前記スタンバイ状態のストレージプログラムは、前記アクティブ状態のストレージプログラムが前記データを書き込んだ場合に、それぞれの前記メタデータをそれぞれ変更し、更新後のストレージプログラムの前記ストレージノードへの配置と、更新後のストレージプログラムが旧版メタデータから新版メタデータを生成すること、とを含む前記ストレージプログラムの更新を行う場合に、スタンバイ状態の更新後のストレージプログラムが旧版メタデータから新版メタデータを生成することを、前記ストレージプログラムのアクティブ状態とスタンバイ状態を前記ストレージプログラムグループ内の複数のストレージプログラムで入れ替えながら、前記複数のストレージノードのストレージプログラムについて行うことを特徴とする。
【発明の効果】
【0007】
本発明によれば、入出力処理を継続しつつ、ストレージプログラムを効率的に交換することができる。上記した以外の課題、構成及び効果は以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【0008】
【
図1】本発明の第一の実施例の環境を示す機器構成図
【
図3】アクティブストレージプログラムとスタンバイストレージプログラムの配置図
【
図4】ストレージプログラム交換中のスタンバイストレージプログラムのメモリ構成図
【
図5】第一の実施例のストレージプログラム交換処理のフローチャート
【
図6】第一の実施例の交換前後のアクティブストレージプログラムとスタンバイストレージプログラムの配置図
【
図7】第二の実施例の交換前後のアクティブストレージプログラムとスタンバイストレージプログラムの配置図
【
図8】第三の実施例のストレージプログラム交換処理のフローチャート
【発明を実施するための形態】
【0009】
図面を参照して、本発明の実施の形態に係る実施例の構成および機能について説明する。
【実施例1】
【0010】
図1に、第一の実施例に係るシステムの構成を示す。
システムは3台以上のストレージノード110と1台以上のコンピュートノード120と1台のコントロールノード130を有し、ストレージノード110を接続するバックエンドネットワーク140と、ストレージノード110とコンピュートノード120を接続するストレージサービスネットワーク150と、コントロールノード130とコンピュートノード120とストレージノード110を接続する管理ネットワーク160を有する。ストレージノード110とコンピュートノード120とコントロールノード130は一部またはすべてが同一のサーバであってもよい。バックエンドネットワーク140とストレージサービスネットワーク150と管理ネットワーク160は一部またはすべてが同一のネットワークであってもよい。
【0011】
ストレージノード110は1つ以上のCPU111とメモリ112と1台以上のストレージデバイス113を有する。
コントロールノードはメモリ131を有する。メモリ131は更新管理プログラム132を有する。
【0012】
図2にストレージノード110の有するメモリ112の構成を示す。
メモリ112はIO実行プログラム210とアクティブストレージプログラム220と、アクティブストレージプログラム220の用いるメモリであるアクティブ用メモリ230と、スタンバイストレージプログラム240とスタンバイストレージプログラムが用いるメモリであるスタンバイ用メモリ250と、IO要求振分プログラム260を有する。
【0013】
IO実行プログラム210は、IO実行部211と冗長化部212を有する。
アクティブストレージプログラム220は、IO管理部221とメタデータ通信部222を有する。アクティブ用メモリ230は、メタデータ231とIO性能向上用データ232を有する。
スタンバイストレージプログラム240は、メタデータ通信部241とメタデータ更新部242を有する。スタンバイ用メモリ250は、メタデータ251とIO性能向上用データ252を有する。
【0014】
図3に本システムにおけるアクティブストレージプログラムとスタンバイストレージプログラムを用いた冗長構成例300を示す。
図3においてはアクティブストレージプログラムをアクティブ、スタンバイストレージプログラムはスタンバイと記載する。
【0015】
アクティブストレージプログラムは当該プログラムが動作するストレージノード以外のストレージノードで動作する1個以上のスタンバイストレージプログラムとペアになる。ストレージノード(1)310で動作するアクティブストレージプログラム(A)312は、ストレージノード(2)320で動作するスタンバイストレージプログラム(A)323とペアを組んで動作している。
【0016】
アクティブストレージプログラムとスタンバイストレージプログラムの動作を記載する。
コンピュートノード120が発行したIO要求は、アクティブストレージプログラムが受信し当該要求を処理する。ストレージノードやアクティブストレージプログラムに障害が発生し、アクティブストレージプログラムが動作不能となった場合でもシステムはコンピュートノードにIO機能を継続して提供する必要がある。アクティブストレージプログラムが動作不能となった際には、当該プログラムとペアを組んでいるスタンバイストレージプログラムのうちの1個がアクティブに状態を変化させ、以降のIO要求を実行する。
【0017】
例えばストレージノード(1)310に障害が発生した場合、アクティブストレージプログラム(A)312は動作不能となる。この時、当該ストレージプログラムとペアを組んでいるストレージノード(2)320内のスタンバイストレージプログラム(A)323がアクティブストレージプログラムに状態を変化させる。障害発生前までアクティブストレージプログラム(A)312が受信して処理していたIO要求は、それ以降ストレージノード(2)320のアクティブストレージプログラム(A)323が受信して処理する。
【0018】
本システムにおけるIO処理フローを記載する。
例えばコンピュートノード120が発行したIO要求はストレージノード(3)330のIO要求振分プログラム331に受信される。IO要求振分プログラム331は、受信したIO要求の実行先を管理しているアクティブストレージプログラムを有するストレージノードを検出する。受信したIO要求の実行先がアクティブストレージプログラム(A)312に管理されていた場合は、ストレージノード(1)310を検出する。IO要求振分プログラム331は、検出したストレージノード(1)310で動作するIO要求振分プログラム311にIO要求を振り分ける。
【0019】
IO要求を振り分けられたIO要求振分プログラム311は、同一ストレージノード(1)310内のアクティブストレージプログラム(A)312に振り分けられたIO要求を通知する。アクティブストレージプログラム(A)312のIO管理部はIO実行プログラム314にIO実行を依頼する。アクティブストレージプログラム(A)312は、IO性能向上用データを用いて複数のIO要求を非同期に処理し、単位時間内で検出する実行先数やIO実行依頼数を増やすことでIO性能の向上を図る。
【0020】
アクティブストレージプログラム(A)312はIO実行依頼の際に、アクティブストレージプログラム(A)312の有するメモリであるアクティブ用メモリ内のメタデータを参照および更新する。
【0021】
障害時にスタンバイストレージプログラムがアクティブストレージプログラムに状態を変化させIOを継続して管理するために、アクティブ用メモリ内のメタデータと、当該アクティブストレージプログラムとペアであるスタンバイストレージプログラムの用いるスタンバイ用メモリ内のメタデータは一致している必要がある。
【0022】
そのため、アクティブストレージプログラム(A)312はメタデータを更新する際に更新内容をメタデータ通信部により、ペアであるスタンバイストレージプログラム(A)323に送信する。スタンバイストレージプログラム(A)323のメタデータ通信部はメタデータ更新情報を受信すると、メタデータ更新部により、当該更新をスタンバイ用メモリのメタデータに反映させる。
【0023】
アクティブストレージプログラム(A)312からIO実行を依頼されたIO実行プログラム314は、IO実行先のストレージデバイスを検出し、当該ストレージデバイスにIOを実行する。その際、IO実行プログラム314の有する冗長化部は当該ストレージノード(1)310やIO実行先のストレージデバイスに障害が起こった場合でもデータロストを発生させずにデータアクセスを保証するために、本IOが復旧可能となるようなデータをIO実行部がIOを実施したストレージデバイスが格納されているストレージノードとは別のストレージノード内のストレージデバイスに格納する。例えばミラーリングによりデータを保証している場合、IO実行を依頼されたIO実行プログラム314はストレージノード(1)310内のストレージデバイスにIOを実行するとともに、ストレージノード(3)330で動作するIO実行プログラム334に当該IO情報を送信する。IO実行プログラム334はストレージノード(3)330の有するストレージデバイスに当該情報を格納する。データ保証方式はミラーリングであっても分散パリティであってもそれ以外であってもよい。また、ストレージプログラムのペア配置とIO実行プログラムの冗長構成配置は関連してもしなくてもよい。
【0024】
図4にストレージプログラムの用いるメモリマップを交換中のストレージノードのメモリが有する新版スタンバイストレージプログラムと交換中の新版スタンバイストレージプログラムが用いるメモリである交換中スタンバイ用メモリの構成を示す。
以降、交換前のプログラムを旧版、交換後のプログラムを新版と記載する。
新版スタンバイストレージプログラム410は、メタデータ通信部411と、メタデータ新旧更新部412とメタデータ新旧変換部413を有する。
【0025】
交換中に新版スタンバイストレージプログラム410が用いるメモリである交換中スタンバイ用メモリ420は、旧版用メタデータ421と新版用メタデータ422を有する。スタンバイストレージプログラムはIOを実行しないため、IO性能向上用データは使用しない。交換中はIO性能向上用データ用に確保している領域に新版用メタデータを格納する。
【0026】
新版スタンバイストレージプログラム410がIO管理を実施するように状態を変化させた新版アクティブストレージプログラムは、新版用メタデータ422にアクセスしながら新版モードで動作することも、旧版用メタデータ421にアクセスしながら旧版モードで動作することもできる。この時、選択しなかった版のメタデータは破棄し、当該領域にIO性能向上用データを格納する。
【0027】
図5にストレージプログラムのバージョン交換処理フローを示す。
コントロールノード130の更新管理プログラム132は、ユーザからの更新要求を受信する(ステップ501)。
【0028】
更新管理プログラム132はシステム内から交換対象である旧版で動作しているストレージプログラムのペアを検出する(ステップ502)。
図5ではストレージノード(1)にアクティブストレージプログラム、ストレージノード(2)にペアになるスタンバイストレージプログラムが動作している場合のフローを記載している。
【0029】
検出したペアのスタンバイストレージプログラムに交換開始要求1を送信する(ステップ503)。なお、ペアが1個のアクティブストレージプログラムと複数のスタンバイプログラムから構成されていた場合は、全てのスタンバイストレージプログラムに対して要求を送ってもよいし、一部のスタンバイストレージプログラムに対して要求を送ってもよい。
【0030】
交換開始要求1を受信したストレージノード(2)では、新版スタンバイストレージプログラムを起動する(ステップ504)。新版スタンバイストレージプログラムの起動が完了した時点で、動作していた旧版スタンバイストレージプログラムを停止する(ステップ505)。
【0031】
新版スタンバイストレージプログラムはスタンバイ用メタデータ内のIO性能向上用データ領域を新版用メタデータ領域として確保する(ステップ506)。
新版スタンバイストレージプログラム410内のメタデータ新旧変換部413は、スタンバイ用メモリ内の旧版用メタデータ421を読み出し、新版用メタデータに変換した上で、確保した新版用メタデータ領域に格納する(ステップ507)。マップ交換処理中も当該新版スタンバイストレージプログラムとペアになっている旧版アクティブストレージプログラムはIOを実行している。マップ交換中であっても新版スタンバイストレージプログラムは旧版アクティブストレージプログラムからのメタデータの更新要求を受信する。メタデータ新旧更新部412は、当該データを旧版用メタデータ421に格納した上で、当該データを新版用メタデータに変換し新版用メタデータ領域にも格納する。
【0032】
メモリマップ変換が完了したら、コントロールノードに完了を通知する(ステップ508)。コントロールノードは完了通知を受信する(ステップ509)。
コントロールノードは、ステップ502で検出したペアが複数のスタンバイストレージプログラムを有しており、ペア内に旧版のスタンバイストレージプログラムが残っている場合は、ステップ503からステップ509を実施する。ペア内に旧版スタンバイストレージプログラムがなくなるまで本処理を繰り返す。
【0033】
コントロールノードはステップ502で検出したペアの旧版アクティブストレージプログラムと、ペア内の1個の新版スタンバイストレージプログラムに対してスワップ要求を送信する(ステップ510)。
【0034】
ストレージノード(1)はスワップ要求を受信すると旧版アクティブストレージプログラムの処理を停止し(ステップ511)、新版スタンバイストレージプログラムに処理を切り替える(ステップ512)。新版スタンバイストレージプログラムの起動が高速であればアクティブストレージプログラムの停止後に新版スタンバイストレージプログラムの起動をしてもよいし、スワップ要求受信時に新版スタンバイストレージプログラムを起動しておいて、アクティブストレージプログラム停止時に新版スタンバイストレージプログラムに処理を切り替えてもよい。処理が完了したらコントロールノードに完了を通知する。
【0035】
ストレージノード(2)はスワップ要求を受信すると新版スタンバイストレージプログラムをアクティブストレージプログラムに状態変更する(ステップ513)。本変更を以降アクティブ化と記載する。アクティブ化により、スタンバイストレージプログラム用として用いていたメモリはアクティブストレージプログラム用メモリとして使用される。この時、旧版用メタデータを破棄し、当該領域をIO性能向上用データの格納領域として使用する(ステップ514)。処理が終了したらコントロールノードに完了を通知する。
【0036】
ステップ511から514までのスワップ処理は、コンピュートノードで実行されるIOに設定されているタイムアウト時間よりも短い時間内に完了する。そのため、コンピュートノードから本処理の影響は観測されない。
【0037】
コントロールノードはストレージノード(1)とストレージノード(2)からスワップ処理の完了通知を受信する(ステップ515)。コントロールノードは、スワップ処理により起動した新版スタンバイストレージプログラムに交換開始要求2を送信する(ステップ516)。
【0038】
交換開始要求2を受信した新版スタンバイストレージプログラムはマップ変換処理2(ステップ506から508)の処理を実行する(ステップ517)。
コントロールノードは完了通知を受信したら(ステップ518)、交換処理を完了する。
【0039】
交換処理中にアクティブストレージプログラムやアクティブストレージプログラムが動作するストレージノードに障害が発生してアクティブストレージプログラムの動作が不能となった場合、交換処理中の新版スタンバイストレージプログラムがアクティブ化する。
【0040】
障害がステップ501からステップ509までのスタンバイストレージプログラムのメモリマップ変換が未完の状態で発生した場合は、新版スタンバイストレージプログラムは新版メタデータを破棄し、当該領域をIO性能向上用データの格納領域として使用する。この時、アクティブ化した新版アクティブストレージプログラムは旧版用メタデータにアクセスしながら旧版モードで動作する。
【0041】
ステップ510以降の交換開始要求1に起因するメモリマップ変換が完了している状態で障害が発生した場合は、新版スタンバイストレージプログラムは旧版メタデータを破棄し、当該領域をIO性能向上用データの格納領域として使用する。この時、アクティブ化した新版アクティブストレージプログラムは新版用メタデータにアクセスしながら新版モードで動作する。
【0042】
ストレージプログラムのみ交換する場合は、あるIO要求に対してそれを受信するアクティブストレージプログラムが常に存在するため、IO無停止かつIO冗長度を維持しながらプログラムの交換をすることができる。
【0043】
ストレージプログラムの交換とIO実行プログラムの交換を同時に行う場合は、プログラムの交換が完了するまではIO実行プログラムの冗長化部の通信先が存在しない可能性がある。IO無停止での交換は可能だが、IO冗長度は低下する。交換完了後に交換中に更新されたデータについて再冗長化を実施するが、再冗長化処理中はIO性能に影響が生じる。
【0044】
ストレージプログラムの交換とIO要求振分プログラムの交換を同時に行う場合は、IO要求振分プログラムの交換中はコントロールノードから当該プログラムへのアクセスが不能となるが、別のストレージノード上で動作するIO要求振分プログラムにIO要求を依頼すればIOを継続実行することは可能である。コントロールノードからのアクセスパス切り替えを行うことで、IOは継続可能であり、IO冗長度は維持される。
【0045】
図6にストレージプログラム交換前後のシステム内のアクティブストレージプログラムとスタンバイストレージプログラムの配置を示す。なお、図ではアクティブストレージプログラムをアクティブ、スタンバイストレージプログラムをスタンバイ、交換後の新版を新、交換前の旧版を旧と記載している。
【0046】
図5で記載した交換処理フロー実施前のプログラム配置を610、交換処理フローが完了した時のプログラムの配置を620に示す。
アクティブストレージプログラムはIO処理を実行する際にCPUなどのコンピュートリソースを使用する。一つのストレージノード内で複数のアクティブストレージプログラムが動作すると、当該ストレージノードの有するCPU数が十分ではない場合、CPUが不足し、IO性能が低下する恐れがある。システム内のストレージノードの有するCPU数が等しい場合、CPU使用効率の観点からは各ストレージノードで動作するアクティブストレージプログラム数を均一にするのが望ましい。なお、システム内のストレージノードの有するCPU数が不均一である場合は、CPU数に応じて動作するアクティブストレージプログラム数を調整してもよい。CPUに限らずメモリやNICなどのコンピューティングリソースについても同様である。
【0047】
配置620では、ストレージノード(1)で0個のアクティブストレージプログラムが動作している一方で、ストレージノード(2)では2個のアクティブストレージプログラムが動作し、ストレージノード(3)では1個のアクティブストレージプログラムが動作している。ストレージノード内で動作するアクティブストレージプログラムの数を均一に配置するために、コントロールノードはストレージプログラムのスワップを実施したストレージノード(1)とストレージノード(2)に再度スワップ要求を送信する。ストレージノード(1)で動作する新スタンバイストレージプログラム(A)を新アクティブストレージプログラム(A)に変更し、ストレージノード(2)で動作する新アクティブストレージプログラム(A)を新スタンバイストレージプログラム(A)に変更する。これにより、システム内のストレージノード内で動作するアクティブストレージプログラム数を均一にする(配置630)。
【0048】
旧版で動作しているペアBやペアCに対しても、
図5に示す交換処理フローおよび
図6の620から630で実施したスワップ処理を実施することで、システムの有する全てのストレージプログラムを新版にすることができる。
【実施例2】
【0049】
第二の実施例について第一の実施例と異なる部分を記載する。
第二の実施例では第一の実施例で用いた(
図6の620から630)スワップ処理ではなく、継続してストレージプログラムの交換処理を実施することで、システム内のストレージノードで動作するアクティブストレージプログラム数を均一にする。
【0050】
第二の実施例のプログラム配置を
図7に示す。
図5で記載した交換処理フロー実施前のプログラム配置を610、交換処理フローが完了した時のプログラムの配置を620に示す。
配置620では、ストレージノード(1)で0個のアクティブストレージプログラムが動作している一方で、ストレージノード(2)では2個のアクティブストレージプログラムが動作し、ストレージノード(3)では1個のアクティブストレージプログラムが動作している。
【0051】
CPU使用効率を上げるためにアクティブストレージプログラム数を均一にする必要がある一方で、システム内の全ての旧ストレージプログラムを新ストレージプログラムに交換する必要もある。
図5の処理フローに記載したように、ストレージプログラムの交換によりペアであるアクティブストレージプログラムとスタンバイストレージプログラムは動作するストレージノードが交換される。
【0052】
第二の実施例では、配置620の状態から継続してストレージプログラムの交換を行うことでプログラム交換完了時にシステム内のストレージノードで動作するアクティブストレージプログラムの数を均一にする。
【0053】
配置620ではストレージノード(2)でペアAの新版アクティブストレージプログラムとペアBの旧版アクティブストレージプログラムが動作している。交換処理フローのステップ502でペアBを検出し、ペアBに対して交換処理フローを実施することで、プログラム配置は710に示すものとなる。
【0054】
具体的には、ステップ502のペア検出において、同一ストレージノード内で動作するアクティブストレージプログラム数が多いストレージノードを調査し、当該ストレージノード内で旧版のアクティブストレージプログラムが動作している場合は当該プログラムのペアを検出する。
【0055】
システム内で動作するストレージプログラムが全て新版となるまで本処理を行うことで、ストレージノード内で動作するアクティブストレージプログラム数を均一にすることができる。
【実施例3】
【0056】
第三の実施例について、第一および第二の実施例と異なる部分を記載する。
システム内の全ストレージプログラムのペアに対して並列に交換を実施する交換処理フローを
図8に示す。
【0057】
コントロールノード130の更新管理プログラム132は、ユーザからの更新要求を受信する(ステップ801)。
更新管理プログラムはシステム内から交換を行う旧版で動作しているストレージプログラムのペアを検出し(ステップ802)、検出した全てのペアのスタンバイストレージプログラムに交換開始要求1を送信する(ステップ803)。なお、ペアが1個のアクティブストレージプログラムと複数のスタンバイプログラムから構成されていた場合は、全てのスタンバイストレージプログラムに対して要求を送ってもよいし、一部のスタンバイストレージプログラムに対して要求を送ってもよい。
【0058】
交換開始要求1を受信したストレージノードでは
図5のステップ504からステップ508と同様の処理を実施する(ステップ804)。
コントロールノードは、システム内に未交換のスタンバイストレージプログラムがなくなるまでステップ803から804の処理を繰り返す。
コントロールノードはステップ802で検出したペアの旧版アクティブストレージプログラムと、1個の新版スタンバイストレージプログラムに対してスワップ要求を送信する(ステップ805)。例えば
図6の610に示す構成の場合は、1個のストレージノード内で、新版のアクティブ化(ステップ513-514)と新版のスタンバイ起動(ステップ511-512)が同時に実行される(ステップ806)。コントロールノードは交換後のアクティブストレージプログラムとスタンバイストレージプログラムの配置が第二の実施例の完了時と同様になるようにスワップ要求を送信する。
【0059】
スワップ処理の完了通知を受信したコントロールノードは、スワップ処理により起動した新版スタンバイストレージプログラムに交換開始要求2を送信する(ステップ807)。
交換開始要求2を受信した新版スタンバイストレージプログラムはステップ517の処理を実行する(ステップ808)。
コントロールノードはすべての新版スタンバイストレージプログラムからの完了通知を受信(ステップ809)したら、ストレージプログラム交換処理を完了する。
本処理完了時には、第二の実施例を用いたときと同様のプログラム配置となる。
【0060】
上述してきたように、開示したストレージシステムは、データを格納するストレージデバイス113と、前記ストレージデバイスへのデータの入出力処理を行うストレージプログラムを実行する処理部(CPU111)を有する複数のストレージノード110と、を備え、前記ストレージプログラムは、メタデータを用いて前記ストレージデバイス113のデータへアクセスし、前記メタデータを前記ストレージノード110のメモリに格納し、それぞれ異なる複数のノードに配置された複数の前記ストレージプログラムは、ストレージデバイス113へのデータの入出力処理を行うアクティブ状態のストレージプログラムと、前記アクティブ状態のストレージプログラムに障害が発生した場合にその処理を引き継ぐスタンバイ状態のストレージプログラムと、によりストレージプログラムグループを構成し、前記ストレージプログラムグループ内の前記アクティブ状態のストレージプログラム及び前記スタンバイ状態のストレージプログラムは、前記アクティブ状態のストレージプログラムが前記データを書き込んだ場合に、それぞれの前記メタデータをそれぞれ変更し、更新後のストレージプログラムの前記ストレージノードへの配置と、更新後のストレージプログラムが旧版メタデータから新版メタデータを生成すること、とを含む前記ストレージプログラムの更新を行う場合に、スタンバイ状態の更新後のストレージプログラムが旧版メタデータから新版メタデータを生成することを、前記ストレージプログラムのアクティブ状態とスタンバイ状態を前記ストレージプログラムグループ内の複数のストレージプログラムで入れ替えながら、前記複数のストレージノード110のストレージプログラムについて行う。
【0061】
すなわち、メタデータを格納したメモリの領域が、メタデータのメモリマップである。更新後のストレージプログラムが新版のストレージプログラムであり、更新前のストレージプログラムが旧版のストレージプログラムである。
開示のシステムでは、新メモリマップを参照して新版のストレージプログラムとして動作することも、旧メモリマップを参照して旧版のストレージプログラムとして動作することも可能な新版のストレージプログラムを用いている。当該プログラムを用いてIOを継続しながら、メモリマップの新旧を変換する。変換中には新旧のメモリマップを所有する必要があるため、IO機能を提供するために必須ではないIO性能向上のために確保しているメモリ(具体的には、メモリに入出力性能向上の用途で確保されていた領域)を一時的に開放し、当該領域に新メモリマップを格納する。
アクティブ-スタンバイ構成のSDSにおいては、正常時はスタンバイストレージプログラムはIOを行わない。本手段ではスタンバイストレージプログラムを新版のストレージプログラムに交換した上で、アクティブストレージプログラムとスタンバイストレージプログラムの入れ替えを実施する。入れ替え後、スタンバイストレージプログラムを新版に交換し、メモリマップを変換する。これにより、アクティブ-スタンバイの両ストレージプログラムのメモリマップを新版に交換し、各プログラムを新版のストレージプログラムとして動作可能にする。
このように、IO機能を提供しないスタンバイストレージプログラムでのみメモリマップの変換を行うことで、IOを継続しつつIO性能に影響のない効率的なストレージプログラムの交換を実現することができる。
【0062】
旧版メタデータを新版メタデータに変換する処理の途中(メモリマップの変換中)で前記スタンバイ状態からアクティブ状態に切り替える必要が生じた場合には、新版のストレージプログラムは、前記領域に保持された前記新版メタデータを破棄し、前記領域を入出力性能向上の用途で用いる。
また、旧版メタデータを新版メタデータに変換する処理の完了後(メモリマップの変換後)に前記スタンバイ状態から前記アクティブ状態に切り替える必要が生じたならば、新板のストレージプログラムは、前記旧版メタデータを破棄し、前記新版メタデータを参照して入出力の処理を行う。
このため、スタンバイ状態からアクティブ状態に切り替える必要がどのようなタイミングで生じても、新版のストレージプログラムは、適切なメタデータを使用して入出力の処理を開始することができる。
【0063】
アクティブ-スタンバイを入れ替えて、双方のストレージプログラムの入れ替えとメモリマップの変換が完了したならば、実施例1に開示したように、元々のアクティブ-スタンバイの状態に戻すことで、本来の性能を発揮することができる。
【0064】
また、実施例2に開示したように、アクティブ状態であったストレージプログラムをスタンバイ状態に切り替えるに伴って同一グループに属する他のストレージプログラムをアクティブ状態にした結果、1のストレージノードの複数のストレージプログラムがアクティブ状態となった場合に、アクティブ状態のストレージプログラムのうち、更新前のストレージプログラムを選択して、更新のためにスタンバイ状態に移行させてもよい。
このように、複数のアクティブストレージプログラムが1のストレージノードで動作する状況を解消しつつ、ストレージプログラムを順次交換することで、負荷を分散しながらストレージプログラムの交換を進めることができる。
【0065】
また、実施例3で開示したように、複数のストレージノードのスタンバイストレージプログラムを並行して更新し、その後、入れ替えた全てのストレージプログラムが新動作用データを参照可能となった後に、複数のストレージノードのアクティブストレージプログラムをスタンバイ状態に切り替えた上で、並行して更新してもよい。
このように、並行して処理を行うことで、短時間でストレージプログラムの入れ替えを完了することができる。
【0066】
なお、本発明は上記の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、かかる構成の削除に限らず、構成の置き換えや追加も可能である。
例えば、上記の実施例では、1アクティブに1のスタンバイを対応付けたペアを例示して説明を行ったが、1のアクティブに複数のスタンバイを対応付けたグループであってもよい。
【符号の説明】
【0067】
110:ストレージノード、111:CPU、112:メモリ、113:ストレージデバイス、120:コンピュートノード、130:コントロールノード、132:更新管理プログラム、140:バックエンドネットワーク、150:ストレージサービスネットワーク、160:管理ネットワーク、410:新版スタンバイストレージプログラム、411:メタデータ通信部、412:メタデータ新旧更新部、413:メタデータ新旧変換部、420:交換中スタンバイ用メモリ、421:旧版用メタデータ、422:新版用メタデータ