JP2019174875A - 記憶システム及び記憶制御方法 - Google Patents

記憶システム及び記憶制御方法 Download PDF

Info

Publication number
JP2019174875A
JP2019174875A JP2018059091A JP2018059091A JP2019174875A JP 2019174875 A JP2019174875 A JP 2019174875A JP 2018059091 A JP2018059091 A JP 2018059091A JP 2018059091 A JP2018059091 A JP 2018059091A JP 2019174875 A JP2019174875 A JP 2019174875A
Authority
JP
Japan
Prior art keywords
control program
node
program
active
storage
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2018059091A
Other languages
English (en)
Inventor
彰義 土谷
Akiyoshi Tsuchiya
彰義 土谷
智大 川口
Tomohiro Kawaguchi
智大 川口
司 柴山
Tsukasa Shibayama
司 柴山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2018059091A priority Critical patent/JP2019174875A/ja
Priority to US16/117,719 priority patent/US10691564B2/en
Publication of JP2019174875A publication Critical patent/JP2019174875A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2082Data synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2089Redundant storage control functionality
    • G06F11/2092Techniques of failing over between control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1464Management of the backup or restore process for networked environments
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2071Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring using a plurality of controllers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0617Improving the reliability of storage systems in relation to availability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0634Configuration or reconfiguration of storage systems by changing the state or mode of one or more devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • G06F9/4862Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0709Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a distributed system consisting of a plurality of standalone computer nodes, e.g. clusters, client-server systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage

Abstract

【課題】従来システムをスケールアウト型の記憶システムに単純に適用すると、性能を十分に発揮できないことができないことがある。【解決手段】複数台のストレージノードにおいて、同じプログラムクラスタのアクティブの制御プログラムとパッシブの制御プログラムとは、異なるストレージノードに配置されるとともに、いずれのストレージノードも、複数のアクティブまたはパッシブの制御プログラムが配置されることが可能である。複数のパッシブの制御プログラムのうちのいずれかのパッシブの制御プログラムがアクティブに変更になった場合に、当該制御プログラムと同じストレージノードで稼働している他のパッシブの制御プログラムの稼働状況の変更が生じる。【選択図】図1

Description

