(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-09-17
(45)【発行日】2024-09-26
(54)【発明の名称】制御システム、制御装置、制御方法およびプログラム
(51)【国際特許分類】
G06F 3/06 20060101AFI20240918BHJP
G06F 11/14 20060101ALI20240918BHJP
G06F 11/20 20060101ALN20240918BHJP
【FI】
G06F3/06 306Z
G06F3/06 304B
G06F3/06 301Y
G06F11/14 641D
G06F11/20 669
(21)【出願番号】P 2023038417
(22)【出願日】2023-03-13
【審査請求日】2023-03-13
(73)【特許権者】
【識別番号】000227205
【氏名又は名称】NECプラットフォームズ株式会社
(74)【代理人】
【識別番号】100149548
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100181135
【氏名又は名称】橋本 隆史
(72)【発明者】
【氏名】宮城 雅彦
【審査官】松平 英
(56)【参考文献】
【文献】特開2021-081967(JP,A)
【文献】特表2004-523017(JP,A)
【文献】特開平05-307445(JP,A)
【文献】特開2019-016179(JP,A)
【文献】特開2012-048613(JP,A)
【文献】特開2009-058997(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
11/14-11/20
12/00-12/128
13/16-13/18
(57)【特許請求の範囲】
【請求項1】
同一の動作である冗長化動作を実行する第1制御装置および第2制御装置を備え、
前記第1制御装置が、
前記第1制御装置における起動から前記冗長化動作を開始するまでに実行する動作である起動時動作に係る2以上の異なる状態を表す第1状態情報を記憶し、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である第1状態メモリを有し、
前記第2制御装置における前記起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記第1制御装置から読み取り可能な不揮発性記憶装置である第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定し、
前記第2制御装置が、
前記第2状態メモリを有
し、
前記第1状態メモリに記憶されている前記第1状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定する
制御システム。
【請求項2】
前記冗長化動作が、電源停止時に不揮発性記憶装置へデータがバックアップされる揮発性記憶装置であるキャッシュメモリへのデータの記憶動作であり、
前記第1制御装置が、電源停止時に前記バックアップを行わなかった場合にはその旨を示す情報であるバックアップ無し情報を前記第1状態メモリに記憶し、
前記第2制御装置が、電源停止時に前記バックアップを行わなかった場合には前記バックアップ無し情報を前記第2状態メモリに記憶し、
前記第1制御装置が、さらに、前記第2状態メモリに前記バックアップ無し情報が記憶されている場合に、前記冗長化動作を実行しないことを決定し、
前記第2制御装置が、さらに、前記第1状態メモリに前記バックアップ無し情報が記憶されている場合に、前記冗長化動作を実行しないことを決定する
請求項
1に記載の制御システム。
【請求項3】
前記冗長化動作は、前記第1制御装置と前記第2制御装置との間の所定の通信動作をともなう動作である
請求項
1または請求項
2に記載の制御システム。
【請求項4】
前記第1状態情報および前記第2状態情報が、BIOS動作開始、OS起動開始、および、前記通信を可能とするファームウェアの起動開始を表す情報を含む
請求項
3に記載の制御システム。
【請求項5】
同一の動作である冗長化動作を、第2制御装置と並行して実行し、
前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、自らの制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定する
制御装置。
【請求項6】
同一の動作である冗長化動作を実行する第1制御装置および第2制御装置のうち、前記第1制御装置が、前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作である起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記第1制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定するステップと、
前記第2制御装置が、前記第1制御装置における前記起動時動作に係る2以上の異なる状態を表す第1状態情報を記憶する不揮発性記憶装置、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である、前記第1制御装置の第1状態メモリに記憶されている前記第1状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定するステップと、
を含む制御方法。
【請求項7】
同一の動作である冗長化動作を、第2制御装置と並行して実行する制御装置に、
前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定すること、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、制御システム、制御装置、制御方法およびプログラムに関する。
【背景技術】
【0002】
特許文献1に記載されているストレージシステムでは、一方のストレージ装置で障害が発生した一重化状態から二重化状態への復帰の際に、ジャーナル(更新データ履歴情報)が、正常なストレージ装置から障害が発生したストレージ装置へと転送される。また、このストレージシステムでは、ストレージ装置へデータを入出力するホストにおいて、一方のストレージ装置から完了通知を正常に受領してから一定時間経過後も他方のストレージ装置から完了通知を受領できない場合は、障害が発生したとして、障害状態のストレージ装置の切り離しが行われる。また、このストレージシステムでは、正常なストレージ装置は、ストレージ装置間の通信リンクを通じて、障害が発生したストレージ装置の状態の確認等を行う。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載されているシステムでは、通信リンクを通じて送受信される情報が、一定時間経過後も受信できないこと等を利用して障害の発生が検出され、障害が発生した装置の切り離しが行われる。この構成では、例えば、停電発生時あるいは停電中に障害が発生し、復電後も障害が回復していない場合、復電後に、装置が再起動して通信リンクが再確立するのに要する時間を待って、障害が発生した装置の切り離しが行われることになる。あるいは、この構成では、例えば、障害が発生したとみられる装置を再起動して復旧を試みる場合、再起動後に、装置が再起動して通信リンクが再確立するのに要する時間を待って、障害が発生した装置の切り離しが行われることになる。すなわち、装置を再起動した後(あるいは装置が再起動できる状態となった後)、通信リンクを利用して障害の発生を検出する場合には、装置が再起動して通信リンクが再確立するのに要する時間だけ障害が発生した装置の切り離しが遅れてしまうことになるという課題がある。
【0005】
本発明の目的の一例は、上述の課題を解決することのできる制御システム、制御装置、制御方法およびプログラムを提供することである。
【課題を解決するための手段】
【0006】
本発明の第1の態様によれば、制御システムは、同一の動作である冗長化動作を実行する第1制御装置および第2制御装置を備え、前記第1制御装置が、前記第1制御装置における起動から前記冗長化動作を開始するまでに実行する動作である起動時動作に係る2以上の異なる状態を表す第1状態情報を記憶し、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である第1状態メモリを有し、前記第2制御装置における前記起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記第1制御装置から読み取り可能な不揮発性記憶装置である第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定し、前記第2制御装置が、前記第2状態メモリを有し、
前記第1状態メモリに記憶されている前記第1状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定する。
【0007】
本発明の第2の態様によれば、制御装置は、同一の動作である冗長化動作を、第2制御装置と並行して実行し、前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定する。
【0008】
本発明の第3の態様によれば、制御方法は、同一の動作である冗長化動作を実行する第1制御装置および第2制御装置のうち、前記第1制御装置が、前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作である起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記第1制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の前記第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定するステップと、前記第2制御装置が、前記第1制御装置における前記起動時動作に係る2以上の異なる状態を表す第1状態情報を記憶する不揮発性記憶装置、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である、前記第1制御装置の前記第1状態メモリに記憶されている前記第1状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定するステップと、を含む。
【0009】
本発明の第4の態様によれば、プログラムは、同一の動作である冗長化動作を、第2制御装置と並行して実行する制御装置に、前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の前記第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定すること、を実行させる。
【発明の効果】
【0010】
本発明によれば、障害が発生した装置を切り離すのに要する時間を短縮することができる。
【図面の簡単な説明】
【0011】
【
図1】本発明の実施形態に係るストレージシステムの構成例を示すブロック図である。
【
図2】本発明の実施形態に係る制御部の構成例を示すブロック図である。
【
図3】本発明の実施形態に係る制御部の停電発生時の動作例を示すフローチャートである。
【
図4】本発明の実施形態に係る制御部の電源オン時の動作例を示すフローチャートである。
【
図5】本発明の実施形態に係る制御部の対向コントローラの起動待ち時の動作例を示すフローチャートである。
【
図6】本発明の実施形態に係る対向コントローラの状態と稼働状態メモリの内容と待ち時間の例との関係の例を示す模式図である。
【
図7】本発明の実施形態に関連する制御部の停電発生時の動作例を示すフローチャートである。
【
図8】本発明の実施形態に関連する制御部の電源オン時の動作例を示すフローチャートである。
【
図9】本発明の実施形態に関連する制御部の対向コントローラの起動待ち時の動作例を示すフローチャートである。
【
図10】本発明の実施形態に係る制御システムの構成例を示すブロック図である。
【
図11】本発明の実施形態に係る制御方法の構成例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、本発明の実施形態を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0013】
図1は、本発明の実施形態に係るストレージシステムの構成例を示すブロック図である。
図2は、本発明の実施形態に係る制御部の構成例を示すブロック図である。
図3は、本発明の実施形態に係る制御部の停電発生時の動作例を示すフローチャートである。
図4は、本発明の実施形態に係る制御部の電源オン時の動作例を示すフローチャートである。
図5は、本発明の実施形態に係る制御部の対向コントローラの起動待ち時の動作例を示すフローチャートである。
図6は、本発明の実施形態に係る対向コントローラの状態と稼働状態メモリの内容と待ち時間の例との関係の例を示す模式図である。
図7は、本発明の実施形態に関連する制御部の停電発生時の動作例を示すフローチャートである。
図8は、本発明の実施形態に関連する制御部の電源オン時の動作例を示すフローチャートである。
図9は、本発明の実施形態に関連する制御部の対向コントローラの起動待ち時の動作例を示すフローチャートである。なお、各図において同一または対応する構成には同一の符号を用いて説明を適宜省略する。
【0014】
(実施形態の構成の説明)
図1に示すように、本発明の一実施形態に係るストレージシステム1は、二重化された1対のストレージコントローラ10およびストレージコントローラ20と、ドライブ群30とを備える。ストレージシステム1は、サーバ等のホストシステム50から要求に応じて、例えば、ドライブ群30にデータを書き込み、また、ドライブ群30からデータを読み出す。
ストレージコントローラ20をストレージコントローラ10の対向コントローラともいう。ストレージコントローラ10をストレージコントローラ20の対向コントローラともいう。
【0015】
ストレージコントローラ10は、ホストポート11と、バックアップ用SSD(Solid State Drive)12と、キャッシュメモリ13と、BBU(Battery Backup Unit)14と、ディスクポート15と、稼働状態メモリ16と、制御部17とを備える。
ストレージコントローラ10を、コントローラ10ともいう。ストレージコントローラ20を、コントローラ20ともいう。バックアップ用SSDを、単にSSDともいう。
【0016】
コントローラ20は、コントローラ10と同一構成の制御装置であり、ホストポート21と、バックアップ用SSD22と、キャッシュメモリ23と、BBU24と、ディスクポート25と、稼働状態メモリ26と、制御部27とを備える。
【0017】
ドライブ群30は、RAID(Redundant Array of Inexpensive Disks)構成された複数のディスク31と図示していない制御装置とを備える。
【0018】
ホストシステム50は、1対の通信回線51および52を介してストレージシステム1に通信接続される。通信回線51は、コントローラ10のホストポート11に接続されている。また、通信回線52は、コントローラ20のホストポート21に接続されている。
【0019】
コントローラ10において、ホストポート11は、ホストシステム50との通信接続に用いられるポートである。バックアップ用SSD12は、不揮発性記憶装置であり、停電時等においてストレージシステム1へ電源が供給されなくなった場合に、キャッシュメモリ13に記憶されているデータをバックアップするための記憶装置である。キャッシュメモリ13は、揮発性記憶装置であり、ドライブ群30へ書き込むデータを一旦蓄積するための記憶装置である。BBU14は、予備電源供給装置であり、外部からの電源供給停止時に、キャッシュメモリ13に記憶されているデータをバックアップ用SSD12にバックアップするまでの間、コントローラ10と、ドライブ群30へ電源を供給する。ディスクポート15は、ドライブ群30との通信接続に用いられるポートである。
【0020】
制御部17は、コントローラ10内の各部を制御する制御装置であり、例えば、
図2に示すように、CPU(中央処理装置)171、主記憶装置172、補助記憶装置173、通信装置174、入出力装置175等を備える。補助記憶装置173は、1または複数の不揮発性記憶装置を含み、BIOS(Basic Input/Output System)1731、OS(Operating System)1732、FW(FirmWare)1733等のソフトウェア(プログラム等)を記憶している。BIOS1731は、コントローラ10の起動時に実行され、例えばOS1732を起動する。OS1732は、ホストシステム50とドライブ群30との間のデータのやりとりや、キャッシュメモリ13のデータのバックアップ等の処理を実行し、また、コントローラ10の起動時には、FW1733内の所定のプログラムを起動する等して、通信装置174による通信を可能とする。
【0021】
稼働状態メモリ16は、バッテリバックアップ機能を有する不揮発性記憶装置であり、外部からの電源供給停止時およびBBU14からの予備電源の供給停止時でも、コントローラ20から通信回線42を介して常時、データが参照できる構成を有している。稼働状態メモリ16は、例えば、バックアップ用の電池と、マイクロコンピュータ、PLD(Programmable Logic Device)等の半導体チップを用いて構成することができる。稼働状態メモリ16は、制御部17の要求に応じてコントローラ10の動作状態を表すデータ等の所定のメモリへの書き込み、および、更新を行うとともに、通信回線42を介して受信したコントローラ20からの要求に応じてデータをコントローラ20へ送信する。なお、コントローラ10の動作状態を表すデータは、例えば、BIOS動作開始、OS起動開始、対向コントローラとの通信を可能とするためのファームウェアの起動開始等を表すデータ(状態情報)を含む。また、稼働状態メモリ16は、動作状態を表すデータと区別して(別の記憶領域に)、停電発生時にバックアップ用SSD12にデータをバックアップしたか否かを表すデータを記録する。なお、稼働状態メモリ16への動作状態を表すデータやバックアップの状態を表すデータの書き込みは、例えば、OS1732が起動した後はOS1732によって行われ、OS1732の起動前はBIOS1731によって行われる。
【0022】
また、コントローラ10は、コントローラ間通信回線41、稼働状態メモリ26に記憶されたデータを参照するための通信回線42、コントローラ装填状態信号線43、および、電源(DC)ON状態信号線44で、コントローラ20と接続されている。コントローラ間通信回線41は、コントローラ10とコントローラ20との間で、制御信号やデータを送受信するための通信回線である。コントローラ装填状態信号線43は、対向コントローラの有無を確認するための信号線である。電源(DC)ON状態信号線44は、対向コントローラに対して外部電源(直流電源等)が供給されていることを確認するための信号線である。制御部17において、例えば、コントローラ間通信回線41と通信回線42は通信装置174に接続され、コントローラ装填状態信号線43と電源(DC)ON状態信号線44は入出力装置175に接続される。
【0023】
コントローラ20において、ホストポート21、バックアップ用SSD22、キャッシュメモリ23、BBU24、ディスクポート25、稼働状態メモリ26、および、制御部27は、コントローラ10内の、ホストポート11、バックアップ用SSD12、キャッシュメモリ13、BBU14、ディスクポート15、稼働状態メモリ16、および、制御部17とそれぞれ同一構成を有する。
【0024】
(実施形態の動作例の説明)
まず、
図1を参照して、ストレージシステム1と、ストレージシステム1に接続したホストシステム50からのライトデータの流れについて説明する。ホストシステム50からコントローラ10へホストポート11を経由して受信されたデータはキャッシュメモリ13に格納される。次にそのデータをコントローラ間通信回線41を経由して対向コントローラ20のキャッシュメモリ23にコピーし、二重化する。ここでライトの処理は一旦完了し、コントローラ10はホストシステム50に完了レスポンスを返す。
【0025】
キャッシュメモリ13および23に蓄えたライトデータは、非同期にディスクポート15および25を経由してRAID構成されたドライブ群30へ移される。移されたデータはキャッシュメモリ13および23上からは消去またはリードキャッシュ用データとして残される。ドライブ群30に書き落としていないライトデータは、一般的にダーティデータとも呼ばれている。
【0026】
ストレージシステム1が停電した時、給電が断たれるためBBU14および24が給電元となり一定時間コントローラ10および20は動作することができる。この間に、コントローラ10および20はそれぞれキャッシュメモリ13および23にあるダーティデータをそれぞれバックアップ用SSD12および22へ書き出す。ただし、ダーティデータが無かった場合は書き出されない。
【0027】
ダーティデータをすべて書き出し終わると、コントローラ10および20はそれぞれBBU14および24の給電を断ち、ストレージシステム1は電源OFF状態となる。
【0028】
復電後にストレージシステム1が起動するとき、コントローラ10および20は、それぞれバックアップ用SSD12および22からそれぞれキャッシュメモリ13および23へダーティデータを復元する。復元が終わるとそれぞれコントローラ20および10と通信してどちらのコントローラのダーティデータを採用するかを判定する。仮にコントローラ10側のダーティデータが採用となった場合は、コントローラ間通信回線41を使ってキャッシュメモリ13からキャッシュメモリ23にデータをコピーすることでデータの同期がとられる。
【0029】
また、コントローラ装填状態信号線43で対向コントローラが装填されているかどうかを知ることができ、電源(DC)ON状態信号線44で対向コントローラに電源が入っているかを知ることができるようになっている。
【0030】
次にプログラムの動作について参考例(
図1に示す構成から稼働状態メモリ16および26を省略した構成)と、本実施形態(
図1に示す稼働状態メモリ16および26がある構成)の処理を比較して説明する。
【0031】
まず、停電時(停電発生時)のプログラムの処理の流れを説明する。
図7に示す通り、参考例の処理では停電が発生すると、コントローラ10および20はバックアップ処理を始める。
図7の処理では、コントローラ10および20は、それぞれ自らの各部に対して処理を行う。
【0032】
コントローラ10および20は、キャッシュメモリ13および23からバックアップ用SSD12および22へのバックアップが必要なデータがあるかを判定し(ステップS50)、なければBBU14および24からの電源供給を切断し、バックアップ処理は終了する(ステップS50:No→ステップS55→END)。
【0033】
一方、バックアップが必要なデータがある場合(ステップS50:Yes)、コントローラ10および20は、バックアップ用SSD12および22に複数回に分けて転送する(ステップS51→ステップS52→ステップS53:No→ステップS52→…)。バックアップする必要があるデータをすべて転送すると、コントローラ10および20は、BBU14および24からの電源供給を切断し、バックアップ処理を終了する(ステップS53:Yes→ステップS54→ステップS55→END)。
【0034】
一方、
図3に示す通り、本実施形態のプログラムの処理では、停電が発生すると、コントローラ10および20はバックアップ処理を始める。
図3の処理では、コントローラ10および20は、それぞれ自らの各部に対して処理を行う。
【0035】
コントローラ10および20は、キャッシュメモリ13および23からバックアップ用SSD12および22へのバックアップが必要なデータがあるかを判定し(ステップS10)、なければ、稼働状態メモリ16および26に「バックアップ無し」を記録し(ステップS10:No→ステップS19)、BBU14および24からの電源供給を切断し(ステップS18)、バックアップ処理を終了する(END)。
【0036】
一方、バックアップが必要なデータがある場合(ステップS10:Yes)、コントローラ10および20は、バックアップ用SSDにバックアップする処理を開始し(ステップS11)、稼働状態メモリ16および26に「バックアップ開始」を記録する(ステップS12)。さらに、コントローラ10および20は、バックアップ用SSD12および22に複数回に分けてデータを転送する(ステップS13→ステップS14→ステップS15:No→ステップS13→…)。その間、コントローラ10および20は、データを1回転送するごとに、バックアップ中であることと転送率(書き込み率)を稼働状態メモリ16および26に記録する(ステップS14)。
【0037】
バックアップする必要があるデータをすべて転送すると、コントローラ10および20は、稼働状態メモリ16および26にバックアップが完了したこと(「バックアップ完了」)を記録した後、BBU14および24からの電源供給を切断し、バックアップ処理を終了する(ステップS15:Yes→ステップS16→ステップS17→ステップS18→END)。
【0038】
次にストレージシステム1の起動処理について説明する。
図8のステップS60からS66では、コントローラ10および20は、それぞれ自らの各部に対して処理を行う。
図8に示す通り、参考例のプログラムの処理ではコントローラ10および20に電源が入りBIOSが実行され、その後OSがロード・実行される(ステップS60→ステップS61)。次に、コントローラ10および20は、バックアップデータをリストアする(ステップS62)。バックアップデータがない場合は、コントローラ10および20は、バックアップデータのリストアを行わずに先に進む(ステップS61の後、ステップS65)。バックアップデータがある場合、コントローラ10および20は、バックアップデータを複数回に分けて転送する。コントローラ10および20が、バックアップデータをすべてキャッシュメモリ13および23上に転送すると、リストア完了となる(ステップS62→ステップS63→ステップS64:No→ステップS63→…→ステップS64:Yes→ステップS65)。
【0039】
次に、コントローラ10および20のそれぞれで、FWがロード・実行される(ステップS66)。FWが起動すると、コントローラ10および20は、対向コントローラと通信可能となるのを待つ処理がある(ステップS67)。対向コントローラとの通信はFWのコントローラ間通信回線41の初期設定後に可能となるため、このタイミングで待つ必要がある。
【0040】
コントローラ10および20は、
図8のステップS67で、
図9の処理を行う。
図9に示す通り、対向コントローラの起動待ち処理では、コントローラ10および20は、対向コントローラが未装填かどうかの判断(ステップS70)、電源が入っているかの判断(ステップS71)を経て、タイムアウト時間を設定した後(ステップS72)、対向コントローラが通信可能になるのを待つ(ステップS73:No→ステップS74:No→ステップS73→…→ステップS73:YesまたはステップS74:Yes)。
【0041】
タイムアウト時間が経過することなく対向コントローラと通信可能になった場合には(ステップS74:No→ステップS73:Yes)、2コントローラ動作に設定され、キャッシュメモリ二重化処理が実行される(END)。2コントローラ動作では、コントローラ10および20が冗長化動作を行う。
【0042】
他方、対向コントローラが未装填の場合(ステップS70:No)、電源が入っていない場合(ステップS71:No)、または、対向コントローラと通信可能になる前にタイムアウト時間の経過が発生した場合には(ステップS73:No→ステップS74:Yes)、対向コントローラ無し(1コントローラ)に決定されて(ステップS75)、
図9に示す処理が終了する(END)。タイムアウト時間による待機では、コントローラ10および20は、対向コントローラに電源が入っていてコントローラ間通信が出来ない期間の最大の時間を算出してその時間まで待つ必要がある。
【0043】
その時間はバックアップ用SSD12および22へのバックアップ時間、バックアップ用SSD12および22からのリストア時間、コントローラ10および20がReboot(リブート)にかかる時間、BIOS実行時間、OSがFWを起動するまでの時間、FWがコントローラ通信可能にするまでの時間の合計値と等しい。
【0044】
一例として、バックアップ用SSD12および22へのバックアップ時間=50秒、バックアップ用SSD12および22からのリストア時間=50秒、コントローラ10および20がRebootにかかる時間=20秒、BIOS実行時間=10秒、OSがFWを起動するまでの時間=5秒、FWがコントローラ通信可能にするまでの時間=5秒とすると、合計50+50+20+10+5+5=140秒の時間を最大待つ必要がある。
【0045】
図9に示す処理では、対向コントローラと通信が出来るようになるか(ステップS73:Yes)、最大時間待ってタイムアウトになると(ステップS74:Yes)、コントローラ10および20の処理が待ちループから抜けて対向コントローラの起動待ち処理は完了する(END)。
【0046】
図8に戻り、対向コントローラの起動待ち処理が完了すると、コントローラ10および20は、キャッシュメモリ13および23を対向コントローラと同期するキャッシュメモリ二重化処理を行い(対向コントローラが動いていないケースは二重化しない)(ステップS68)、FW後処理(ドライブの認識・ホストポート初期化等)を行い(ステップS69)、ストレージシステムの起動処理完了となる(END(装置Ready))。
【0047】
次に本実施形態におけるストレージシステム1の起動処理について説明する。
図4のステップS20からS32では、コントローラ10および20は、それぞれ自らの各部に対して処理を行う。
図4に示す通り、本実施形態のプログラム処理では、コントローラ10および20は、BIOS起動後に(ステップS20)、稼働状態メモリ16および26にBIOSが起動したことを記録する(ステップS21)。OS起動直後では、コントローラ10および20は、稼働状態メモリ16および26にOSが起動したことを記録する(ステップS22→ステップS23)。
【0048】
バックアップ用SSD12および22からのデータリストア処理では、コントローラ10および20は、リストア開始時に稼働状態メモリ16および26にリストアが開始したことを記録する(ステップS24→ステップS25)。なお、バックアップデータがない場合は、コントローラ10および20は、リストアを行わないで先に進む(ステップS22の後、ステップS29)。
【0049】
リストアの転送時には(ステップS26→ステップS27→ステップS28:No→ステップS26→…)コントローラ10および20は、1転送ごとにリストア中であることと、および、リストア進捗率を稼働状態メモリ16および26に記録する(ステップS27)。
【0050】
リストアが全て完了するか(ステップS28:Yes)、リストアするデータが存在しない場合は、コントローラ10および20は、リストア処理を完了する(ステップS29)。このとき、コントローラ10および20は、「リストア完了」を稼働状態メモリ16および26に記録する(ステップS30)。
【0051】
次に、コントローラ10および20は、FWを起動し(ステップS31)、FWを起動(「FW起動」)したことを稼働状態メモリ16および26に記録した後(ステップS32)、対向コントローラの起動待ち処理となる(ステップS33)。
【0052】
コントローラ10および20は、
図4のステップS33で
図5の処理を行う。
図5に示す通り、本実施形態の対向コントローラの起動待ち処理では、コントローラ10および20は、対向コントローラが未装填かどうかの判断(ステップS40)、電源が入っているかの判断に加え(ステップS41)、対向コントローラの稼働状態メモリ16および26を参照して対向コントローラでバックアップ処理が行われたか否かを判断する(ステップS42)。
【0053】
また、コントローラ10および20は、対向コントローラの稼働状態メモリ16および26を参照して、対向コントローラが現在何を実行中であるのか判定して、稼働状態メモリ16および26の内容が変化した場合には(ステップS43:Yes)、稼働状態メモリ16および26の内容に応じてどのくらい待てばいいかのウエイト時間を最適化する(ステップS44)。
【0054】
すなわち、
図5に示す対向コントローラの起動待ち処理では、コントローラ10および20は、対向コントローラが未装填かどうかの判断(ステップS40)、電源が入っているかの判断(ステップS41)を経て、稼働状態メモリ16および26の内容に基づいて「バックアップ無し」との記録があるか否かを判断する(ステップS42)。
【0055】
例えば、コントローラ10においてバックアップしたデータが無く、かつ、稼働状態メモリ26に「バックアップ無し」との記録がある場合、この時点で直ぐにキャッシュメモリ13および23を二重化する処理を開始する必要は無い。例えば、コントローラ20の立ち上がりを待たずにコントローラ10のみの1コントローラ(1つのコントローラ)でストレージシステム1を立ち上げ、ホストシステム50との通信が開始されるまでにコントローラ20との通信を確立させるようにすればよい。
【0056】
あるいは、コントローラ10においてバックアップしたデータがあったにもかかわらず、稼働状態メモリ26に「バックアップ無し」と記録されていた場合には、コントローラ20で正常にバックアップが行われなかったことになる。この場合も、コントローラ10のみの1コントローラでストレージシステム1を立ち上げることを判断することができる。
【0057】
いずれの場合でも、コントローラ10は、コントローラ20を二重化処理から切り離す判断をすることができる。
図5に示す処理では、対向コントローラが未装填の場合(ステップS40:No)、電源が入っていない場合(ステップS41:No)、「バックアップ無し」が記録されていた場合(ステップS42:Yes)、コントローラ10または20は、対向コントローラ無し(1コントローラ)に決定し(ステップS47)、
図5に示す処理を終了する(END)。
【0058】
一方、ステップS43では、コントローラ10または20が、起動後最初に対向コントローラの稼働状態メモリ16または26を参照した場合、または、ステップS43で前回参照した内容と今回参照した内容が異なる場合(ステップS43:Yes)、タイムアウト時間を設定(稼働状態により個別に設定)し(ステップS44)、対向コントローラと通信可能か否かの判断(ステップS45)とタイムアウトしたか否かの判断(ステップS46)が行われる。
【0059】
ステップS44では、稼働状態メモリ16または26の内容(状態)が変化した場合、次に内容(状態)が変化するまでに要する最大時間、あるいは、通信が可能となる前の最後の状態変化から通信が可能となる(通信が可能になった状態)までに要する最大時間に、タイムアウトの値が設定される。次の状態変化の前にタイムアウト時間が経過した場合、あるべき状態変化が時間内に発生しなかったことになり、対向コントローラの動作が正常でないことが確認できる。
【0060】
そして、コントローラ10または20は、対向コントローラが通信可能となるか(ステップS45:Yes)、タイムアウトが発生するか(ステップS46:Yes)するまで、稼働状態メモリ16または26の内容が変化する度に(ステップS43:Yes)、タイムアウトの設定を変更する(ステップS44)。
【0061】
タイムアウト時間が経過することなく(ステップS46:No)、対向コントローラと通信可能になった場合には(ステップS45:Yes)、2コントローラ動作に設定され、次にキャッシュメモリ二重化処理が実行される(END)。他方、対向コントローラと通信可能になる前にタイムアウト時間の経過が発生した場合には(ステップS45:No→ステップS46:Yes)、対向コントローラ無し(1コントローラ)に決定されて(ステップS47)、
図5に示す処理が終了する(END)。
【0062】
図6に個々の処理における待ち時間の例を示す。
図6は、対向コントローラの状態、または、稼働状態メモリ16または26の内容の例と、状態が次の状態に変化するまでの待ち時間との関係の例を示す。「コントローラ未装填」、「DC OFF(電源オフ)」、「DC ON(電源オン)」は、対向コントローラの状態の例である。「BIOS動作開始」、「OS起動開始」、「FW起動開始」、「バックアップ開始/中」、「バックアップ完了」、「リストア開始/中」、および、「リストア完了」は、稼働状態メモリ16または26の内容の例である。例えば、「BIOS動作開始」、「OS起動開始」、および、「FW起動開始」は、電源供給開始後、正常時には、待ち時間が経過する前に、この順番で、動作状態が変化(遷移)する。
【0063】
図5に示す処理では、コントローラ10または20は、例えば、対向コントローラが設定する稼働状態メモリ16または26の内容が、「BIOS動作開始」であればBIOS動作にかかる最大時間(目安として5秒程度)を待って次の「OS起動開始」に稼働状態メモリ16または26の内容が変化しなければ、対向コントローラのBIOS動作に障害があり動作していないと判断してタイムアウトとすることができる。
【0064】
同様に、コントローラ10または20は、稼働状態メモリ16または26の内容が「OS起動開始」であればOS起動してからFW起動するまでの時間(OS起動動作にかかる最大時間)(目安として5秒程度)を待って、次の「FW起動開始」に稼働状態メモリ16または26の内容が変化しなければOS動作に障害があり動作していないと判断してタイムアウトとすることができる。
【0065】
また、コントローラ10または20は、「FW起動開始」、「バックアップ開始/中」、「バックアップ完了」、「リストア開始/中」、「リストア完了」についても同様にその処理の最大時間を見積もってタイムアウト時間を設定しておけば待ち時間を最適化(短縮化)できる。
【0066】
上記の処理内容に従い、例えば停電時のSSDへのバックアップが完了してストレージシステム1が停止している状態で、1つのコントローラ10または20が電源は入っても動作しないような故障をしたときに、ストレージシステム1が起動したとすると、もう一つの正常なコントローラ20または10は対向コントローラ起動待ち処理(
図5)において故障した対向コントローラの最後の状態を稼働状態メモリ16または26から「バックアップ完了」として読み取り(ステップS43)、
図6の表からバックアップ完了の時のタイムアウト時間を20秒に設定する(ステップS44)。この場合、対向コントローラは故障していて動いていないので20秒間、稼働状態メモリ16または26の内容が変化しない。20秒後に対向コントローラ起動待ち処理は通信可能待ちタイムアウトとなり(ステップS46:Yes)、コントローラ20または10は、1コントローラとして起動処理を先に進める。
【0067】
つまり20秒の処理のところが、参考例の処理であればバックアップ時間+Reboot時間+リストア時間+BIOS動作時間+OS起動時間+FW起動時間の合計で140秒程度かかるため、120秒程度の起動時間短縮の効果があることになる。
【0068】
また、ストレージシステム1が起動したときに、1つのコントローラがOS起動中に故障を起こして停止してしまった場合では、もう一つの正常なコントローラは対向コントローラ起動待ち処理(
図5)において対向コントローラの最後の状態を稼働状態メモリ16または26からOS起動開始として読み取り、
図6の表からOS起動開始の時はタイムアウト時間を5秒に設定する。対向コントローラ起動待ち処理は対向コントローラを5秒待ってタイムアウトし、1コントローラとして起動処理を先に進める。一方、参考例の処理であればバックアップ時間+Reboot時間+リストア時間+BIOS動作時間+OS起動時間+FW起動時間の合計で140秒程度かかるため、135秒程度の起動時間短縮の効果があることになる。
【0069】
図4に戻り、対向コントローラの起動待ち処理が完了すると、コントローラ10および20は、キャッシュメモリ13および23を対向コントローラと同期するキャッシュメモリ二重化処理を行い(対向コントローラが動いていないケースは二重化しない)(ステップS34)、最後にFW後処理(ドライブの認識・ホストポート初期化等)を行い(ステップS35)、ストレージシステムの起動処理を完了する(END(装置Ready))。
【0070】
(効果の説明)
本実施形態によれば、ストレージシステム1の起動において、1つのコントローラ10または20が故障した際に、もう一つのコントローラ20または10が待つ時間を減らすことにより起動時間短縮の効果がある。したがって、本実施形態によれば、障害が発生したコントローラを切り離すのに要する時間を短縮することができる。
特に、本実施形態によれば、稼働状態メモリ16が記憶する状態情報、および、稼働状態メモリ26が記憶する状態情報に基づいて冗長化動作を実行するか否かを決定できる点で、上記のように、時間短縮の効果が期待される。
【0071】
また、他の効果として、本実施形態では、ストレージシステム1の起動において、バックアップするデータがない場合にもコントローラ10および20が正常に起動するまでの時間を短縮するケースがあり、起動時間短縮の効果がある。停電時の処理(
図3)では、バックアップするデータがない場合に稼働状態メモリ16および26の中の別の領域に「バックアップ無し」の記録を残している(ステップS19)。停電時のSSDへのバックアップ時にバックアップが必要なデータが存在しないケースで稼働状態メモリ16および26に「バックアップ無し」の記録が残っている状態でストレージシステム1が停止しているときに、ストレージシステム1を起動すると、コントローラ10および20は対向コントローラ起動待ち処理(
図5)において対向コントローラの稼働状態メモリ16および26から「バックアップ無し」の状態を読み取り、対向コントローラ起動待ち処理は対向コントローラを待つことなく1コントローラとして起動処理を先に進める。参考例の処理であればバックアップ時間+Reboot時間+リストア時間+BIOS動作時間+OS起動時間+FW起動時間の合計でタイムアウトを140秒程度としながらコントローラ間通信可能になるまで待つことになるため、最小0秒から最大140秒程度の起動時間短縮効果があることになる。すなわち、本実施形態では、ストレージシステム1の起動において、バックアップしたデータがないことがわかるため、コントローラを待つ必要がないケースがあり、待ち時間の削減により起動時間短縮の効果がある。
【0072】
なお、本実施形態において、ストレージシステム1は、本発明に係る制御システムの一構成例である。また、コントローラ(ストレージコントローラ)10および20は、本発明に係る制御装置、第1制御装置、または、第2制御装置の一構成例である。また、稼働状態メモリ16および26は、本発明に係る第1状態メモリおよび第2状態メモリの一構成例である。
【0073】
また、以上では、2つのストレージコントローラを備えるストレージシステムを本発明に係る制御システムの実施形態の例として説明したが、ストレージシステムに限定されず、同一の動作を実行する2つの制御装置を備える制御システム一般に適用することができる。
【0074】
(本実施形態の構成)
図10は、本発明の実施形態に係る制御システムの構成例を示すブロック図である。
図11は、本発明の実施形態に係る制御方法の構成例を示すフローチャートである。
【0075】
図10に示すように本実施形態に係る制御システム100は、少なくとも、第1制御装置101と、第2制御装置102を備えていればよい。第1制御装置101および第2制御装置102は、所定の通信を行いながら同一の動作(以下、冗長化動作という)を実行する。また、第1制御装置101は、第1制御装置101における起動から冗長化動作を開始するまでに実行する動作(以下、起動時動作という)に係る2以上の異なる状態を表す第1状態情報を記憶し、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である第1状態メモリ111を有する。また、第2制御装置102は、第2制御装置102における起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶し、かつ、第1制御装置から読み取り可能な不揮発性記憶装置である第2状態メモリ112を有する。
【0076】
また、
図11に示すように本実施形態の制御方法は、ステップS101およびステップS102を含む。ステップS101では、第1制御装置101が、第2状態メモリ112に記憶されている第2状態情報の所定の変化が所定の時間を超えた場合に、冗長化動作を実行しないことを決定する。ステップS102では、第2制御装置102が、第1状態メモリ111に記憶されている第1状態情報の所定の変化が所定の時間を超えた場合に、冗長化動作を実行しないことを決定する。
【0077】
(コンピュータの構成)
図2に示すように、制御部17(および制御部27)を構成するコンピュータは、CPU171、主記憶装置172、補助記憶装置173、通信装置174および入出力装置175を備える。そして、上述した制御部17の動作は、プログラムの形式で補助記憶装置173に記憶されている。CPU171は、プログラムを補助記憶装置173から読み出して主記憶装置172に展開し、当該プログラムに従って各処理を実行する。また、CPU171は、プログラムに従って、上述した各処理に対応する記憶領域を主記憶装置172に確保する。
【0078】
プログラムは、制御部17を構成するコンピュータに発揮させる機能の一部を実現するためのものであってもよい。例えば、プログラムは、補助記憶装置173に既に記憶されている他のプログラムとの組み合わせ、または他の装置に実装された他のプログラムとの組み合わせによって機能を発揮させるものであってもよい。なお、他の実施形態においては、コンピュータは、上記構成に加えて、または上記構成に代えてPLD(Programmable Logic Device)などのカスタムLSI(Large Scale Integrated Circuit)を備えてもよい。PLDの例としては、PAL(Programmable Array Logic)、GAL(Generic Array Logic)、CPLD(Complex Programmable Logic Device)、FPGA(Field Programmable Gate Array)等が挙げられる。この場合、CPU171によって実現される機能の一部または全部が当該集積回路によって実現されてよい。
【0079】
補助記憶装置173の例としては、HDD(Hard Disk Drive)、SSD、磁気ディスク、光磁気ディスク、CD-ROM(Compact Disc Read Only Memory)、DVD-ROM(Digital Versatile Disc Read Only Memory)、半導体メモリ等が挙げられる。補助記憶装置173は、コンピュータのバスに直接接続された内部メディアであってもよいし、入出力装置175または通信回線を介してコンピュータに接続される外部メディアであってもよい。また、このプログラムが通信回線によってコンピュータ700に配信される場合、配信を受けたコンピュータが当該プログラムを主記憶装置172に展開し、上記処理を実行してもよい。少なくとも1つの実施形態において、補助記憶装置173は、一時的でない有形の記憶媒体である。
【0080】
以上、この発明の実施形態について図面を参照して説明してきたが、具体的な構成は上記実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。例えば、稼働状態メモリ16および26に記録したデータの転送率(書き込み率、リストア進捗率)に応じてタイムアウト時間を設定してもよい。また、上記実施形態でコントローラ10および20が実行するプログラムの一部または全部は、コンピュータ読取可能な記録媒体や通信回線を介して頒布することができる。
【0081】
上記実施形態の一部または全部は、以下の付記のように記載されうるが、以下には限られない。
【0082】
(付記1)
同一の動作である冗長化動作を実行する第1制御装置および第2制御装置を備え、
前記第1制御装置が、前記第1制御装置における起動から前記冗長化動作を開始するまでに実行する動作である起動時動作に係る2以上の異なる状態を表す第1状態情報を記憶し、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である第1状態メモリを有し、
前記第2制御装置が、前記第2制御装置における前記起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶し、かつ、前記第1制御装置から読み取り可能な不揮発性記憶装置である第2状態メモリを有する
制御システム。
【0083】
(付記2)
前記第1制御装置が、前記第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定し、
前記第2制御装置が、前記第1状態メモリに記憶されている前記第1状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定する
制御システム。
【0084】
(付記3)
前記冗長化動作が、電源停止時に不揮発性記憶装置へデータがバックアップされる揮発性記憶装置であるキャッシュメモリへのデータの記憶動作であり、
前記第1制御装置が、電源停止時に前記バックアップを行わなかった場合にはその旨を示す情報であるバックアップ無し情報を前記第1状態メモリに記憶し、
前記第2制御装置が、電源停止時に前記バックアップを行わなかった場合には前記バックアップ無し情報を前記第2状態メモリに記憶し、
前記第1制御装置が、さらに、前記第2状態メモリに前記バックアップ無し情報が記憶されている場合に、前記冗長化動作を実行しないことを決定し、
前記第2制御装置が、さらに、前記第1状態メモリに前記バックアップ無し情報が記憶されている場合に、前記冗長化動作を実行しないことを決定する
付記2に記載の制御システム。
【0085】
(付記4)
前記冗長化動作は、前記第1制御装置と前記第2制御装置との間の所定の通信動作をともなう動作である
付記2または付記3に記載の制御システム。
【0086】
(付記5)
前記第1状態情報および前記第2状態情報が、BIOS動作開始、OS起動開始、および、前記通信を可能とするファームウェアの起動開始を表す情報を含む
付記4に記載の制御システム。
【0087】
(付記6)
同一の動作である冗長化動作を、第2制御装置と並行して実行し、
前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、自らの制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定する
制御装置。
【0088】
(付記7)
同一の動作である冗長化動作を実行する第1制御装置および第2制御装置のうち、前記第1制御装置が、前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作である起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記第1制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の前記第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定するステップと、
前記第2制御装置が、前記第1制御装置における前記起動時動作に係る2以上の異なる状態を表す第1状態情報を記憶する不揮発性記憶装置、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である、前記第1制御装置の前記第1状態メモリに記憶されている前記第1状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定するステップと、
を含む制御方法。
【0089】
(付記8)
同一の動作である冗長化動作を、第2制御装置と並行して実行する制御装置に、
前記第2制御装置における起動から前記冗長化動作を開始するまでに実行する動作に係る2以上の異なる状態を表す第2状態情報を記憶する不揮発性記憶装置、かつ、前記制御装置から読み取り可能な不揮発性記憶装置である、前記第2制御装置の前記第2状態メモリに記憶されている前記第2状態情報の所定の変化が所定の時間を超えた場合に、前記冗長化動作を実行しないことを決定すること、
を実行させるためのプログラム。
【符号の説明】
【0090】
1…ストレージシステム、10、20…ストレージコントローラ、12、22…バックアップ用SSD、13、23…キャッシュメモリ、16、26…稼働状態メモリ、17、27…制御部、30…ドライブ群
【要約】
【課題】障害が発生した装置を切り離すのに要する時間を短縮する。
【解決手段】制御システムが、同一の動作である冗長化動作を実行する第1制御装置および第2制御装置を備え、前記第1制御装置が、前記第1制御装置における起動から前記冗長化動作を開始するまでに実行する動作である起動時動作に係る2以上の異なる状態を表す第1状態情報を記憶し、かつ、前記第2制御装置から読み取り可能な不揮発性記憶装置である第1状態メモリを有し、前記第2制御装置が、前記第2制御装置における前記起動時動作に係る2以上の異なる状態を表す第2状態情報を記憶し、かつ、前記第1制御装置から読み取り可能な不揮発性記憶装置である第2状態メモリを有する。
【選択図】
図1