本発明は、概して、複数台のストレージノードで構成された記憶システムの記憶制御に関する。
複数台の計算ノードで構成されたスケールアウト型の分散計算システムが知られている。特許文献1には、現用系の仮想マシンと予備系の仮想マシンをそれぞれ別個の物理サーバに上に集約して配置することが開示されている。
特開2014−075027号公報
記憶システムについても、スケールアウト型の記憶システム、すなわち、複数台のストレージノードで構成された記憶システムが知られている。この種の記憶システムでは、関連付けられた論理記憶領域に対してI/O(Input/Output)を行うためのプログラムである制御プログラムが実行される。この種の記憶システムは、高可用且つ高性能であることが望ましい。
特許文献1に開示のシステム(以下、従来システム)は、高可用且つ高性能であると期待される。具体的には、現用系の仮想マシンと予備系の仮想マシンがあることから、現用系の仮想マシンから予備系の仮想マシンへのフェイルオーバーが可能であるため、高可用が期待される。また、現用系の仮想マシンと予備系の仮想マシンがそれぞれ別個の物理サーバに配置されていることから、現用系の仮想マシンが使用可能なリソース量が予備系の仮想マシンに使用されることがないため、高性能も期待される。
そこで、従来システムでのプログラム配置を、スケールアウト型の記憶システムでのプログラム配置に適用することが検討される。
しかし、従来システムでは、複数の仮想マシンに対してフェイルオーバーが起きることを考慮していない。スケールアウト型の記憶システムを構成する仮想マシンの数は多数であり、複数の仮想マシンにフェイルオーバーが発生し、複数の予備系の仮想マシンがアクティブに変更される場合がありうる。
このような理由により(又は、それに代えて又は加えて他の理由により)、従来システムをスケールアウト型の記憶システムに単純に適用すると、性能を十分に発揮できないことができないことがある。
記憶システムが、それぞれが1個以上のプロセッサを有する複数のストレージノードと、データを格納する1個以上の記憶デバイスと、を備える。複数台のストレージノードは、1個以上のプロセッサのうちの少なくとも1個のプロセッサ上でそれぞれ稼働する複数個の制御プログラムで構成された2個以上のプログラムクラスタを有する。いずれの制御プログラムも、当該制御プログラムに関連付けられた記憶領域に対してI/Oを行うためのプログラムである。2個以上のプログラムクラスタの各々は、アクティブの制御プログラムと、当該アクティブの制御プログラムに代わってアクティブとなるパッシブの制御プログラムとを有する。制御プログラムのプロセッサの計算リソース使用は、アクティブのときがパッシブときよりも大きい。同じプログラムクラスタのアクティブの制御プログラムとパッシブの制御プログラムとは、異なるストレージノードに配置されるとともに、複数台のストレージノードのいずれも、複数のアクティブまたはパッシブの制御プログラムが配置されることが可能である。複数のパッシブの制御プログラムのうちのいずれかのパッシブの制御プログラムがアクティブに変更になった場合に、当該制御プログラムと同じストレージノードで稼働している他のパッシブの制御プログラムの稼働状況の変更が生じる。
本発明によれば、スケールアウト型の記憶システムにおいて、アクティブの制御プログラムとパッシブの制御プログラムを適切に配置し、リソースを有効活用することができる。
実施例1の概要を模式的に示す。 記憶システムを含むシステム全体の構成を示す。 ノードの物理的な構成を示す。 アクティブ制御プログラムが実行されるノード内のメモリにおける代表的なプログラム及びテーブルを示す。 パッシブ制御プログラムが実行されるノード内のメモリにおける代表的なプログラム及びテーブルを示す。 制御プログラム配置の一例を示す。 論理チャンクと物理チャンクの関係の一例を示す。 制御プログラム管理テーブルの構成を示す。 ノード管理テーブルの構成を示す。 リソース割当管理テーブルの構成を示す。 構成テーブルの一部である物理チャンク管理テーブルの構成を示す。 構成テーブルの残りである論理チャンク管理テーブルの構成を示す。 実施例1に係るクラスタ制御部が行う処理の流れを示す。 実施例2の概要を模式的に示す。 実施例2に係るクラスタ制御部が行う処理の流れを示す。 実施例2に係る再配置制御処理の流れを示す。 制御プログラム移動処理の流れを示す。 実施例3に係る記憶システムの構成を示す。 実施例3に係る制御プログラム配置の第1の例を示す。 実施例3に係る制御プログラム配置の第2の例を示す。 実施例3に係るノード管理テーブルの構成を示す。 実施例3に係る再配置制御処理の流れを示す。 実施例4の概要を模式的に示す。 実施例4に係るクラスタ制御部が行う処理の流れを示す。 ノード間通信を必要とし冗長度が低下した状態の一例を模式的に示す。 ノード間通信を必要とせず冗長度が回復した状態の一例を模式的に示す。
以下の説明では、「インターフェース部」は、1個以上のインターフェースでよい。当該1個以上のインターフェースは、1個以上の同種の通信インターフェースデバイス(例えば1個以上のNIC(Network Interface Card))であってもよいし2個以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以下の説明では、「メモリ部」は、1個以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも1つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
また、以下の説明では、「PDEV部」は、1個以上のPDEVであり、典型的には補助記憶デバイスでよい。「PDEV」は、物理的な記憶デバイス(Physical storage DEVice)を意味し、典型的には、不揮発性の記憶デバイス、例えばHDD(Hard Disk Drive)又はSSD(Solid State Drive)である。つまり、PDEV部は、記憶デバイス部の一例である。
また、以下の説明では、「記憶部」は、メモリ部及びPDEV部のうちの少なくとも1つ(典型的には少なくともメモリ部)である。
また、以下の説明では、「プロセッサ部」は、1個以上のプロセッサである。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでもよい。少なくとも1つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも1つのプロセッサは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサでもよい。
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、この種の情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2個以上のテーブルに分割されてもよいし、2個以上のテーブルの全部又は一部が1つのテーブルであってもよい。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び/又はインターフェース部等を用いながら行うため、処理の主語が、プロセッサ部(或いは、そのプロセッサ部を有するコントローラのようなデバイス)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、2個以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2個以上のプログラムとして実現されてもよい。
また、以下の説明では、「kkk部」(インターフェース部、記憶部及びプロセッサ部を除く)の表現にて機能を説明することがあるが、機能は、1個以上のコンピュータプログラムがプロセッサ部によって実行されることで実現されてもよいし、1個以上のハードウェア回路によって実現されてもよい。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしてもよい。
また、以下の説明では、「記憶システム」は、複数台のストレージノードを含んだシステムである。当該記憶システムは、典型的には、スケールアウト型の記憶システム、或いは、分散記憶システムと呼ばれてよい。「ストレージノード」は、記憶システムのメンバとしての装置であり、汎用計算機でもよいし、専用計算機(例えば、複数個のPDEVを有するいわゆるディスクアレイ装置のようなストレージ装置)でもよい。記憶システムは、冗長構成グループを有してよい。冗長構成は、Erasure Coding、RAIN(Redundant Array of Independent Nodes)及びノード間ミラーリングのように複数台のストレージノードでの構成でもよいし、PDEV部の少なくとも一部としての1以上のRAID(Redundant Array of Independent (or Inexpensive) Disks)グループのように単一の計算機(例えばストレージノード)での構成でもよい。
また、以下の説明では、「データセット」とは、アプリケーションプログラムのようなプログラムから見た1つの論理的な電子データの塊であり、例えば、レコード、ファイル、キーバリューペア及びタプルのうちのいずれでもよい。また、ユーザデータのみならず、冗長コードを含んでいる場合もある。
また、「プログラムクラスタ」は、1個以上のアクティブの制御プログラムと、1個以上のパッシブの制御プログラムを含む。各プログラムクラスタにおいて、アクティブの制御プログラムとパッシブの制御プログラムは、1:1、1:多、多:1及び多:多のいずれでもよい。以下、説明を簡潔にするために、アクティブの制御プログラムとパッシブの制御プログラムは1:1であるとし、それに伴い、プログラムクラスタを「プログラムペア」と呼ぶことにする。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別して説明する場合に、参照符号を使用することがある。例えば、ストレージノードを特に区別しないで説明する場合には、「ストレージノード101」と記載し、個々のノードを区別して説明する場合には、「ストレージノード101a」、「ストレージノード101b」のように記載することがある。
以下、幾つかの実施例を説明する。
図1は、実施例1の概要を模式的に示す。
記憶システム100が、それぞれが1個以上のPDEV12(記憶デバイスの一例)を有する複数台のストレージノード(以下、ノード)101を備える。図1には、ノード101a〜101dが例示されている。以下の説明では、ノードα(αはa、b、…といった小文字英語アルファベット)内の要素の参照符号がαを含むことがある。要素の参照符号内のαを見ることで、当該要素がいずれのノードの要素であるかを区別することができる。
複数台のノード101は、複数個の制御プログラム20で構成された2個以上のプログラムペア(プログラムクラスタの一例)を有する。いずれの制御プログラム20も、当該制御プログラム20に関連付けられた論理チャンク33(論理記憶領域の一例)に対してI/O(Input/Output)を行うためのプログラムである。以下、制御プログラム20に関し、状態がアクティブである制御プログラム20を、「アクティブ制御プログラム20A」と言い、状態がパッシブである制御プログラム20を、「パッシブ制御プログラム20P」と言うことがある。
各プログラムペアは、アクティブ制御プログラム20Aとパッシブ制御プログラム20P(当該アクティブ制御プログラム20Aが停止した場合に当該アクティブ制御プログラム20Aに代わってアクティブとなる制御プログラム20P)とのペアである。以下、プログラムペアβ(βは自然数)に属するアクティブ制御プログラム20Aを、「アクティブ制御プログラム20A−β」と言い、プログラムペアnに属するパッシブ制御プログラム20Pを、「パッシブ制御プログラム20P−β」と言う。
各ノード101は、当該ノード101における1個以上の論理チャンク33を提供する冗長化部22を有する。各PDEV12は、複数個の物理チャンク43(物理記憶領域の一例)を有する。各ノード101において、各論理チャンク33には、異なる2台以上のノード101における2個以上の物理チャンク43が関連付けられている。同一のプログラムペアについて、アクティブ制御プログラム20Aに関連付けられる論理チャンク33と、パッシブ制御プログラム20Pに関連付けられる論理チャンク33は、それぞれ、同一の2個以上の物理チャンク43に関連付けられている。図1では、プログラムペアβにおける制御プログラム20に関連付けられた論理チャンクの参照符号と、当該論理チャンクに関連付けられている物理チャンクの参照符号は、それぞれ、βを含む。これにより、いずれの論理チャンク33がいずれのプログラムペアにおける制御プログラム20に関連付けられていて、いずれの物理チャンク43がいずれの論理チャンク33に関連付けられているかがわかる。
複数個の制御プログラム20の配置は、分離配置である。分離配置は、下記を満たす配置である。
・2個以上のプログラムペアにおける全てのアクティブ制御プログラム20Aが、一部のストレージノード101a〜101cに配置。具体的には、例えば、負荷分散のために、全てのアクティブ制御プログラム20Aは、ストレージノード101a〜101cに均等に分散している。
・2個以上のプログラムペアにおける全てのパッシブ制御プログラム20Pが、残りのストレージノード101d(残りの全部又は一部のストレージノードの一例)に配置(集約)。
図1によれば、構成は例えば次の通りである。全てのプログラムペア1〜3における全てのパッシブ制御プログラム20P−1〜20P−3が、ストレージノード101dに集約される。パッシブ制御プログラム20P−1とプログラムペア1を構成するアクティブ制御プログラム20A−1は、ノード101aに配置される。冗長化部22aにより提供される論理チャンク33a−1が、アクティブ制御プログラム20A−1に関連付けられる。アクティブ制御プログラム20A−1とプログラムペア1を構成するパッシブ制御プログラム20P−1に、冗長化部22dにより提供される論理チャンク33d−1が関連付けられている。論理チャンク33a−1及び33d−1のいずれにも、物理チャンク43a−1及び43b−1が関連付けられている。このため、論理チャンク33a−1及び33d−1のどちらがライト対象のデータセットのライト先となっても、当該データセットが二重化される、すなわち、当該データセットが物理チャンク43a−1及び43b−1の両方に書き込まれることになる。
少なくとも1つのノード101、例えば、各ノード101が、プログラムペアを管理するクラスタ制御部15を有する。本実施例では、記憶システム100は、マスタースレーブ構成が採用されていて、図1の例では、ノード101bが、マスターであり、残りのノード101a及び101c〜101dが、スレーブであるとする。マスターノード101bにおけるクラスタ制御部15bが他のクラスタ制御部15(図示せず)を代表して動作するものとする。
また、いずれのアクティブ制御プログラム20Aも、当該アクティブ制御プログラム20Aの実行環境であるノード101のリソース量を最大限使用可能であるとする。一方、ノード101dでは、いずれのパッシブ制御プログラム20Pにも、フェイルオーバー処理にかかる時間短縮のために、パッシブ状態(スタンバイ状態)維持に必要な最低限のリソース量が割り当てられているとする。
このような構成において、ノード101aで障害が生じたとする(S101)。ノード101aにはアクティブ制御プログラム20A−1が存在するため、アクティブ制御プログラム20A−1からパッシブ制御プログラム20P−1へのフェイルオーバー処理が行われる(S102)。当該フェイルオーバー処理では、クラスタ制御部15bは、フェイルオーバー先となるパッシブ制御プログラム20P−1以外の少なくとも一部のパッシブ制御プログラム20P、例えば全てのパッシブ制御プログラム20P−2及び20P−2を停止する(S102−1)。そして、クラスタ制御部15bは、パッシブ制御プログラム20P−2及び20P−3の停止により解放された計算リソースを特定し、特定した計算リソースの少なくとも一部をパッシブ制御プログラム20P−1に割り当てることをノード101dに指示する。その指示に応答して、パッシブ制御プログラム20P−2及び20P−3から解放された計算リソースがパッシブ制御プログラム20P−1に割り当てられ、結果として、パッシブ制御プログラム20P−1が使用可能なリソース量が増える(S102−2)。
本実施例によれば、各ノード101において、提供される各論理チャンク33に、異なる2台以上のノード101における2個以上の物理チャンク43が関連付けられていて、同一のプログラムペアについて、アクティブ制御プログラム20Aに関連付けられる論理チャンク33と、パッシブ制御プログラム20Pに関連付けられる論理チャンク33は、それぞれ、同一の2個以上の物理チャンク43に関連付けられている。このため、スケールアウト型の記憶システム100において、アクティブ制御プログラム20Aとパッシブ制御プログラム20Pをそれぞれ別個のノード101に配置することができる。例えば、フェイルオーバー元のノード101aとフェイルオーバー先のノード101dのリソース量が同じであって、ノード101aにおいてアクティブ制御プログラム20A−1が100%のリソース量を使用していたとしても、ノード101dにはアクティブ制御プログラム20Aが存在しないため、代わってアクティブとなる制御プログラム20P−1に、アクティブ制御プログラム20A−1が使用していたリソース量と同等のリソース量を確保することができる。つまり、ノード101間のローカルのPDEV12にデータが分散するスケールアウト型の記憶システム100について高可用且つ高性能を実現することができる。
なお、パッシブ制御プログラム20P−2及び20P−3の停止は、パッシブ制御プログラム20P−2及び20P−3の稼働状況の変更の一例である。パッシブ制御プログラム20P−2及び20P−3の稼働状況の変更の他の例として、例えば、実施例2で説明するように、パッシブ制御プログラム20P−2及び20P−3の他ノード101への移動がある。
以下、本実施例を詳細に説明する。
図2は、記憶システム100を含むシステム全体の構成を示す。
ネットワーク203に、ホストシステムの一例である1台以上のホスト計算機201と、記憶システム100を構成する複数台のノード101と、管理システム202とが接続されている。ネットワーク203は、ファイバチャネル(Fibre Channel)、イーサネット(登録商標)、InfiniBand又はLAN(Local Area Network)などから構成される1以上のネットワークでよい。
ホスト計算機201は、記憶システム100に対してリード要求又はライト要求(これらをまとめてI/O要求と呼ぶことができる)を送信する計算機(例えば汎用計算機)である。少なくとも1つの物理計算機で実行される仮想マシン(VM)がホスト計算機201として機能してもよい。
管理システム202は、システム管理者が記憶システム100(又は、記憶システム100とホストシステムとを含んだ計算機システム)を管理する計算機システムである。管理システム202は、例えば、記憶システム100の性能を監視したり、種々の指示を送信したりできる。少なくとも1つの物理計算機で実行される仮想マシンが管理システム202として機能してもよい。
記憶システム100は、それぞれ1個以上のPDEV12を有する複数台のノード101で構成されるが、当該記憶システム100は、各汎用計算機(ノード101)がストレージ機能を有するソフトウェアを実行することにより構築されたSDS180の基である。SDS180は、個々のノード101に構築されてもよいが、本実施例では、複数台のノード101に跨っている。
また、記憶システム100は、SDS180に加えて、ソフトウェアディファインドのホストシステムの基になってもよいし、或いは、ホスト計算機201としての1台以上の仮想マシンを実行してもよい。つまり、同一のシステム基盤上に、仮想的に、記憶システムとホストシステムとが存在してもよい。
図3は、ノード101の物理的な構成を示す。
ノード101は、汎用計算機でよい。ノード101は、NIC(Network Interface Card)304、PDEV12、メモリ302及びそれらに接続されたCPU301を有する。NIC304、PDEV12、メモリ302及びCPU301のいずれも、複数存在してよい。NIC304は、インターフェース部の一例である。PDEV12及びメモリ302は、記憶部の一例である。CPU301は、プロセッサ部の一例である。
NIC304は、ネットワーク203に接続され、ノード101の外部の装置と通信するためのインターフェースデバイスである。NIC304は、ファイバチャネル(Fibre Channel)カードやイーサネット(登録商標)カード、InfiniBandカード、無線LANカード、PCIeホストアダプタのいずれでもよい。
PDEV12は、上述したように、HDD及びSSDのいずれでもよく、また、SCM(Storage Class Memory)でもよい。PDEV12は、NVMe(Non-Volatile Memory Express)、SAS(Serial Attached SCSI(Small Computer System Interface))及びSATA(Serial ATA(Advanced Technology Attachment))のいずれのインターフェースで接続されてもよい。また、複数個のPDEV12として、異なる種類のPDEVが混在してもよい。
メモリ302は、SRAM(Static RAM(Random Access Memory))やDRAM(Dynamic RAM)などの揮発性の半導体メモリから構成されてよい。メモリ302は、各種プログラムや必要なデータを一時的に保持するために利用される。
CPU301は、メモリ302内のプログラムを実行することでノード101全体の動作制御を司る。
ノード101において、NIC304、メモリ302及びCPU301が、記憶デバイス以外の計算リソースの一例である。記憶デバイス以外の計算リソースとして、NIC304、メモリ302及びCPU301があるが、リソース量は、例えば、通信帯域、メモリ量及びCPU負荷(例えば、使用率、使用CPUコア数(又は空きCPUコア数))である。
図4は、アクティブ制御プログラム20Aが実行されるノード101内のメモリ302における代表的なプログラム及びテーブルを示す。
メモリ302は、アクティブ制御プログラム20A、冗長化プログラム420、クラスタ制御プログラム430、構成テーブル401A、ノード管理テーブル402、制御プログラム管理テーブル403、及びリソース割当管理テーブル404を格納する。
アクティブ制御プログラム20Aが、SDS180のコントローラとしての機能を実現するためのプログラムである。冗長化プログラム420がCPU301により実行されることで、冗長化部22が実現する。クラスタ制御プログラム430がCPU301により実行されることで、クラスタ制御部15が実現する。プログラム20、420及び430が、SDS180のコンポーネントとしての機能を実現するためのプログラムでよい。クラスタ制御部15が、複数のノード101での制御プログラム20への計算リソースの割り当てを管理する。クラスタ制御部15が、パッシブ制御プログラム20Pを、停止させるか移動させるか、または/及び、移動させる場合の移動先のノード101を、決定するようになっている。
構成テーブル401は、制御プログラム20毎に存在する。アクティブ制御プログラム20Aに対応した構成テーブル401を「構成テーブル401A」と言う。本実施形態では、一ノード101で実行されるアクティブ制御プログラム20Aは1つであり、故に、当該ノード101では、1つのアクティブ制御プログラム20Aに対応する1つの構成テーブル401Aが存在する。テーブル401A〜404の詳細は後述する。
図5は、パッシブ制御プログラム20Pが実行されるノード101内のメモリ302における代表的なプログラム及びテーブルを示す。
メモリ302は、集約されたパッシブ制御プログラム20Pを格納し、故に、パッシブ制御プログラム20P毎に構成テーブル401Pを格納する。構成テーブル401Pは、パッシブ制御プログラム20Pに対応する構成テーブル401である。メモリ302は、その他、図4と同様のプログラム420及び430と、図4と同様のテーブル402〜404を格納する。
図6は、制御プログラム配置の一例を示す。
3つのプログラムペア60−1〜60−3が存在する。プログラムペア60−1は、アクティブ制御プログラム20A−1とパッシブ制御プログラム20P−1のペアである。プログラムペア60−2は、アクティブ制御プログラム20A−2とパッシブ制御プログラム20P−2のペアである。プログラムペア60−3は、アクティブ制御プログラム20A−3とパッシブ制御プログラム20P−3のペアである。
アクティブ制御プログラム20A−1〜20A−3がそれぞれノード101a〜101cに配置されている。言い換えれば、アクティブ制御プログラム20Aとノード101は1:1であり、1つのノード101に2個以上のアクティブ制御プログラム20Aは存在しない。これにより、負荷の均等な分散が期待できる。
一方、パッシブ制御プログラム20P−1〜20P−3は、1つのノード101dに集約されている。ノード101a〜101cのいずれかで障害が発生した場合、当該ノード101におけるアクティブ制御プログラム20Aとプログラムペア60を構成するパッシブ制御プログラム20Pがフェイルオーバー先となり処理を引き継ぐ。このようなフェイルオーバーの実現のため、同一のプログラムペア60を構成する制御プログラム20は、同一内容の構成テーブル401を保持することができる。
図7は、論理チャンクと物理チャンクの関係の一例を示す。
各ノード101(例えば、ノード101a)において、冗長化部22(例えば、冗長化部22a)が、1個以上の論理チャンク33(例えば、論理チャンクA及びD)を提供する。また、各ノード101(例えば、ノード101a)において、PDEV12(例えば、PDEV12a)が、複数個の物理チャンク43(例えば、複数個の物理チャンク43a)を有する。各論理チャンク33(例えば、論理チャンクA)は、当該論理チャンク33に関連付けられた制御プログラム20(例えば、ノード101aではアクティブ制御プログラム20A−1、ノード101ではパッシブ制御プログラム20P−1)に提供される。各ノード101(例えば、ノード101a)において、冗長化部22(例えば、冗長化部22a)は、1個以上の論理チャンク33の各々について(例えば、論理チャンクA)、2台以上のノード101(典型的には、当該ノードを含む2台以上のノード101)における2個以上の物理チャンク43(例えば、ノード101a及び101bにおける2つの物理チャンクA)を関連付ける。論理チャンク33と制御プログラム20の関係、及び、論理チャンク33と物理チャンク43の関係は、構成テーブル401に記述されている。図7の例によれば、1つの論理チャンク33に2つの物理チャンク43が関連付けられているため、1つの論理チャンク33に格納されるデータセットは二重化される。以下、便宜上、各論理チャンク33について、関連付けられている2つの物理チャンク43のうち、1つの物理チャンク43を、「マスター物理チャンク43」と言い、もう1つの物理チャンク43を、「ミラー物理チャンク43」と言うことがある。本実施例では、二重化が採用されるが、より高い冗長化が採用されてもよいし、Erasure Codingが採用されてもよい。
複数台のノード101におけるp個の論理チャンク33の各々について(pは自然数)、p個のマスター物理チャンク43もp個のミラー物理チャンク43も、複数台のノード101に均等に分散している。
例えば、p個のマスター物理チャンク43については、次の通りである。すなわち、アクティブ制御プログラム20A−1〜20A−3が均等にノード101a〜101cに分散している。結果として、p個のマスター物理チャンク43はノード101a〜101cに均等に分散している。各論理チャンク33について、マスター物理チャンク43(例えば、マスター物理チャンクA)は、当該論理チャンク33(例えば、論理チャンクA)を有するノード101(例えばノード101a)に存在する。
一方、例えば、p個のミラー物理チャンク43については、次の通りである。すなわち、全てのパッシブ制御プログラム20P−1〜20P−3がノード101dに集約されているが、p個のミラー物理チャンク43は、ノード101a〜101dに均等に分散している。具体的には、例えば、ノード101dでは、論理チャンクA〜Fが提供されるが、論理チャンクA〜Fに対応するミラー物理チャンクA〜Fは、ノード101a〜101dに均等に分散している。これにより、ノード101a〜ノード101cに比してノード101dの消費記憶容量が極端に大きくなることを回避できる。なお、p個のミラー物理チャンク43がノード101a〜101cに均等に分散されていることでノード101dの少なくとも1つのPDEV12が未使用とされておき、ノード101a〜101cのいずれかで障害が生じることによりデータセットの冗長度が落ちたときに、ノード101dにおける未使用のPDEV12が、冗長度の回復用のPDEV12(つまり、冗長度が落ちたデータセットを格納するマスター物理チャンク43からのコピー先とされる物理チャンクを持つことになるPDEV12)とされてもよい。
図8は、制御プログラム管理テーブル403の構成を示す。
制御プログラム管理テーブル403は、制御プログラム20に関する情報を保持する。制御プログラム管理テーブル403は、例えば、全ノード101におけるクラスタ制御部15が共有する(例えば、全ノード101において制御プログラム管理テーブル403が同期している)。制御プログラム管理テーブル403は、例えば、制御プログラム管理テーブル403は、制御プログラム20毎にエントリを有する。各エントリは、制御プログラム#801、状態802、ペア#803、稼働ノード#804、使用容量805、CPU負荷806、使用メモリ量807及び使用通信帯域808といった情報を格納する。以下、1つの制御プログラム20を例に取る(図8の説明において「対象制御プログラム20」)。
制御プログラム#801は、対象制御プログラム20の番号を示す。状態802は、対象制御プログラム20の状態(例えば“Active”又は“Passive”又は“Dead”)を示す(“Dead”は、停止したことを意味する)。ペア#803は、対象制御プログラム20を含むプログラムペア60の番号を示す。稼働ノード#804は、対象制御プログラム20を有するノード101の番号を示す。使用容量805は、対象制御プログラム20が使用する記憶容量(例えば、対象制御プログラム20に関連付けられている全論理チャンクの容量)を示す。CPU負荷806は、対象制御プログラム20の実行のために割り当てられるCPU負荷(例えば、使用率、又は、CPUコア数)を示す。使用メモリ量807は、対象制御プログラム20の実行のために割り当てられるメモリ容量を示す。使用通信帯域808は、対象制御プログラム20の実行のために割り当てられる通信帯域を示す。
図9は、ノード管理テーブル402の構成を示す。
ノード管理テーブル402は、ノード101に関する情報を保持する。ノード管理テーブル402は、例えば、各ノード101におけるクラスタ制御部15が保持する(例えば、全ノード101においてノード管理テーブル402が同期している)。例えば、ノード管理テーブル402は、ノード101毎にエントリを有する。各エントリは、ノード#901、状態902、アクティブ制御プログラム数903、パッシブ制御プログラム数904、最大容量905、使用容量906、CPU負荷907、最大メモリ量908、使用メモリ量909、最大通信帯域910及び使用通信帯域911といった情報を格納する。以下、1つのノード101を例に取る(図9の説明において「対象ノード101」)。
ノード#901は、対象ノード101の番号を示す。状態902は、対象ノード101の状態(例えば“正常”又は“異常”)を示す。アクティブ制御プログラム数903は、対象ノード101に存在するアクティ制御プログラム20Aの数を示す。パッシブ制御プログラム数904は、対象ノード101に存在するパッシブ制御プログラム20Pの数を示す。最大容量905は、対象ノード101が有する最大記憶容量を示す。使用容量906は、対象ノード101が有する最大記憶容量のうちの使用されている記憶容量を示す。CPU負荷907は、対象ノード101におけるCPU負荷(例えば、使用率、使用CPUコア数、又は、空きCPUコア数)を示す。最大メモリ量908は、対象ノード101が有する最大のメモリ量を示す。使用メモリ量909は、対象ノード101における最大メモリ量のうちの使用されているメモリ量を示す。最大通信帯域910は、対象ノード101が使用可能な最大の通信帯域を示す。使用通信帯域911は、対象ノード101の最大通信帯域のうちの使用されている通信帯域を示す。
なお、ネットワーク203において、ホスト計算機201に接続されたフロントエンドネットワークと、他のノード101に接続されたバックエンドネットワークとが異なっていれば、最大通信帯域910及び使用通信帯域911は、フロントエンドネットワーク用の通信帯域910及び911と、バックエンドネットワーク用の通信帯域910及び911とがあってもよい。
図10は、リソース割当管理テーブル404の構成を示す。
リソース割当管理テーブル404は、計算リソース(典型的には、PDEV12以外の計算リソース)の割当に関する情報を保持する。リソース割当管理テーブル404は、ノード101毎に異なり得る。例えば、リソース割当管理テーブル404は、制御プログラム20毎にエントリを有する。各エントリは、制御プログラム#1001、CPUコア#1002及びメモリ領域1003といった情報を格納する。以下、1つの制御プログラム20を例に取る(図10の説明において「対象制御プログラム20」)。
制御プログラム#1001は、対象制御プログラム20の番号を示す。CPUコア#1002は、対象制御プログラム20に割り当てられているCPUコアの番号を示す。メモリ領域1003は、対象制御プログラム20に割り当てられているメモリ領域のアドレスを示す。メモリ領域1003は、更に、メモリ領域の容量であるメモリ量を示す情報を含んでもよい。
リソース割当管理テーブル404によれば、対象制御プログラム20(例えば、いずれかのパッシブ制御プログラム20P)が停止された場合に、解放されたリソース量に加えて、いずれのリソースが解放されたかまでもわかる。なお、リソース割当管理テーブル404は、例えば、当該テーブル404を有するノード101における全計算リソースについて、状態(例えば、空きか使用中か)を示す情報を保持してもよい。
図11及び図12は、構成テーブル401の構成を示す。具体的には、図11は、構成テーブル401の一部である物理チャンク管理テーブル1100の構成を示す。図12は、構成テーブル401の残りである論理チャンク管理テーブル1200の構成を示す。構成テーブル401は、例えば、各ノード101における冗長化部22が保持する(例えば、全ノード101において構成テーブル401が同期している)。各ノード101において、冗長化部22が、構成テーブル401を基に、論理チャンク33の提供先の制御プログラム20を特定したり、当該論理チャンク33に関連付いている2つの物理チャンク43を特定したり、特定した2つの物理チャンク43にデータセットを書き込んだり(二重化)、特定した2つの物理チャンク43のいずれか(典型的にはマスター物理チャンク43)からデータセットを読み出したりすることができる。構成テーブル401は、プログラムペア毎に独立していてもよい。
図11に示すように、物理チャンク管理テーブル1100は、物理チャンク43に関する情報を保持する。例えば、物理チャンク管理テーブル1100は、物理チャンク43毎に、エントリを有する。各エントリは、物理チャンク#1101、所属ノード#1102、PDEV#1103及びPDEV内オフセット1104といった情報を格納する。以下、1つの物理チャンク43を例に取る(図11の説明において「対象物理チャンク43」)。
物理チャンク#1101は、対象物理チャンク43の番号を示す。所属ノード#1102は、対象物理チャンク43を有するノード101の番号を示す。PDEV#1103は、対象物理チャンク43を有するPDEV12の番号を示す。PDEV内オフセット1104は、対象物理チャンク43を有するPDEV12の先頭アドレスからのオフセットを示す。
図12に示すように、論理チャンク管理テーブル1200は、論理チャンク33に関する情報を保持する。例えば、論理チャンク管理テーブル1200は、論理チャンク33毎に、エントリを有する。各エントリは、論理チャンク#1201、制御プログラム#1202、マスター物理チャンク#1203及びミラー物理チャンク#1204といった情報を格納する。以下、1つの論理チャンク33を例に取る(図12の説明において「対象論理チャンク33」)。
論理チャンク#1201は、対象論理チャンク33の番号を示す。制御プログラム#1202は、対象論理チャンク33が関連付けられている制御プログラム20(別の言い方をすれば、対象論理チャンク33の割当先(提供先)の制御プログラム20)の番号を示す。マスター物理チャンク#1203は、対象論理チャンク33に関連付けられている(割り当てられている)マスター物理チャンク43の番号を示す。ミラー物理チャンク#1204は、対象論理チャンク33に関連付けられているミラー物理チャンク43の番号を示す。
以下、本実施例においてクラスタ制御部15(例えば、マスターノード101におけるクラスタ制御部15)が行う処理を説明する。
図13は、クラスタ制御部15が行う処理の流れを示す。なお、以下の流れにおいて、ノード101間の処理(例えば、S1304〜S1308)のうちの少なくとも一部は、異なるノード101におけるクラスタ制御部15間での処理でよい。
クラスタ制御部15は、当該クラスタ制御部15を有するノード101とは別のいずれかのノード101で障害が発生した場合(S1301:Yes)、ノード管理テーブル402を基に、障害ノード101(当該障害が生じたノード101)に少なくとも1つのアクティブ制御プログラム20Aが存在するか否か(障害ノード101に対応したアクティブ制御プログラム数903の値が“1”以上か否か)を判断する(S1302)。
S1302の判断結果が真の場合(S1302:Yes)、フェイルオーバーが必要であるため、S1303〜S1308が行われる。以下、図13の説明において、1つのアクティブ制御プログラム20Aを例に取る(図13の説明において「対象アクティブ制御プログラム20A」)。
クラスタ制御部15は、制御プログラム管理テーブル403を基に、アクティブ制御プログラム20Aと同一のプログラムペア60を構成するパッシブ制御プログラム20Pと、当該パッシブ制御プログラム20Pを有するノード101とを特定する(S1303)。以下、図13の説明において、S1303で特定されたパッシブ制御プログラム20Pを、「フェイルオーバー先プログラム20P」と言い、S1303で特定されたノード101を、「フェイルオーバー先ノード101」と言う。
クラスタ制御部15は、フェイルオーバー先プログラム20Pに、対象アクティブ制御プログラム20Aの処理を引き継ぐよう通知する(S1304)。なお、この通知先は、フェイルオーバー先ノード101におけるクラスタ制御部15でもよく、当該クラスタ制御部15により、処理の引継ぎが制御されてもよい。
クラスタ制御部15は、フェイルオーバー先ノード101が有するパッシブ制御プログラム20Pのうち、フェイルオーバー先プログラム20P以外の全てのパッシブ制御プログラム20Pを停止させる(S1305)。なお、フェイルオーバー先プログラム20P以外の全てのパッシブ制御プログラム20Pを停止は、フェイルオーバー先プログラム20P以外の少なくとも1個のパッシブ制御プログラム20Pの稼働状況の変更の一例である。
クラスタ制御部15は、リソース割当管理テーブル404を基に、S1305の停止により解放された(空いた)計算リソースを特定し、特定された全ての計算リソースのうちの少なくとも一部の割当先を、フェイルオーバー先プログラム20Pに変更する(S1306)。つまり、S1306では、当該クラスタ制御部15を有するノード101内のリソース割当管理テーブル404が更新される。
クラスタ制御部15は、制御プログラム管理テーブル403のうち、フェイルオーバー先プログラム20Pに対応した状態802を、“Accitve”に変更する(S1307)。つまり、S1307では、制御プログラム管理テーブル403が更新される。更新後の制御プログラム管理テーブル403の同期が、ノード101間で行われる。
クラスタ制御部15は、ノード管理テーブル402のうち、フェイルオーバー先ノード101に対応したアクティブ制御プログラム数903を、“1”インクリメントし、且つ、フェイルオーバー先ノード101に対応したパッシブ制御プログラム数904を、“0”に変更する(S1308)。つまり、S1308では、ノード管理テーブル402が更新される。更新後のノード管理テーブル402の同期が、ノード101間で行われる。
図13によれば、フェイルオーバー先ノード101が有するパッシブ制御プログラム20Pのうち、フェイルオーバー先プログラム20P以外の全てのパッシブ制御プログラム20Pが停止する。これにより、フェイルオーバー先プログラム20Pに、対象アクティブ制御プログラム20Aに割り当てられていたリソース量と同等のリソース量を割り当てることの可能性を高めることができる。
また、本実施例では、制御プログラム20の切り替え(フェイルオーバー)の制御も、制御プログラム20へのリソース割当の管理も、クラスタ制御部15により行われる(また、プログラムペア60もクラスタ制御部15が管理する)。このため、クラスタ制御部15は、いずれのパッシブ制御プログラム20を停止することでいずれの計算リソースが解放されるかを特定し、特定した計算リソースの割当先をフェイルオーバー先プログラム20Pに変更できる。
なお、図13において、クラスタ制御部15は、フェイルオーバー先ノード101が有するパッシブ制御プログラム20Pのうち、フェイルオーバー先プログラム20P以外の全てのパッシブ制御プログラム20Pが停止することに代えて、対象アクティブ制御プログラム20Aに割り当てられたリソース量に基づき決定されたパッシブ制御プログラムPを停止してもよい。具体的には、例えば、クラスタ制御部15は、リソース割当管理テーブル404を基に、対象アクティブ制御プログラム20Aに割り当てられた計算リソースを特定し、特定された計算リソースのリソース量のX%(Xは、0<X≦100を満たす所定値)以上のリソース量をフェイルオーバー先プログラム20Pに割り当てるために停止すべきパッシブ制御プログラム20Pを、リソース割当管理テーブル404を基に決定し、決定したパッシブ制御プログラム20Pを停止してもよい。これにより、フェイルオーバー先プログラム20Pに対するリソース量を確保しても、一部のパッシブ制御プログラムPが停止されない可能性があるので、当該パッシブ制御プログラムPに対応したアクティブ制御プログラム20Aを有するノード101にも障害が生じても、高速なフェイルオーバーが期待できる。
また、本実施例において、論理チャンク33に対する物理チャンク43の割り当てに関し、下記のうちの少なくとも1つが採用されてよい。
第1に、冗長化部22が、論理チャンク33に関連付ける2個以上の物理チャンク43として、異なる2台以上のノード101が有する2個以上の物理チャンク43を選択する。一比較例では、1つの論理チャンクに対して同じノード内の2個以上の物理チャンクが関連付けられるが、そうすると、当該ノードに障害が生じると、当該論理チャンクに格納されたデータセットがロストする。本実施例では、このようなデータロストを避けることができる。
第2に、冗長化部22が、同一プログラムペア60を構成する2つの制御プログラム20A及び20Pにそれぞれ提供する2つの論理チャンク33に関連付ける同一の2個以上の物理チャンク43として、当該2つの制御プログラム20A及び20Pをそれぞれ有する2つのノード101における2つの物理チャンク43を優先的に選択する。これにより、論理チャンク33に対するI/Oが発生した場合、フェイルオーバーの前でも後でも、少なくともマスター物理チャンクについては、ノード101間の通信が発生することを回避できる。
第3に、冗長化部22が、いずれのノード101についても、1個以上の論理チャンク33に関連付けられる物理チャンク43の総量を制限する。これにより、特定のノード101についてのみ物理チャンク43が枯渇するといったことを回避できる。
実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略又は簡略する。
図14は、実施例2の概要を模式的に示す。
記憶システム1400が、2個以上のノード群1401で構成される。各ノード群1401は、N個(Nは2個以上の整数)のアクティブ制御プログラム20Aがそれぞれ実行されるNのノード101と、N台のアクティブ制御プログラム20Aをそれぞれ有するN個のプログラムペア60におけるN個のパッシブ制御プログラム20Pが集約されるm台(mは自然数且つm<N)のノード101である。つまり、各ノード群1401は、(N+m)ノード群1401((N+m)構成のノード群1401)である。ノード群1401によって、Nの値が異なっていてもよいし、mの値が異なっていてもよい。以下、Nのノードの各々を、「アクティブノード」と言い、mのノードの各々を、「パッシブノード」と言うことがある。図14の例では、ノード群1401A〜1401Cのいずれにおいても、N=3且つm=1である。具体的には、ノード101a〜101c、ノード101e〜101g、及び、ノード101i〜101kの各々が、アクティブノードである。ノード101d、ノード101h及びノード101lの各々が、パッシブノードである。
実施例2では、停止されたパッシブ制御プログラム20Pが、当該パッシブ制御プログラム20Pを有するノード101から別のノード101(例えば、パッシブ制御プログラム20Pが集約されている別のノード101、又は、リソース量に余裕のあるノード101)に移動する。クラスタ制御部25が、移動先のストレージノードを、前記パッシブの制御プログラム以外が使用している移動先ストレージノードの計算リソースの使用状況に基づいて、決定する。例えば、クラスタ制御部25が、移動先のノード101を、停止されたパッシブ制御プログラム20Pの移動先のノード101を、当該パッシブ制御プログラム20Pが存在するノード101以外の少なくとも1台のノード101の計算リソースの使用状況に基づいて、決定する。
具体的には、例えば、図14に例示の通り、ノード101aで障害が生じたとする。この場合、当該ノード101aを含んだノード群1401におけるいずれか別のノード101におけるクラスタ制御部25、例えば、当該ノード群1401におけるマスターノードであるノード101bにおけるクラスタ制御部25bが、次の処理を行う。すなわち、クラスタ制御部25bが、ノード101aにおけるアクティブ制御プログラム20A−1に対応したパッシブ制御プログラム20P−1以外のパッシブ制御プログラム20P−2及び20P−3を停止する。クラスタ制御部25bが、停止したパッシブ制御プログラム20P−2及び20P−3の各々について、当該プログラム20Pを有するノード101d以外のノード101に移動させ、且つ、当該プログラム20Pに関連付いた論理チャンク33も、移動先のノード101に移動させる。論理チャンク33の移動は、クラスタ制御部25bにより呼び出された冗長化部22により実行可能である。移動先ノードは、典型的には、ノード101dを含むノード群1401A以外のいずれかのノード群1401B又は1401Cにおけるパッシブノード101h又は101lである。論理チャンク33が移動しても、当該論理チャンク33内のデータセットの移動は生じない。移動の前後において、論理チャンク33に関連付けられている2つの物理チャンク43に変更は無いためである。これらのクラスタ制御部25による処理は、異なる順序や並列で実行されても良い。
実施例2によれば、停止したパッシブ制御プログラム20Pが別ノード101に移動するので、以後に、停止したパッシブ制御プログラム20Pに対応したアクティブ制御プログラム20Aを有するノード101に障害が生じても(つまり、異なる2台以上のノード101に障害が時間差をおいて生じても)、当該障害についてのフェイルオーバーが可能でありシステムの可用性を維持することができるとともに、この際にフェイルオーバー先でリソースが不足するおそれを低減することができる。
そして、停止したパッシブ制御プログラム20Pの別ノード101への移動に伴い、当該パッシブ制御プログラム20Pに関連付いた論理チャンク33も同じノード101に移動される。このため、移動されたパッシブ制御プログラム20Pが移動先のノード101においてフェイルオーバーによりアクティブになった場合、当該プログラムは、当該プログラムに関連付いている論理チャンク経由でデータセットを入出力できる、つまり、処理を引き継ぐことができる。このように、パッシブ制御プログラム20Pがノード101間で移動しても、当該制御プログラム20が、移動先のノード101から別のノード101(例えば移動元のノード101)にあるデータセットにアクセス可能になるのは、冗長化部22の機能(及び、冗長化部22が管理する上述の構成テーブル401)に依存する。
なお、必ずしも、2個以上の(N+m)ノード群1401が存在する構成でなくてもよい。例えば、m≧2の整数の場合、(N+m)ノード群1401は1つでもよい。
以下、実施例2を詳細に説明する。
図15は、クラスタ制御部25が行う処理の流れを示す。
S1501〜S1504は、図13のS1301〜S1304と同じである。以下、15〜図17の説明において、図13と同様に、「対象アクティブ制御プログラム20A」、「フェイルオーバー先プログラム20P」及び「フェイルオーバー先ノード101」と言う言葉を使用することがある。
フェイルオーバー先ノード101における、フェイルオーバー先プログラム20P以外の全パッシブ制御プログラム20Pの各々について、S1505〜S1507が行われる。以下、1つのパッシブ制御プログラム20Pを例に取る(図15〜図17の説明において、「対象パッシブ制御プログラム20P」)。
すなわち、クラスタ制御部25は、対象パッシブ制御プログラム20Pの再配置制御処理(図16)を行う(S1505)。その後、クラスタ制御部25は、対象パッシブ制御プログラム20Pを停止し(S1506)、フェイルオーバー先ノード101に対応したパッシブ制御プログラム数904を1デクリメントする(S1507)。
フェイルオーバー先プログラム20P以外の全パッシブ制御プログラム20Pの各々について、S1505〜S1507が行われた後、クラスタ制御部25は、1個以上のパッシブ制御プログラム20Pの停止により解放された(空いた)計算リソースを、リソース割当管理テーブル404を基に特定し、特定された全ての計算リソースのうちの少なくとも一部の割当先を、フェイルオーバー先プログラム20Pに変更する(S1508)。クラスタ制御部25は、フェイルオーバー先プログラム20Pに対応した状態802を“Active”に変更し(S1509)、フェイルオーバー先ノード101に対応したアクティブ制御プログラム数903を1インクリメントする(S1510)。
なお、図15の例によれば、S1505〜S1507は、フェイルオーバー先プログラム20P以外の全パッシブ制御プログラム20Pの各々について行われるが、それに代えて、フェイルオーバー先プログラム20P以外の全パッシブ制御プログラム20Pの各々についてS1505〜S1507を行うことは、ループ終了条件の一例である。ループ終了条件として、対象アクティブ制御プログラム20Aが使用していたリソース量以上のリソース量が解放されたこと、といった他の条件が採用されてもよい。
図16は、再配置制御処理の流れを示す。以下、説明を簡単にするために、各ノード101について、使用容量906、CPU負荷907、使用メモリ量909及び使用通信帯域911がそれぞれ表す値のいずれも「ノード使用リソース量」と総称し、最大容量905、図示しない最大CPU負荷(例えば100%)、最大メモリ量908及び最大通信帯域910がそれぞれ表す値のいずれも「ノード最大リソース量」と言うことがある。また、各制御プログラム20について、当該制御プログラム20に割り当てられている(例えば使用されている)計算リソースのリソース量を「プログラムリソース量」と言うことがある。プログラムリソース量としては、例えば、CPU負荷としてのリソース量、メモリ量としてのリソース量、及び、通信帯域としてのリソース量のうちの少なくとも1つがある。本実施例では、パッシブ制御プログラム20Pのノード間移動に伴い論理チャンク33のノード間移動は発生するものの当該論理チャンク33内のデータセットのノード間移動は生じないため、ノード使用リソース量及びノード最大リソース量から、使用容量906及び最大容量905は除外されてもよい。
クラスタ制御部25は、アクティブ制御プログラム数903“0”のノード101(ノード#)がパッシブ制御プログラム数904の昇順(つまりパッシブ制御プログラム20Pの少ない順)に並んだリストを作成する(S1601)。以下、S1601で作成されたノードリストを、「第1のノードリスト」と言う。第1のノードリストに他にノードリストとして後述の第2のノードリストが生成され得る。参照されるノードリストを「参照対象ノードリスト」と言う。
S1601の時点で、第1のノードリストには少なくとも1つのノード101があるとする(S1602:No)。
クラスタ制御部25は、参照対象ノードリスト(ここでは第1のノードリスト)の先頭ノード101を「候補ノード101」とする(S1605)。
クラスタ制御部25は、制御プログラム管理テーブル403、ノード管理テーブル402及びリソース割当管理テーブル404を基に、候補ノード101に対象パッシブ制御プログラム20Pを移動するとリソース量超過が生じるか否か(すなわち、候補ノード101のノード使用リソース量に対象パッシブ制御プログラム20Pのプログラムリソース量が加算されると候補ノード101のノード最大リソース量を超えることになるか否か)を判断する(S1606)。なお、少なくともリソース割当管理テーブル404は、全ノード101間で同期していてもよいし、ノード101間通信で参照が可能となっていてもよい。
S1606の判断結果が偽の場合(S1606:No)、候補ノード101は、停止後移動されるノード101となる。クラスタ制御部25は、当該候補ノード101について、制御プログラム移動処理(図17)を行う(S1609)。これにより、対象パッシブ制御プログラム20Pについての再配置制御処理(図16の処理)は終了する。なお、S1606:Noとなった候補ノード101を、後の図17の説明において、「移動先ノード101」と言う。
S1606の判断結果が真の場合(S1606:Yes)、候補ノード101を移動先とするとリソース超過が生じ得るため、クラスタ制御部25は、候補ノード101を参照対象ノードリスト(第1のノードリスト)から除外する(S1607)。そして、クラスタ制御部25は、参照対象ノードリストが空(1つもノード#が無い)か否かを判断する(S1602)。S1602の判断結果が偽の場合(S1602:No)、現在の先頭ノード101を候補ノード101として、クラスタ制御部25は、S1605以降を行う。
S1602の判断結果が真(S1602:Yes)であるということは、アクティブ制御プログラム数903“0”のいずれのノード101も(つまり、いずれのパッシブノード101も)、対象パッシブ制御プログラム20Pが移動されるとリソース超過が生じ得るということである。そこで、クラスタ制御部25は、移動先の候補をアクティブ制御プログラム数903“0”のノード101に制限しないノードリスト、つまり、障害が生じたノード101以外の全てのノード101がノード使用リソース量の昇順(つまり、ノード使用リソース量の少ない順)で並んだノードリストを作成する(S1604)。S1604で作成されたノードリストが、「第2のノードリスト」である。
以降、クラスタ制御部25は、第2のノードリストを、参照対象ノードリストとして、S1605以降を行う。
第2のノードリストも空になってしまった場合(S1602:Yes、S1603:Yes)、クラスタ制御部25は、アラート(例えば、リソース量不足に伴うノード増設を示唆するメッセージ)を管理システム202に送信する(S1608)。
図16によれば、アクティブ制御プログラム数903“0”のノード101のうちパッシブ制御プログラム数904が最も小さいノード101が最も優先的に移動先ノード101となり得る。これにより、以後の障害に伴うフェイルオーバーの際にリソース不足が生じる可能性が最も低いことが期待される。
また、図16によれば、アクティブ制御プログラム数903“0”のいずれのノード101も移動先となるとリソース超過が生じ得る場合、アクティブ制御プログラム数903“0”のノード101以外のノード101からも移動先となり得るノード101が探される。これにより、リソース量超過が生じない範囲で、対象パッシブ制御プログラム20Pが移動される可能性を高めることができる。
図17は、制御プログラム移動処理の流れを示す。
クラスタ制御部25は、移動先ノード101に、フェイルオーバー先ノード101から構成テーブル401をコピーする(S1701)。つまり、構成テーブル401の同期が行われる。
コピーが完了した場合(S1702:Yes)、クラスタ制御部25は、対象パッシブ制御プログラム20Pに関連付けられている全論理チャンク33の各々について、S1703及びS1704を行う。以下、1つの論理チャンク33を例に取る(図17の説明において「対象論理チャンク33」)。
すなわち、クラスタ制御部25は、論理チャンクテーブル1200を参照して論理チャンク33を構成する物理チャンクを確認し、同一の物理チャンクに関連付けた論理チャンク33の作成を、移動先ノード101における冗長化部22(以下、移動先冗長化部22)に指示する(S1703)。移動先冗長化部22が、当該指示に応答して、対象論理チャンク33を作成する。これにより、論理チャンク管理テーブル1200に、新たなエントリが追加される。新たなエントリは、作成された対象論理チャンク33(すなわち、フェイルオーバー先ノード101における対象論理チャンク33に関連付いた2つの物理チャンク43が関連付けられた論理チャンク33)に対応する。なお、対象論理チャンク33の作成は、コピー後(同期後)の構成テーブル401を基に行われてよい。
クラスタ制御部25は、フェイルオーバー先ノード101(移動元ノード101)から対象論理チャンク33を削除する(S1704)。例えば、当該論理チャンク33に対応したエントリが、論理チャンク管理テーブル1200から削除される。
対象パッシブ制御プログラム20Pに関連付けられている全論理チャンク33の各々について、S1703及びS1704が行われた後、クラスタ制御部25は、対象パッシブ制御プログラム20Pに対応した稼働ノード#804を、移動先ノード101の番号に更新する(S1705)。制御プログラム20のノード間移動は、S1705で行われる。クラスタ制御部25は、移動先ノード101に移動された制御プログラム20の状態を“Passive”にするための起動を行う(S1706)。クラスタ制御部25は、移動先ノード101に対応したパッシブ制御プログラム数904を1インクリメントする(S1707)。
実施例3を説明する。その際、実施例1及び2との相違点を主に説明し、実施例1及び2との共通点については説明を省略又は簡略する。
図18は、実施例3に係る記憶システムの構成を示す。
記憶システム1800は、複数のフォールトセット1801で構成される。各フォールトセット1801は、単一障害点共有範囲の一例であり、単一障害点を同一とする1台以上のノード101である。単一障害点の一例として、電源を挙げることができる。すなわち、記憶システム1800の複数の電源のうちの或る電源に障害が生じると、記憶システム1800を構成する複数台のノード101のうちの一部のノード101全てに障害が生じるが、その一部のノード101に相当する1台以上のノード101が、同一のフォールトセット1801に属するノード101である。同一のフォールトセット1801に属するノード101は、例えば、同一のラックに搭載されていてよい。
また、各フォールトセット1801において、少なくとも1つのノード101が、クラスタ制御部35を有する。クラスタ制御部35により、移動されるパッシブ制御プログラム20Pは、対応するアクティブ制御プログラム20Aとは別のフォールトセット1801に属するように、移動先のノード101を選択される。
各プログラムペア60について、アクティブ制御プログラム20Aとパッシブ制御プログラム20Pは、異なる2つのフォールトセット1801に配置される。これにより、或る単一障害によって同一のフォールトセット1801における全てのノード101に一斉に障害が生じても、障害が生じた全てのノード101における全てのアクティブ制御プログラム20Aの各々について、対応するパッシブ制御プログラム20Pがいずれか別のフォールトセット1801に存在する。このため、高可用を維持することができる。
図19は、実施例3に係る制御プログラム配置の第1の例を示す。
複数の(N+m)ノード群が、複数のフォールトセット1801A〜1801Dに跨っている。具体的には、各(3+1)ノード群について、3台のアクティブノード101a、101b及び101cがそれぞれ3つのフォールトセット1801A〜1801Cに存在し、1台のパッシブノード101dが1つのフォールトセット1801Dに存在する。このため、フォールトセット1801A〜1801Cの各々は、1台以上のアクティブノード101の集合としてのフォールトセット(パッシブノード101を含まないフォールトセット)1801であり、フォールトセット1801Dは、1台以上のパッシブノード101の集合としてのフォールトセット(アクティブノード101を含まないフォールトセット)1801である。
この例によれば、プログラムペア60−1〜60−6の各々について、アクティブ制御プログラム20Aとパッシブ制御プログラム20Pは、(N+m)ノード群単位で、異なる2つのフォールトセット1801に配置される。
この例によれば、フォールトセット1801A〜1801Dに(N+m)ノード群の単位で増設又は減設ができる。
図20は、実施例3に係る制御プログラム配置の第2の例を示す。
複数のフォールトセット1801E〜1801Hの各々が、1以上のアクティブノード101と、1以上のパッシブノード101とを含む。複数のフォールトセット1801E〜1801Hの各々において、パッシブノード101の数と、アクティブノード101の数は限定されないでよいが、好ましくは、パッシブノード101は、アクティブノード101より少ない。
この例によれば、プログラムペア60−7〜60−10の各々について、アクティブ制御プログラム20Aとパッシブ制御プログラム20Pは、異なる2つのフォールトセット1801に配置される。例えば、プログラムペア60−w(wは自然数、図20では、wは、7≦w≦10の整数)におけるパッシブ制御プログラム20P−wは、パッシブ制御プログラム20P−wが配置されるパッシブノード101を含んだフォールトセット1801と別のフォールトセット1801であって、プログラムペア60−(w+1)におけるアクティブ制御プログラム20A−(w+1)が配置されるアクティブノード101を含んだフォールトセット1801に配置される((w+1)が、wの最大値を超える場合、(w+1)=wの最小値である)。
この例によれば、フォールトセット単位で増設又は減設ができる。
なお、図示しないが、実施例3に係る制御プログラム配置の第3の例として、次の配置が採用されてもよい。すなわち、パッシブノード101が、複数のフォールトセット1801に分散するように配置してもよい。この場合、或る単一障害によって、パッシブノードを持つフォールトセット1801における全てのノード101に一斉に障害が生じても、障害が生じるパッシブノードがシステム全体に存在するパッシブノードの一部のみとなるため、フェイルオーバー先のパッシブ制御プログラムを失うアクティブ制御プログラムの個数を抑制できる。
図21は、実施例3に係るノード管理テーブル2100の構成を示す。
図21に例示のノード管理テーブル2100によれば、各エントリが、上述した情報901〜911に加えて、フォールトセット#2103といった情報を格納する。各ノード101について、フォールトセット#2103は、当該ノード101が所属するフォールトセット1801の番号を示す。
図22は、クラスタ制御部35が行う再配置制御処理の流れを示す。
図22において、S2201〜S2205は、それぞれ、図16のS1601〜S1605と同じである。また、S2207〜S2210は、それぞれ、S1606〜S1609と同じである。
すなわち、図22が示す処理のうち、図16が示す処理との相違点は、S2206が追加されていることである。
クラスタ制御部35は、ノード管理テーブル2100を基に、候補ノード101を含んだフォールトセット1801が、対象パッシブ制御プログラム20Pに対応したアクティブ制御プログラム20A(対象パッシブ制御プログラム20Pを含むプログラムペア60におけるアクティブ制御プログラム20A)が配置されているノード101を含んだフォールトセット1801と異なるフォールトセット1801であるか否かを判断する(S2206)。移動先が、対応したアクティブ制御プログラム20Aが配置されているフォールトセット1801になることによって、可用性が低下することを避けるためである。
S2206の判断結果が真の場合(S2206:Yes)、S2207が行われる。S2206の判断結果が偽の場合(S2206:No)、S2208が行われる。
実施例4を説明する。その際、実施例3との相違点を主に説明し、実施例3との共通点については説明を省略又は簡略する。なお、実施例4における後述のコンバート処理は、フォールトセット1801の考慮の無い実施例1及び2のいずれに適用されてもよい。
図23は、実施例4の概要を模式的に示す。
実施例1〜3のような制御プログラム配置、すなわち、いずれのアクティブ制御プログラム20Aも配置されないノード101に全てのパッシブ制御プログラム20Pを配置することを、「分離配置」と呼ぶ。分離配置は、パッシブ制御プログラム20P用のノード101が必要である。
パッシブ制御プログラム20P用のノード101が必要となると、ノード数が増えるため、そのようなノード101を必要としない記憶システムが望まれるケースもあり得る。
そこで、本実施例では、分離配置に代えて、同一プログラムペア60を構成するアクティブ制御プログラム20Aとパッシブ制御プログラム20Pは別々のノード101に配置されるものの、同一ノード101にアクティブ制御プログラム20Aとパッシブ制御プログラム20Pが共存することが許容される統合配置が採用され得る。統合配置によれば、例えば、プログラムペア60−v(vは自然数、図23では、vは、1≦v≦3の整数)におけるパッシブ制御プログラム20P−vは、パッシブ制御プログラム20P−vが配置されるノード101と別のノード101であって、プログラムペア60−(v+1)におけるアクティブ制御プログラム20A−(v+1)が配置されるノード101に配置される((v+1)が、vの最大値を超える場合、(v+1)=vの最小値である)。統合配置によれば、各ノード101において、当該ノード101におけるパッシブ制御プログラム20Pがフェイルオーバー先となったときのために、対応するアクティブ制御プログラム20Aと同等のリソース量を確保しておく必要があるため、分離配置に比して実効性能は低い。しかし、(N+m)ノード群単位に代えてノード単位で増設又は減設が可能である。
少なくとも1つのノード101にクラスタ制御部45が設けられる。クラスタ制御部45が、例えばノード101の増設を契機に、統合配置から分離配置へのコンバート処理を行うことができる。
図24は、クラスタ制御部45が行うコンバート処理の流れを示す。コンバート処理は、ノード101の増設のような所定のコンバート開始イベントが発生した場合に、開始される。また、本コンバート処理では、可用性と実行性能の両立を実現しつつリソース超過を避けるために、コンバート処理後、統合配置は完全な分離配置にならないことがあり得る(すなわず、一部のノード101でアクティブ制御プログラム20Aとパッシブ制御プログラム20Pが共存し得る)。
クラスタ制御部45は、アクティブ制御プログラム20Aとパッシブ制御プログラム20Pが同居する全ノード101のリストであるノードリストを作成する(S2401)。このため、当該ノードリストには、増設ノード101は含まれない。言い換えれば、増設ノード101が、各パッシブ制御プログラム20Pの再配置先(移動先)になり得る。
クラスタ制御部45は、ノードリストが空か否かを判断する(S2402)。
S2402の判断結果が偽の場合(S2402:No)、クラスタ制御部45は、ノードリストの先頭ノードにおける各パッシブ制御プログラム20Pについて、S2403〜S2407を行う。以下、1つの各パッシブ制御プログラム20Pを例に取る(図24の説明において「対象パッシブ制御プログラム20P」と言う)。
クラスタ制御部45は、対象パッシブ制御プログラム20Pを、候補プログラム20Pとする(S2403)。
クラスタ制御部45は、下記(x1)と(x2)が異なるフォールトセット1801か否かを判断する(S2404)。同一の単一障害点が原因で或るフォールトセット1801内の全ノード101が停止した場合に、当該全ノード101における1以上のアクティブ制御プログラム20Aをフェイルオーバーすることになるが、フェイルオーバー先のパッシブ制御プログラム20Pが同一のノードに集中しないようにするためである。なお、S2404の判断は、ノード管理テーブル2100及び制御プログラム管理テーブル403を基に行うことができる。
(x1)候補プログラム20Pと同一のプログラムペア60を構成するアクティブ制御プログラム20Aが存在するノード101を含んだフォールトセット1801。
(x2)既に移動対象とされたパッシブ制御プログラム20Pと同一のプログラムペア60を構成するアクティブ制御プログラム20Aが存在するノード101を含んだフォールトセット1801。
S2404の判断結果が偽の場合(S2404:No)、S2403に戻り、次のパッシブ制御プログラムへの処理へ移る。
S2404の判断結果が真の場合(S2404:Yes)、クラスタ制御部45は、下記(y1)と(y2)が異なるフォールトセット1801か否かを判断する(S2405)。同一プログラムペア60を構成するアクティブ制御プログラム20Aとパッシブ制御プログラム20Pが同一のフォールトセット1801に配置されることを避けるためである。なお、S2405の判断は、ノード管理テーブル2100を基に行うことができる。
(y1)増設ノード101を有するフォールトセット1801。
(y2)候補プログラム20Pと同一のプログラムペア60を構成するアクティブ制御プログラム20Aが存在するノード101を含んだフォールトセット1801。
S2405の判断結果が偽の場合(S2405:No)、S2403に戻り、次のパッシブ制御プログラムへの処理へ移る。
S2405の判断結果が真の場合(S2405:Yes)、クラスタ制御部45は、制御プログラム管理テーブル403及びノード管理テーブル402を基に、増設ノード101に候補プログラム20Pを移動するとリソース量超過が生じるか否か(すなわち、増設ノード101のノード使用リソース量(例えば、移動対象とされたパッシブ制御プログラム20Pのプログラムリソース量の合計)に候補プログラム20Pのプログラムリソース量が加算されると増設ノード101のノード最大リソース量を超えることになるか否か)を判断する(S2406)。
S2406の判断結果が偽の場合(S2406:No)、クラスタ制御部45は、候補プログラム20Pを、移動対象プログラム20Pとする(S2407)。
未処理のパッシブ制御プログラムが存在する場合にはS2403に戻り、次のパッシブ制御プログラムへの処理へ移る。すべてのパッシブ制御プログラムの処理を終えた場合、ノードリストから先頭ノードを削除し、S2402に戻る。
S2406の判断結果が真の場合(S2406:Yes)、およびS2402の判断結果が真の場合(S2406:Yes)、ノードリストの全ノードにおける全パッシブ制御プログラム20Pについて、S2403〜S2407が終わっていなくても、クラスタ制御部45は、当該処理(ループ(A))を終了し、現時点での各移動対象プログラム20Pについて、S1505〜S1507と同じ処理(図24のループ(B))を行うことで、各移動対象プログラム20Pを増設ノード101に移動させる。すなわち、当該ループ(B)では、再配置制御処理(図16)においてリソース量超過は生じないため、各移動対象プログラム20Pについて制御プログラム移動処理(図17)が行われる。
実施例4を基に、例えば、下記のような表現が可能である。
いずれかのノード101が、ノード101の増設を契機にプログラム配置のコンバート処理を実行する。コンバート処理前のプログラム配置は、2個以上のプログラムクラスタの各々について、下記、
・アクティブの制御プログラムが、前記複数台のストレージノードのいずれかのストレージノードに配置、
・パッシブの制御プログラムが、当該プログラムクラスタとは別のプログラムクラスタにおけるアクティブの制御プログラムが配置されているストレージノードに配置、
を満たす配置である。コンバート処理は、コンバート処理前のプログラム配置における複数のパッシブの制御プログラムの各々について、下記の(C1)乃至(C3)の判断、
(C1)当該パッシブの制御プログラムと同一のプログラムクラスタを構成するアクティブの制御プログラムが存在するストレージノードを含んだ障害波及範囲と、既に移動対象とされたパッシブの制御プログラムと同一のプログラムクラスタを構成するアクティブの制御プログラムが存在するストレージノードを含んだ障害波及範囲とが異なるか否か、
(C2)前記増設されたストレージノードを含んだ障害波及範囲と、当該パッシブの制御プログラムと同一のプログラムクラスタを構成するアクティブの制御プログラムが存在するストレージノードを含んだ障害波及範囲とが異なるか否か、及び、
(C3)当該パッシブの制御プログラムが前記増設されたストレージノードに移動されても、使用される計算リソースのリソース量が最大のリソース量を超えないか否か、
を含む。コンバート処理では、(C1)乃至(C3)のいずれの判断の結果も真であるパッシブの制御プログラムが、増設されたストレージノードに移動する移動対象である。
以上、本発明の幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。例えば、上述の説明を基に、下記の記載が可能である。なお、下記の記載は、上述の説明に無い事項を含んでいてもよい。
例えば、複数のノード101は、各々がPDEV12(記憶デバイスの一例)を有している。アクティブ制御プログラム20Aは、自ノード(当該プログラム20Aを有するノード)101及び他ノード101のPDEV12の記憶領域について、I/Oが可能で、複数のノード101のPDEV12にデータセットを格納している。アクティブ制御プログラム20Aは、データセットを格納した複数のノード101のうちの1のノード101に格納したデータセットを、他ノード101に格納したデータセットから復元可能である。
ここで、アクティブ制御プログラム20Aは、ミラーリングにより、複数のノードに復元可能にデータセットを格納していてよい。すなわち、ミラーデータセットからコピーすることが、「復元」の一例でよい。データセットに含まれる冗長コードを用いて復元してもよい。
また、パッシブ制御プログラム20Pは、対応するアクティブ制御プログラム20Aの障害または停止時にアクティブに変更になり、当該対応するアクティブ制御プログラム20Aが扱うデータセットの論理構成を用いて、そのデータセットのI/Oを行ってもよい。これにより、障害や停止の発生後もI/Oの継続が可能である。
当該対応するアクティブ制御プログラム20Aと同じノード101に格納したデータセットを使用できない場合、アクティブに変更になった制御プログラム20は、使用ができないデータセットにかかるノード101とは異なるノード101に格納されたデータセットを用い、そのデータセットまたはそのデータセットから復元したデータセットに対してI/Oを行ってよい。これにより、I/O要求に応答して、ミラーリングの場合は、アクティブに変更になった制御プログラム20は、他ノード101に格納されたデータセットに対しI/Oを行う。RAIDやRAINの場合には、制御プログラム20は、複数の他ノード101に分散して格納されたデータセットから復元する。
更に、当該アクティブに変更された制御プログラム20は、I/Oが不能になったデータセットを、他ノード101に格納しているデータセットから復元し、自ノード101に格納してよい。そして、当該制御プログラム20は、復元前のデータセットについてI/O要求を受けた場合に上記異なるノード101に格納されたデータセットを用いてI/Oを行う。当該制御プログラム20は、復元が完了したデータセットについてI/O要求を受けた場合に、自ノード101に格納されたデータセットを用いてI/Oを行う。具体的には、例えば、次の通りである。上述したように、フェイルオーバー処理によりアクティブになった制御プログラム20は、冗長化部22を経て、データセットにアクセスする。例えば、図25の例によれば、障害が発生したノード101aにおけるアクティブ制御プログラム20A−1に関して、ノード101dの制御プログラム20P−1へのフェイルオーバー処理が行われる。このとき、制御プログラム20A−1が使用していたデータセットAのミラー先がノード101bであった場合、アクティブになった制御プログラム20(20A−1)は、冗長化部22dを通じて、ノード101dからノード101bのデータセットAにアクセスすることで、I/Oを継続する。しかし、これでは、ノード間通信を必要とするため性能が低下し、且つ、データセットの冗長度も低下したままである。そこで、図26に示すように、フェイルオーバー元、フェイルオーバー先、及び、マスターのうちのいずれかのノード101における冗長化部22(又はクラスタ制御部)が、フェイルオーバー元のノード101aからミラー先のノード101bにミラー(バックアップの一例)されたデータセットAを、当該ミラー先のノード101bからフェイルオーバー先のノード101dに復元(コピー)する。これにより、フェイルオーバー先のノード101dにおける制御プログラム20(20A−1)から冗長化部22dを通じてノード間通信無しでI/O可能であり、且つ、冗長度が回復する。これは、ミラー以外の冗長構成(例えばRAIDやRAIN)でも、同様なことができる。
いずれかの制御プログラム20は、障害または停止になったアクティブ制御プログラム20Aと同じノード101に格納されたデータセットを、他のノード101に格納したデータセットを用いて復元し、アクティブに変更された制御プログラム20と同じノード101に格納してよい。これにより、別の制御プログラム20にかかるデータセットでも、障害が起きたノード101にデータセットを復元しておくと、冗長度(予備のデーセット)を回復することができる。なお、この段落で言う「いずれかの制御プログラム20」は、アクティブに変更になる制御プログラム、復元対象のデータセットに紐づけられた制御プログラム、及び、指定された制御プログラム(例えば管理システム202又はクラスタ制御部から指定された制御プログラム)、のうちのいずれでもよい。
101…ストレージノード

Claims (14)

  1. それぞれが1個以上のプロセッサを有する複数のストレージノードと、
    データを格納する1個以上の記憶デバイスと、を備え、
    前記複数台のストレージノードは、前記1個以上のプロセッサのうちの少なくとも1個のプロセッサ上でそれぞれ稼働する複数個の制御プログラムで構成された2個以上のプログラムクラスタを有し、
    いずれの制御プログラムも、当該制御プログラムに関連付けられた記憶領域に対してI/Oを行うためのプログラムであり、
    前記2個以上のプログラムクラスタの各々は、
    アクティブの制御プログラムと、
    当該アクティブの制御プログラムに代わってアクティブとなるパッシブの制御プログラムと、
    を有し、
    前記制御プログラムの前記プロセッサの計算リソース使用は、アクティブのときがパッシブときよりも大きく、
    同じプログラムクラスタの前記アクティブの制御プログラムと前記パッシブの制御プログラムとは、異なるストレージノードに配置されるとともに、前記複数台のストレージノードのいずれも、複数のアクティブまたはパッシブの制御プログラムが配置されることが可能であり、
    複数の前記パッシブの制御プログラムのうちのいずれかの前記パッシブの制御プログラムがアクティブに変更になった場合に、当該制御プログラムと同じストレージノードで稼働している他のパッシブの制御プログラムの稼働状況を変更する
    記憶システム。
  2. 前記稼働状況の変更として、他のパッシブの制御プログラムを、停止させる、または、他のストレージノードに移動させて稼働させて、前記他のパッシブの制御プログラムが使用する計算リソースを減少させる
    請求項1記載の記憶システム。
  3. 前記複数のストレージノードでの前記制御プログラムへの計算リソースの割り当てを管理するクラスタ制御部を有しており、
    前記クラスタ制御部が、前記他のパッシブの制御プログラムを、停止させるか移動させるか、または/及び、移動させる場合の移動先のストレージノードを、決定する
    請求項2記載の記憶システム。
  4. 前記移動先のストレージノードを、移動先ストレージノードの計算リソースの使用状況に基づいて、決定する
    請求項3記載の記憶システム。
  5. 前記移動先のストレージノードを、前記パッシブの制御プログラム以外が使用している移動先ストレージノードの計算リソースの使用状況に基づいて、決定する
    請求項4記載の記憶システム。
  6. 複数のストレージノードで構成される単一障害点共有範囲を複数有しており、
    前記移動されるパッシブの制御プログラムは、対応するアクティブの制御プログラムとは別の単一障害点共有範囲に属するように、移動先ストレージノードを選択される
    請求項3記載の記憶システム。
  7. 複数のストレージノードは、各々が前記記憶デバイスを有しており、
    前記アクティブの制御プログラムは、
    自ストレージノード及び他ストレージノードの記憶デバイスの記憶領域について、I/Oが可能で、複数のストレージノードの記憶デバイスにデータセットを格納しており、
    データセットを格納した複数のストレージノードのうちの1のストレージノードに格納したデータセットを、他のストレージノードに格納したデータセットから復元可能である
    請求項1記載の記憶システム。
  8. 前記アクティブの制御プログラムは、ミラーリングにより、複数のストレージノードに復元可能にデータセットを格納している
    請求項7記載の記憶システム。
  9. 前記パッシブの制御プログラムは、対応するアクティブの制御プログラムの障害または停止時にアクティブに変更になり、前記対応するアクティブの制御プログラムが扱うデータセットの論理構成を用いて、そのデータセットのI/Oを行う
    請求項1記載の記憶システム。
  10. 前記対応するアクティブの制御プログラムと同じストレージノードに格納したデータセットを使用できない場合、前記アクティブに変更になった制御プログラムは、前記使用ができないデータセットにかかるストレージノードとは異なるストレージノードに格納されたデータセットを用い、そのデータセットまたはそのデータセットから復元したデータセットに対してI/Oを行う
    請求項9記載の記憶システム。
  11. 前記制御プログラムは、
    I/Oが不能になったデータセットを、他のストレージノードに格納しているデータセットから復元し、
    前記アクティブに変更された制御プログラムは、
    前記復元したデータセットを自ストレージノードに格納し、
    前記復元前のデータセットについてI/O要求を受けた場合に、前記異なるストレージノードに格納されたデータセットを用いてI/Oを行い、
    前記復元が完了したデータセットについてI/O要求を受けて場合に、前記自ストレージノードに格納されたデータセットを用いてI/Oを行う
    請求項10記載の記憶システム。
  12. いずれかの制御プログラムは、前記障害または停止になったアクティブの制御プログラムと同じストレージノードに格納されたデータセットを、他のストレージノードに格納したデータセットを用いて復元し、前記アクティブに変更された制御プログラムと同じストレージノードに格納する
    請求項11記載の記憶システム。
  13. それぞれが1個以上のプロセッサを有する複数のストレージノードと、データを格納する1個以上の記憶デバイスと、を備えた記憶システムの記憶制御方法であって、
    前記複数台のストレージノードが有する複数個のプロセッサ上で稼働する2個以上のプログラムクラスタにおける複数のパッシブの制御プログラムのうちのいずれかのパッシブの制御プログラムがアクティブに変更になったことを検出し、
    アクティブに変更になった当該制御プログラムと同じストレージノードで稼働している他のパッシブの制御プログラムの稼働状況の変更を行い、
    いずれの制御プログラムも、当該制御プログラムに関連付けられた記憶領域に対してI/Oを行うためのプログラムであり、
    前記2個以上のプログラムクラスタの各々は、
    アクティブの制御プログラムと、
    当該アクティブの制御プログラムに代わってアクティブとなるパッシブの制御プログラムと、
    を有し、
    前記制御プログラムの前記プロセッサの計算リソース使用は、アクティブのときがパッシブときよりも大きく、
    同じプログラムクラスタの前記アクティブの制御プログラムと前記パッシブの制御プログラムとは、異なるストレージノードに配置されるとともに、前記複数台のストレージノードのいずれも、複数のアクティブまたはパッシブの制御プログラムが配置されることが可能である
    記憶制御方法。
  14. それぞれが1個以上のプロセッサを有する複数のストレージノードと、データを格納する1個以上の記憶デバイスと、を備えた記憶システムのうちの、一のストレージノードに、
    前記複数台のストレージノードが有する複数個のプロセッサ上で稼働する2個以上のプログラムクラスタにおける複数のパッシブの制御プログラムのうちのいずれかのパッシブの制御プログラムがアクティブに変更になったことを検出し、
    アクティブに変更になった当該制御プログラムと同じストレージノードで稼働している他のパッシブの制御プログラムの稼働状況の変更を行う、
    ことを実行させ、
    いずれの制御プログラムも、当該制御プログラムに関連付けられた記憶領域に対してI/Oを行うためのプログラムであり、
    前記2個以上のプログラムクラスタの各々は、
    アクティブの制御プログラムと、
    当該アクティブの制御プログラムに代わってアクティブとなるパッシブの制御プログラムと、
    を有し、
    前記制御プログラムの前記プロセッサの計算リソース使用は、アクティブのときがパッシブときよりも大きく、
    同じプログラムクラスタの前記アクティブの制御プログラムと前記パッシブの制御プログラムとは、異なるストレージノードに配置されるとともに、前記複数台のストレージノードのいずれも、複数のアクティブまたはパッシブの制御プログラムが配置されることが可能である
    コンピュータプログラム。
JP2018059091A 2018-03-26 2018-03-26 記憶システム及び記憶制御方法 Pending JP2019174875A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018059091A JP2019174875A (ja) 2018-03-26 2018-03-26 記憶システム及び記憶制御方法
US16/117,719 US10691564B2 (en) 2018-03-26 2018-08-30 Storage system and storage control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018059091A JP2019174875A (ja) 2018-03-26 2018-03-26 記憶システム及び記憶制御方法

Publications (1)

Publication Number Publication Date
JP2019174875A true JP2019174875A (ja) 2019-10-10

Family

ID=67985151

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018059091A Pending JP2019174875A (ja) 2018-03-26 2018-03-26 記憶システム及び記憶制御方法

Country Status (2)

Country Link
US (1) US10691564B2 (ja)
JP (1) JP2019174875A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11175944B2 (en) * 2020-01-03 2021-11-16 Vmware, Inc. Optimizing cluster-wide operations in a hyper-converged infrastructure (HCI) deployment

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8190816B2 (en) * 2008-10-17 2012-05-29 Netapp, Inc. Embedded scale-out aggregator for storage array controllers
US10614098B2 (en) * 2010-12-23 2020-04-07 Mongodb, Inc. System and method for determining consensus within a distributed database
JP5872433B2 (ja) 2012-10-04 2016-03-01 日本電信電話株式会社 仮想マシン配置装置および仮想マシン配置方法
US20180246751A1 (en) * 2015-09-25 2018-08-30 Intel Corporation Techniques to select virtual machines for migration

Also Published As

Publication number Publication date
US10691564B2 (en) 2020-06-23
US20190294516A1 (en) 2019-09-26

Similar Documents

Publication Publication Date Title
US11144415B2 (en) Storage system and control software deployment method
US11068367B2 (en) Storage system and storage system control method
US11137940B2 (en) Storage system and control method thereof
JP2022003577A (ja) Hci環境でのvm/コンテナおよびボリューム配置決定方法及びストレージシステム
US11221935B2 (en) Information processing system, information processing system management method, and program thereof
US20150199147A1 (en) Storage thin provisioning and space reclamation
WO2014174570A1 (ja) ストレージ管理計算機、ストレージ管理方法、およびストレージシステム
WO2014080438A1 (en) Storage system and data management method
EP3147790B1 (en) Adaptive bandwidth management
CN108205573B (zh) 一种数据分布式存储方法及系统
JP6714037B2 (ja) 記憶システム、及び、クラスタ構成制御方法
US20210303178A1 (en) Distributed storage system and storage control method
US11128708B2 (en) Managing remote replication in storage systems
US10019182B2 (en) Management system and management method of computer system
US20160364268A1 (en) Computer system, management computer, and management method
CN112262372A (zh) 跨多个故障域的存储系统
JP2019174875A (ja) 記憶システム及び記憶制御方法
WO2016194096A1 (ja) 計算機システム及び計算機システムの管理方法
JP7057408B2 (ja) 記憶システム及びその制御方法
US20230205439A1 (en) Information processing system and configuration management method
US11868367B2 (en) Information processing apparatus and information processing method
JP7419456B2 (ja) 記憶システム及びその制御方法
CN116974462A (zh) 存储系统以及障碍应对方法
JP2024049171A (ja) ユニファイドストレージ及びユニファイドストレージの制御方法