JP2019219954A - クラスタストレージシステム、データ管理制御方法、データ管理制御プログラム - Google Patents
クラスタストレージシステム、データ管理制御方法、データ管理制御プログラム Download PDFInfo
- Publication number
- JP2019219954A JP2019219954A JP2018117268A JP2018117268A JP2019219954A JP 2019219954 A JP2019219954 A JP 2019219954A JP 2018117268 A JP2018117268 A JP 2018117268A JP 2018117268 A JP2018117268 A JP 2018117268A JP 2019219954 A JP2019219954 A JP 2019219954A
- Authority
- JP
- Japan
- Prior art keywords
- node
- cluster
- volume
- storage
- network
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1044—Group management mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/30—Decision processes by autonomous network management units using voting and bidding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Hardware Redundancy (AREA)
Abstract
【課題】クライアント装置からのデータI/Oに対するクラスタストレージシステムの可用性を向上できるようにする。【解決手段】複数のノード20と、クラスタネットワーク12と、を備えるクラスタストレージシステム2において、それぞれのノード20は、ボリュームを単位としてデータを格納可能であり、複数のノード20に格納されている複数のボリュームにより構成されるボリュームグループを複数有し、ノード20を、クラスタネットワーク12を介して同一のボリュームグループのボリュームを同期させるように構成する。ノード20は、クラスタネットワーク12における通信が分断された場合に、ボリュームの同期が実行不可能となった分断ボリュームグループに属するいずれか1つのボリュームに対するクライアント装置10からのアクセスを実行可能な状態とする。【選択図】図1
Description
本発明は、データを格納する複数のストレージノードを備えるクラスタストレージシステム等に関する。
一般的なSoftware Defined Storage(SDS)においては、ノードの追加削除を検出したり、ダウン状態のノードがないかをチェックしたりするための監視機構が備えられている。例えば、代表的なOSS(Open Source Software)の分散ストレージシステムであるCephの場合では、モニタと呼ばれるコンポーネントがクラスタ全体の監視を行っている。Cephのストレージは、オブジェクトストレージであり、各データは一定のサイズに分割され、オブジェクトの集まりであるPlacement Group(PG)の単位で扱われている。PGは、各ノードの物理デバイスごとにマッピングされたオブジェクトストレージデバイス(OSD)のいずれかに割り当てられる。PGの割り当てについてはCRUSHという分散アルゴリズムが用いられている。どのオブジェクトがどのOSDに割り当てられているかはCRUSHによるハッシュ計算により一意に求めることができ、OSDへ問い合わせる必要がない。
Cephでは、OSD間のハートビートに一定期間応答がなく、障害があると判断された場合には、モニタが障害を検知する前に、発生したOSDの障害の全ては、OSD側からモニタに報告される。モニタは、OSDの構成の変化に合わせクラスタマップを更新し、各ノードに対して最新の構成情報を配布する。モニタは、耐故障性向上のために、奇数台での冗長化を行うことが推奨されており、OSDはモニタに最新のクラスタマップを要求し、一定期間応答がなかった場合、異なるモニタと通信することでクラスタマップを取得する。
分散ストレージシステムにおいて、クラスタ間のネットワークが断絶した際に、スプリットブレインが発生することを回避するための代表的な手段としては、第3の地点にquorumを立て、先にロックをとったノードを残し、他方は、failoverさせるのが一般的である。また、Cephのようなスケールアウト可能な分散ストレージシステムにおいては、モニタに報告されたOSDの障害情報をもとに、多数派のOSD群を判断し、少数派となったノードへのI/Oを停止し、多数派に存在するオブジェクトのレプリカに対してI/Oを継続する。
例えば、クラスタシステムにおいて、スプリットブレインが発生した際の不要なサービス停止を防ぐ技術として、例えば、特許文献1に記載の技術が知られている。
Cephにおいては、同一オブジェクトを複数生成し、それらを異なるPGに配置することでデータの冗長性を確保しているが、例えば、データの冗長度を3にした場合において、ネットワークの分断により、少数派のノード数が冗長度以上となった場合には、多数派のノードへのI/Oも停止されてしまう。すなわち、クラスタシステム全体におけるI/O処理が停止されてしまう。
本発明は、上記事情に鑑みなされたものであり、その目的は、クライアント装置からのデータI/Oに対するクラスタストレージシステムの可用性を向上することのできる技術を提供することにある。
上記目的を達成するため、一観点に係るクラスタストレージシステムは、クライアント装置で利用するデータを格納する複数のストレージノードと、クライアント装置とストレージノードとを接続する第1ネットワークと異なる、複数のストレージノードを相互に通信可能に接続する第2ネットワークと、を備えるクラスタストレージシステムであって、それぞれのストレージノードは、ボリュームを単位としてデータを格納可能であり、複数のストレージノードに格納されている複数のボリュームにより構成されるボリュームグループを複数有し、ボリュームグループの各ボリュームを格納する複数のストレージノードは、第2ネットワークを介して同一のボリュームグループのボリュームを同期させる。
本発明によれば、クライアント装置からのデータI/Oに対するクラスタストレージシステムの可用性を向上することができる。
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
以下の説明では、「AAA表」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「AAA表」を「AAA情報」と呼ぶことができる。
図1は、一実施形態に係る計算機システムの全体構成図である。
計算機システム1は、1以上のクライアント装置(クライアントともいう)10と、クラスタストレージシステム2とを備える。クライアント装置10と、クラスタストレージシステム2の各ノード20とは、例えば、パブリックネットワーク11(第1ネットワークの一例)を介して接続されている。また、クラスタストレージシステム2の各ノード20は、クラスタネットワーク12(第2ネットワークの一例)を介して接続されている。
クライアント装置10は、クラスタストレージシステム2で管理されるボリュームに対してデータ(ユーザデータ)の入出力(I/O)を実行して、各種処理を実行する。
パブリックネットワーク11は、例えば、インターネット等のパブリックなネットワークである。なお、パブリックネットワーク11に代えて、パブリックではないネットワークとしてもよい。パブリックネットワーク11は、例えば、クライアント装置10からのユーザデータのI/Oや、ノード20への管理コマンドの送受信等に利用される。クラスタネットワーク12は、例えば、LAN(Local Area Network)であるが、LANに限らず、他のネットワークとしてもよい。クラスタネットワーク12は、例えば、サブクラスタペアを構成するノード20間のハートビートや、サブクラスタペアのノードを変更した際のデータコピー等を行うために使用される。
クラスタストレージシステム2は、複数のノード20(ストレージノード)を備える。ノード20は、例えば、物理的な計算機であってもよい。ノード20は、コントロールプレーン30と、データプレーン40とを含む。
コントロールプレーン30は、複数のノード20をまたがって構成されている仮想的な単一ストレージシステム(クラスタストレージシステム)を制御する制御部である。コントロールプレーン30は、ノード20のハードウェアや、データプレーン40の動作状態を監視・診断しながら構成を管理する。コントロールプレーン30は、例えば、仮想計算機(VM)により構成されてもよく、コンテナにより構成されてもよい。
コントロールプレーン30は、ノードコントローラ31と、クラスタコントローラ32と、コーディネーションサービス部33と、構成データベース34とを備える。なお、クラスタコントローラ32は、各ノード20において実行可能な機能を有するが、リーダとなるノード20(リーダノード)のみで機能が活性化される。ノードコントローラ31と、クラスタコントローラ32と、コーディネーションサービス部33とは、ノード20のプロセッサがメモリに格納されているプログラム(データ管理制御プログラム)を実行することにより構成される。
クラスタコントローラ32は、各ノード20のノードコントローラ31からコーディネーションサービス部33を介して通知される監視情報を参照し、クラスタストレージシステム2の全体の状態を把握し、各ノード20のノードコントローラ31を介して各ノード20の構成を制御する。また、クラスタコントローラ32は、構成データベース34の後述する各管理表35〜37について参照・更新等を行う。
ノードコントローラ31は、各ノード20に独立して設けられており、自身のノード30のデータプレーン40の状態を監視・制御する。例えば、ノードコントローラ31は、コーディネーションサービス部33を介して、クラスタコントローラ32(リーダノードのクラスタコントローラ32)にノード20の監視情報を通知する。また、ノードコントローラ31は、クラスタコントローラ32の要求に従って、データプレーン40の構成を設定する。
コーディネーションサービス部33は、ノード20をまたがってクラスタストレージシステム2の管理を行う。具体的には、コーディネーションサービス部33は、ノード20間の接続状態を監視(生存監視)し、ノードコントローラ31との間での通知を行う。コーディネーションサービス部33は、クラスタ構築時、障害発生時、障害復旧時においてリーダノードを決定する処理(リーダ選出処理)を実行する。
構成データベース34は、クラスタ全体で共有する必要がある構成情報や監視情報を保持し、これらの情報を、他のコンポーネント(他のノード、データプレーン等)がノードをまたがってアクセス可能とする。構成データベース34は、リーダノードのみで活性化する。なお、構成データベース34のレプリカを他の複数のノードに格納するようにして冗長性を確保するようにしてもよい。
構成データベース34は、ノード管理表35と、ボリューム管理表36と、サブクラスタ構成管理表37とを含む。構成データベース34は、リーダノードのクラスタコントローラ32から参照・更新される。ノード管理表35、ボリューム管理表36、及びサブクラスタ構成管理表37の詳細な構成については後述する。
データプレーン40は、ノード20で管理しているボリュームに格納されているユーザデータのリード/ライト処理(I/O処理)の実行を制御する。データプレーン40は、仮想計算機(VM)により構成されてもよく、コンテナにより構成されてもよい。
データプレーン40は、ターゲット機能部41と、サブクラスタ管理機能部42と、プロテクション機能部43と、構成データベースキャッシュ44と、1以上のボリューム50とを含む。ターゲット機能部41と、サブクラスタ管理機能部42と、プロテクション機能部43とは、ノード20のプロセッサがメモリに格納されているプログラム(データ管理制御プログラム)を実行することにより構成される。
ボリューム50は、ユーザデータを格納する。ボリューム50は、ノード20の図示しない物理ストレージデバイスに格納されている。本実施形態では、複数のノード20のグループ(本実施形態では、2つのノード)で、或るボリューム50を同期させて管理している。本実施形態では、或るボリューム50を同期させて管理するノードのグループ(例えば、ペア)をサブクラスタ60(サブクラスタペア、サブクラスタグループ)という。このサブクラスタ60のノード20により同期対象とするボリューム50のペアを、ボリュームペア(ボリュームグループ)という。
ターゲット機能部41は、iSCSIやFC(Fibre Channel)等のインターフェースにおけるターゲット機能を有する。ターゲット機能部41は、クライアント装置10と、サブクラスタペアのボリュームを提供する物理ストレージデバイスとの間でのSCSIコマンドの転送を行う。本実施形態では、ターゲット機能部41は、コントロールプレーン30の構成データベース34にアクセスせずに、データプレーン40にキャッシュされた構成データベースキャッシュ44を参照してデータ転送先のノード20を決定する。
サブクラスタ管理機能部42は、シンプロビジョニング、ストレージ階層化、スナップショット、レプリケーション等のサブクラスタ60に関するデータサービスを制御する。サブクラスタ管理機能部42は、各データサービスにおける構成情報を、サブクラスタ毎に固有に管理する。なお、サブクラスタ60を構成するボリュームを格納するノード同士では、このサブクラスタ60を構成するボリューム50については、同じ構成情報が管理される。サブクラスタ管理機能部42は、サブクラスタ60を構成するノード20のサブクラスタ管理機能部42と連携して、コントロールプレーン30を介さずに、各ノード20の生存状況をハートビートで確認をする。なお、正常時には、サブクラスタ60の一方のノード20のボリューム50がactive状態として動作し、他方のノード20のボリューム50がstanby状態として動作する。
プロテクション機能部43は、サブクラスタ管理機能部42と、物理ストレージデバイスとの間における、ノード20をまたがったユーザデータの読み書き処理及びユーザデータ保護を行う。本実施形態では、プロテクション機能部43は、サブクラスタペア間でボリュームのデータを冗長化することにより、ノード障害等が発生した場合におけるボリュームのデータの消失を防止する。プロテクション機能部43は、構成データベースキャッシュ44を参照して、データ転送先のノード20の物理ストレージデバイスを決定する。
構成データベースキャッシュ44は、構成データベース34に格納されたノード管理表35、ボリューム管理表36、サブクラスタ構成管理表37のコピーデータを格納する。構成データベースキャッシュ44に対しては、例えば、クラスタ構築時(データプレーン40の各コンポーネントのプロセス起動時)、又はノードコントローラ31から構成要求があった場合に、クラスタコントローラ32が構成データベース34を参照して、各ノード20のノードコントローラ31経由でコピーデータが格納される。なお。構成データベースキャッシュ44は、データプレーン40のコンポーネントが参照できる場所(ノード20のローカルのシステムメモリ等)に設けてもよい。構成データベースキャッシュ44のコピーデータは、ノードコントローラ31からの構成設定指示があるごとに更新される。
図2は、一実施形態に係るサブクラスタペアを説明する図である。
図2に示すクラスタストレージシステム2においては、ノード(Node)#0とノード#1とでサブクラスタペア#1が構成され、ノード#1とノード#2とでサブクラスタペア#2が構成され、ノード#2とノード#3とでサブクラスタペア#3が構成され、ノード#3とノード#4とでサブクラスタペア#4が構成されている。クラスタストレージシステム2が正常時においては、サブクラスタペア#1のノード#0とノード#1とで管理対象のボリューム50のデータが同期され、サブクラスタペア#2のノード#1とノード#2とで管理対象のボリューム50のデータが同期され、サブクラスタペア#3のノード#2とノード#3とで管理対象のボリューム50のデータが同期され、サブクラスタペア#4のノード#3とノード#4とで管理対象のボリューム50のデータが同期されている。
したがって、サブクラスタペア#1のボリューム50のデータは、ノード#0とノード#1のいずれかから取得することができ、同様に、サブクラスタペア#2のボリューム50のデータは、ノード#1とノード#2のいずれかから取得することができ、サブクラスタペア#3のボリューム50のデータは、ノード#2とノード#3のいずれかから取得することができ、サブクラスタペア#4のボリューム50のデータは、ノード#3とノード#4のいずれかから取得することができる。
図3は、一実施形態に係るノード管理表の構成図である。
ノード管理表35は、各ノード20毎のエントリを格納する。ノード管理表35の各エントリは、ノードID35aと、クラスタネットワークIPアドレス35bと、パブリックネットワークIPアドレス35cと、ノード状態35dとのフィールドを含む。
ノードID35aには、エントリに対応するノード20のID(識別子)が格納される。クラスタネットワークIPアドレス35bには、エントリに対応するノード20のクラスタネットワーク12におけるIPアドレス(クラスタネットワークIPアドレス)が格納される。パブリックネットワークIPアドレス35cには、エントリに対応するノード20のパブリックネットワーク11におけるIPアドレス(パブリックネットワークIPアドレス)が格納される。ノード状態35dには、エントリに対応するノード20の動作状態が格納される。
図4は、一実施形態に係るボリューム管理表の構成図である。
ボリューム管理表36は、各ボリューム50毎のエントリを格納する。ボリューム管理表36のエントリは、ボリュームID36aと、サブクラスタID36bとのフィールドを含む。ボリュームID36aには、エントリに対応するボリューム50のID(ボリュームID)が格納される。なお、本実施形態では、同一のサブクラスタ60に属するボリューム50のボリュームIDは同一としている。サブクラスタID36bには、エントリに対応するボリューム50が属する(管理される)サブクラスタ60のID(サブクラスタID)が格納される。
図5は、一実施形態に係るサブクラスタ構成管理表の構成図である。
サブクラスタ構成管理表37は、各サブクラスタ60の構成に関するエントリを格納する。サブクラスタ構成管理表37のエントリは、サブクラスタID37aと、プライマリノードID37bと、セカンダリノードID37cと、サブクラスタ状態37dとのフィールドを含む。
サブクラスタID37aには、エントリに対応するサブクラスタ60のID(サブクラスタID)が格納される。プライマリノードID37bには、エントリに対応するサブクラスタ60におけるプライマリボリューム(正ボリューム)を格納するノードのID(プライマリノードID)が格納される。セカンダリノードID37cには、セカンダリボリューム(副ボリューム)を格納するノードのID(セカンダリノードID)が格納される。サブクラスタ状態37dには、サブクラスタ60の状態(サブクラスタ状態)が格納される。サブクラスタ状態としては、サブクラスタ60のプライマリノードのボリューム50と、セカンダリノードのボリューム50とでと同期がとれていることを示すActive、サブクラスタ60のプライマリノードのボリューム50はアクセス可能であるが、セカンダリノードのボリューム50との同期がとれていないことを示すActive−Down、サブクラスタ60のプライマリノードのボリューム50がアクセス可能でないが、セカンダリノードのボリューム50がアクセス可能であることを示すFailover(フェイルオーバー)、サブクラスタ60の状態を把握することができないことを示すUnknownがある。
次に、クラスタストレージシステム2の各ノード20によるノード種別認識及びリーダノード決定処理の動作について説明する。
図6は、一実施形態に係るノード種別認識及びリーダ選出処理のフローチャートである。
ノード種別認識及びリーダ選出処理は、クラスタストレージシステム2を動作させる際に各ノード20において実行される。
まず、ノード20のコーディネーションサービス部33は、他のノード20のコーディネーションサービス部33と連携して、クラスタストレージシステム2の各ノード20の順番付けを行う(S11)。なお、ノード20の順番付けについては、例えば、予めノードID順や、ノードのIPアドレス順としてもよい。本実施形態では、例えば、ノードID順としている。なお、ノード20の順番付けが予め設定されている場合には、ステップS11を実行しなくてもよい。
次いで、コーディネーションサービス部33は、クラスタネットワーク12にネットワーク障害が発生したか否かを判定する(S12)。この結果、ネットワーク障害が発生していない場合(S12:No)には、コーディネーションサービス部33は、処理をステップS12に進める。
一方、ネットワーク障害が発生している場合(S12:Yes)には、コーディネーションサービス部33は、自身のノード20をリーダとして投票する(S13)。具体的には、コーディネーションサービス部33は、クラスタネットワーク12に自身のノード20をリーダとする投票(自身のノード20の番号を含む投票)をブロードキャストする(S13)。
次いで、コーディネーションサービス部33は、新しく選出されたリーダノード(代表ノード:新リーダノード)から投票処理完了通知を受信したか否かを判定する(S14)。この結果、新リーダノードから投票処理完了通知を受信していない場合(S14:No)には、コーディネーションサービス部33は、処理をステップS15に進める。
一方、新リーダノードから投票処理完了通知を受信した場合(S14:Yes)には、自身のノード20が多数派(最大ストレージノードグループ)に属するノード(多数派ノード)であることを認識し(S17)、処理を終了する。
ステップS15では、コーディネーションサービス部33は、クラスタストレージシステム2の全体のノード20の数(全体数)の過半数から自身のノード20をリーダとする投票を取得したか否かを判定し、この結果、全体数の過半数から自身のノード20をリーダとする投票を取得した場合(S15:Yes)には、自身のノード20が新リーダノードであることを意味しているので、自身のノード20が新リーダノードであることを認識し、投票を行った各ノード20に対して、投票処理完了通知を送信し(S16)、自身のノード20が多数派ノードであることを認識し(S17)、処理を終了する。
一方、全体数の過半数から自身のノード20をリーダとする投票を取得していない場合(S15:No)には、コーディネーションサービス部33は、自身が投票しているノードの番号よりも若い番号の投票を他のノード20から受信したか否かを判定し(S18)、自身が投票しているノードの番号よりも若い番号の投票を他のノード20から受信していない場合(S18:No)には、自身のノード20が少数派に属するノード(少数派ノード)であることを認識し(S20)、処理を終了する。
一方、自身が投票しているノードの番号よりも若い番号の投票を他のノード20から受信している場合(S18:Yes)には、コーディネーションサービス部33は、自身が投票しているノードの番号よりも若い番号のノード20をリーダとして再投票し(S19)、処理をステップS14に進める。
上記したノード種別認識及びリーダ選出処理によると、自身のノード20がリーダノードであるのか否か、多数派に属するのか否かを適切に把握することができる。
次に、ノード種別認識及びリーダ選出処理について具体的に説明する。
図7は、一実施形態に係るノード種別認識及びリーダ選出処理の一例を説明する図である。図8は、一実施形態に係るノード種別認識及びリーダ選出処理のラダーチャートである。
ここで、クラスタストレージシステム2は、図7に示すように、ノード#0〜ノード#4までの5つのノード20を備え、ノード#0とノード#1とでサブクラスタペア#1が構成され、ノード#1とノード#2とでサブクラスタペア#2が構成され、ノード#2とノード#3とでサブクラスタペア#3が構成され、ノード#3とノード#4とでサブクラスタペア#4が構成され、クラスタネットワーク12において、ノード#0〜ノード#2と、ノード#3及びノード#4とに分断するスプリットブレインが発生した場合を例にノード種別認識及びリーダ選出処理について説明する。なお、ノード#0〜ノード#4の番号は、#0〜#4とする。
クラスタネットワーク12において、ノード#0〜ノード#2と、ノード#3及びノード#4とに分断するネットワーク障害(スプリットブレイン)が発生した場合(図8(0))には、各ノード#0〜#4のコーディネーションサービス部33は、ネットワークの障害を検出し、自身のノード20をリーダとする投票を行う(図8(1))。この場合には、ノード#0の投票は、ノード#1及びノード#2に受信され、ノード#1の投票は、ノード#0及びノード#2に受信され、ノード#2の投票は、ノード#0及びノード#1に受信される。また、ノード#3の投票は、ノード#4に受信され、ノード#4の投票は、ノード#3に受信される(図8(2))。
この結果、自身が投票しているノード20の番号よりも若い番号(#0)の投票を受信したノード#1と、ノード#2は、若い番号(#0)を再投票し、自身が投票しているノードの番号(#4)よりも若い番号(#3)の投票を受信したノード#4は、若い番号(#3)を再投票する(図8(3))。
この再投票の結果、ノード#0のコーディネーションサービス部33は、ノード#1とノード#2から自身の番号(#0)への再投票を受信する(図8(4))と、全体数(5個)の過半数である3つの投票を得たと判定して、自身が新リーダノードと認識し、投票処理完了通知を送信し(図8(5))、自身のノード20が多数派に属すると認識する。この際、新リーダノードと認識したノード#0のコーディネーションサービス部33は、自身に対して投票した各ノード(有効ノード:多数派に属するノード20)についてのノード情報(例えば、ノード管理表35の有効ノードに対応するエントリの情報)を投票処理完了通知とともに送信する。投票処理完了通知は、クラスタネットワーク12の障害により、ノード#1とノード#2とにしか受領されない。この投票処理完了通知を受信したノード#1とノード#2とは、自身のノード20が多数派に属すると認識する。
一方、ノード#3、ノード#4においては、投票処理完了通知を受領することもなく、全体数(5個)の過半数である3つの投票を得ることもなく、自身が投票しているノードの番号よりも若い番号の投票を受信することもないので、自身が少数派に属すると認識する(図8(6))。
上記処理によると、多数派に属するノードの中から適切にリーダノードを選出(決定)することができる。また、各ノード20は、多数派に属するのか、少数派に属するのかを適切に認識することができる。
次に、クラスタネットワーク12の障害時におけるサブクラスタペアの状態について説明する。
図9は、一実施形態に係るサブクラスタペアの状態の一例を説明する図である。
クラスタネットワーク12の障害時においては、サブクラスタ60は、例えば、図9(a)に示すように、サブクラスタ60を構成する2つのノード20が多数派に属する場合と、図9(b)に示すように、サブクラスタ60を構成するノード20の一方のノード20が多数派に属し、他方のノード20が少数派に属する場合と、図9(c)に示すように、サブクラスタ60を構成する2つのノード20が少数派に属する場合とがある。
本実施形態では、図9(a)に示すように、サブクラスタ60を構成する2つのノード20が多数派に属する場合には、サブクラスタ60におけるボリューム50の同期が実行可能であるので、クライアント装置10からのI/Oを継続して処理可能の状態を継続するようにする。また、図9(c)に示すように、サブクラスタ60を構成する2つのノード20が少数派に属する場合には、サブクラスタ60におけるボリューム50の同期が実行可能であるので、クライアント装置10からのI/Oを継続して処理可能な状態を継続するようにする。
一方、図9(b)に示すように、サブクラスタ60を構成するノード20の一方のノード20が多数派に属し、他方のノード20が少数派に属する場合、すなわち、一方のボリューム50が多数派のノード20に格納され、他方のボリューム50が少数派のノード20に格納されている場合には、多数派に属するノード20がStanbyである場合には、クラスタ60の状態をActiveとするように設定する。なお、このように、サブクラスタ60の一方のボリュームが少数派のノード20に格納され、他方のボリュームが多数派のノード20に格納されている場合におけるボリュームペアを、分断ボリュームペア(分断ボリュームグループ)という。
図10は、一実施形態に係るサブクラスタペアI/O制御処理のフローチャートである。
サブクラスタペアI/O処理は、例えば、図6に示すノード種別認識及びリーダ選出処理が終了した直後に、実行される。
まず、ノード20のサブクラスタ管理機能部42は、自身のノード20が含まれるサブクラスタペアが多数派と少数派とにまたがっているか否か、すなわち、サブクラスタペアの一方のノード20が多数派に属し、他方のノード20が少数派に属しているか否かを判定する(S21)。
この結果、自身のノード20が含まれるサブクラスタペアが多数派と少数派とにまたがっていない場合(S21:No)には、サブクラスタ60のボリュームの同期を行えることを意味しているので、サブクラスタペアを構成する2つのノード20が多数派に属していても、少数派に属していても、クライアント装置10からのI/Oを継続して受け継可可能な状態を維持し(S22)、処理をステップS24に進める。
一方、自身のノード20が含まれるサブクラスタペアが多数派と少数派とにまたがっている場合(S21:Yes)には、自身のノード20が少数派である場合には、このサブクラスタペアのボリューム50に対するI/Oの受け付けを停止する一方、自身のノード20が多数派である場合には、このサブクラスタペアのボリューム50に対するI/Oの受け付けるようにする。例えば、少数派のノード20のボリューム50がActiveだった場合には、多数派のノード20のボリュームをActiveにするようにFailoverを行い(S23)、処理をステップS24に進める。
ステップS24では、サブクラスタ管理機能部42は、自身のノード20が少数派であり、クラスタ構成変更によってコントロールプレーン30へのアクセスが必要であるか否かを判定する。この結果、クラスタ構成変更によってコントロールプレーン30へのアクセスが必要でないと判定した場合(S24:No)には、サブクラスタ管理機能部42は、クライアント装置10からのI/Oを継続して受付可能とし(S25)、処理をステップS24に進める。
一方、クラスタ構成変更によってコントロールプレーン30へのアクセスが必要であると判定した場合(S24:Yes)には、サブクラスタ管理機能部42は、サブクラスタペアのボリューム50に対するI/Oの受け付けを停止し(S26)、処理を終了する。
次に、クラスタストレージシステム2におけるサブクラスタペアI/O制御処理を含む全体制御処理について説明する。
図11は、一実施形態に係るサブクラスタペアI/O制御処理を含む全体制御処理のラダーチャートである。なお、クラスタストレージシステム2は、図7に示す構成であり、動作後に図7に示すネットワーク分断が発生した場合を例に処理を説明する。
まず、クラスタストレージシステム2は、以下に示すクラスタ初期設定及びデータI/O開始処理を実行する(図11(0))。
具体的には、クラスタ初期設定時(構築時)において、初期時におけるリーダとされているノード(リーダノード)のクラスタコントローラ32は、各ノード20のノードコントローラ31からコーディネーションサービス部33にて通知された構成情報(例えば、NIC(Network Interface Card)情報、デバイス数、デバイス容量、CPUコア数等)に基づいて、最適なリソース割り当てを決定する。なお、リソース割り当てについては、サブクラスタやボリュームが特定のノード20のリソースに偏って作成されないよう、ラウンドロビン等の既知の手法で分散して配置する。
クラスタコントローラ32は、通知のあったノード20に対し順次ノードIDを付加し、ノード20のIPアドレス情報と、ノード状態(初期状態ではActive)とを含むエントリを作成して、ノード管理表35を作成する。なお、ノード20のIPアドレスは、リーダノードにDHCPサーバ機能を持たせておき、この機能によりノード20のIPアドレスを決定し、その内容をクラスタコントローラ32に通知するようにしてもよいし、管理者からのIPアドレス設定コマンドでノード20ごとのIPアドレス指定を受け付けてノードコントローラ32に通知するようにしてもよい。
また、クラスタコントローラ32は、決定したリソース割り当て(サブクラスタをどのノード20のペアで作成するかについての割り当て)に基づいて、対象の2つのノード20のノードコントローラ31にサブクラスタ構成を指示する。このとき、クラスタコントローラ32は、サブクラスタ構成管理表37にエントリが存在する場合は、各エントリと重複しないサブクラスタIDをあわせて指定する。
サブクラスタ構成の指示を受けた各ノード20のノードコントローラ31は、サブクラスタ構成が完了すると、コーディネーションサービス部33により、クラスタコントローラ32に対してサブクラスタ構成の完了を通知する。クラスタコントローラ32は、サブクラスタ構成管理表37に、作成されたサブクラスタのサブクラスタIDと、ノードID(プライマリノードID、セカンダリノードID)と、サブクラスタ状態(初期状態ではActive)とを含むエントリを追加する。
ユーザから(クライアント装置10)からボリューム50の作成コマンドが実行されると、クラスタコントローラ32は、サブクラスタ構成管理表37でサブクラスタ状態がActiveであるサブクラスタ60のうち、ボリュームを割り当てるのに最適なサブクラスタを選定する。サブクラスタ60を選定する方法としては、例えば、ボリューム管理表36において、ボリューム50の割り当てが最も少ないサブクラスタを選定する方法を用いてもよい。また、クラスタコントローラ32は、ボリューム管理表36にある既存のボリューム50とボリュームIDとが重複しないようにして、サブクラスタ構成管理表37から選定されたサブクラスタ60におけるプライマリノードIDのノード20(プライマリノード)のノードコントローラ31に対してボリューム作成を指示し、作成するボリュームIDとサブクラスタIDとを含むエントリをボリューム管理表36に追加する。
ボリューム作成指示を受けたノード20のノードコントローラ31は、データプレーン40のサブクラスタ管理機能部42と連携(必要に応じてシンプロビジョニングなどの機能の設定を実施)して、ボリューム50を作成する。さらに、ノードコントローラ31は、クラスタコントローラ32から構成データベース34のノード管理表35、サブクラスタ構成管理表37、ボリューム管理表36を受け取り、その情報を構成データベースキャッシュ44として、自身のノード20上の領域に記憶させる。プライマリノードに作成されたボリューム50は、プライマリノードのデータプレーン40のプロテクション機能部43により、構成データベースキャッシュ44のサブクラスタ構成管理表(サブクラスタ構成管理表37と同内容の表)から参照したセカンダリノードIDと、構成データベースキャッシュ44のノード管理表(ノード管理表35と同内容の表)から参照した、セカンダリノードIDと合致するノード20のクラスタネットワークIPアドレスとに基づいて、ボリューム50のレプリカをセカンダリノードに作成し、これらボリューム50を同期させる。
リーダノードのクラスタコントローラ32に対して、クライアント装置10側からクラスタ60の所定のボリュームIDのボリューム50(対象ボリューム)に対してI/O要求があると、クラスタコントローラ32は、対象のボリューム50を管理するサブクラスタ60のプライマリノードを特定して、クライアント装置10と、プライマリノードとの間のネットワーク接続を確立する。ネットワーク接続の確立には、例えば、既知の技術であるiSCSIログインリダイレクション機能を利用してもよい。具体的には、クライアント装置10からI/O要求を受けると、クラスタコントローラ32は、構成データベース34のボリューム管理表36を参照して、対象ボリューム50のオーナとなっているサブクラスタ60のサブクラスタIDを特定する。続いて、クラスタコントローラ32は、サブクラス構成管理表37を参照し、サブクラスタIDを検索キーとして、合致するエントリからプライマリノードIDを特定する。さらに、クラスタコントローラ32は、ノード管理表35を参照し、プライマリノードIDを検索キーとして、ノードIDと合致するエントリからクラスタネットワークIPアドレスを特定する。クラスタコントローラ32は、特定したクラスタネットワークIPアドレスをクライアント装置10に送信する。IPアドレスを受け取ったクライアント装置10は、そのIPアドレスに対してネットワーク接続要求を出す。ネットワーク接続要求を受け取ったノード20(すなわち、プライマリノード)のターゲット機能部41は、接続承認をクライアント装置10に通知して、クライアント装置10とのネットワーク接続を確立する。ネットワーク接続確立後、クライアント装置10は、対象ボリュームを持つプライマリノードに対してパブリックネットワーク11経由でのI/Oが可能となる。
クライアント装置10からのI/O要求を受け取ったプライマリノードのプロテクション機能部43は、ボリューム50の実データを格納すべきローカルの物理ストレージデバイスに対して、I/O要求に従って読み書きの処理(I/O処理)を実行するとともに、構成データベースキャッシュ44のサブクラスタ構成管理表から特定されるセカンダリノードIDのノード20(セカンダリノード)に対して、構成データベースキャッシュ44のノード管理表から特定されるクラスタネットワークIPアドレス宛で同一のI/O対象のデータを転送する。セカンダリノードのプロテクション機能部43は、セカンダリノードのローカルの物理ストレージデバイスにデータを保存する。これにより、データが同期されて冗長性が確保される。
次に、クラスタネットワーク12においてネットワーク分断が発生した場合には、クラスタストレージシステム2は、以下に示すリーダ選出処理及び構成データベース情報展開処理を実行する(図11(1))。
クラスタネットワーク12においてネットワーク分断が発生して、サブクラスタペア間のハードビートが途切れていることをノード20のノードコントローラ31が検知すると、ノードコントローラ31は、コーディネーションサービス部33により、リーダノードに監視情報を通知する。このとき、リーダノードはコーディネーションサービス部33によるリーダ選出処理を開始する。リーダ選出処理により新しいリーダが決定すると、新しいリーダノードのコーディネーションサービス部33は、クラスタコントローラ32と、構成データベース34とを活性化する。
構成データベース34の情報引継ぎに関しては、例えば下記の2つの手法がある。
・あらかじめクラスタ正常動作時から、構成データベース34の情報を複数の他ノード20に複製し、同期しておく。ネットワーク障害によるリーダ選出処理により、新しいリーダとなったノード20は、クラスタの各ノード20に対して、構成データベース34の情報の要求をブロードキャストし、構成データベース34の複製を保持しているノード20から構成データベース34の情報を取得する。なお、新しいリーダノードとして選出されるノードを、構成データベース34の複製を持っているノード20に限定した場合には、新しいリーダノードはすでに構成データベース34を保持していることになるので、構成データベース34の情報の要求は不要である。なお、構成データベース34を複製する数は、クラスタ内の全ノード20の過半数あれば、ネットワーク分断が発生しても、必ず多数派に含まれるノードにリーダ候補(構成データベース34の複製を持っているノード20)が含まれることとなる。また、例えば、ノード20を搭載するラックやデータセンター単位での電源境界を考慮して、異なる電源を利用するノード20に対して構成データベース34の複製を保持させておくことで、実使用上高い耐障害性を維持しつつ構成データベース34の複製のオーバーヘッドを減らすことができる。
・リーダノードはクラスタの任意のノード20がなり得、且つ新たなリーダノードとそれまでのリーダノードとが疎通可能な場合は、それまでのリーダノードに保存されていた構成データベース34の情報をそのままコピーして新たなリーダノードが引き継ぐようにする。もし、新たなリーダノードとそれまでのリーダノードが疎通不可能な場合は、新たなリーダノードは、自身の構成データベースキャッシュ44の情報をクラスタの構成データベース34の情報として一旦設定した上で、後述の管理表の更新処理を実施することで、最新の情報とする。
・あらかじめクラスタ正常動作時から、構成データベース34の情報を複数の他ノード20に複製し、同期しておく。ネットワーク障害によるリーダ選出処理により、新しいリーダとなったノード20は、クラスタの各ノード20に対して、構成データベース34の情報の要求をブロードキャストし、構成データベース34の複製を保持しているノード20から構成データベース34の情報を取得する。なお、新しいリーダノードとして選出されるノードを、構成データベース34の複製を持っているノード20に限定した場合には、新しいリーダノードはすでに構成データベース34を保持していることになるので、構成データベース34の情報の要求は不要である。なお、構成データベース34を複製する数は、クラスタ内の全ノード20の過半数あれば、ネットワーク分断が発生しても、必ず多数派に含まれるノードにリーダ候補(構成データベース34の複製を持っているノード20)が含まれることとなる。また、例えば、ノード20を搭載するラックやデータセンター単位での電源境界を考慮して、異なる電源を利用するノード20に対して構成データベース34の複製を保持させておくことで、実使用上高い耐障害性を維持しつつ構成データベース34の複製のオーバーヘッドを減らすことができる。
・リーダノードはクラスタの任意のノード20がなり得、且つ新たなリーダノードとそれまでのリーダノードとが疎通可能な場合は、それまでのリーダノードに保存されていた構成データベース34の情報をそのままコピーして新たなリーダノードが引き継ぐようにする。もし、新たなリーダノードとそれまでのリーダノードが疎通不可能な場合は、新たなリーダノードは、自身の構成データベースキャッシュ44の情報をクラスタの構成データベース34の情報として一旦設定した上で、後述の管理表の更新処理を実施することで、最新の情報とする。
新たなリーダノードのクラスタコントローラ32は、構成データベース34のノード管理表35において、投票してきたノード20以外のノード20のエントリのノード状態35dをActiveからDownに変更する。
また、クラスタコントローラ32は、サブクラスタ構成管理表37を参照し、投票してこなかったノード(ネットワーク分断により投票が到達しなかったノード)のノードIDを検索キーとして、プライマリノードIDもしくはセカンダリノードIDと合致するエントリを検索する。プライマリノードIDのノード20からは投票があり、セカンダリノードIDのノード20からは投票がなかった条件に合致するエントリが見つかった場合は、クラスタコントローラ32は、そのエントリのサブクラスタ状態をActive−Downに変更する。また、プライマリノードIDのノードからは投票がなく、セカンダリノードIDのノードからは投票があった条件に合致するエントリが見つかった場合は、クラスタコントローラ32は、そのエントリのサブクラスタ状態37dをFailoverに変更する。また、プライマリノードIDのノード20と、セカンダリノードIDのノード20のどちらからも投票がなかった条件に合致するエントリが見つかった場合は、クラスタコントローラ32は、そのエントリのサブクラスタ状態37dをUnknownに変更する。なお、ネットワーク分断時には、ボリューム管理表36の更新は発生しない。
構成データベース34の各管理表の更新が完了すると、リーダノードのクラスタコントローラ32は、投票があった多数派のノード20のノードコントローラ31経由で、各ノード20の構成データベースキャッシュ44の更新を指示する。これにより、多数派のノード20においては、最新の状態の構成データベース34と同じ情報がキャッシュされることとなる。
次に、クラスタストレージシステム2は、以下に示すサブクラスタペア#3のFailover処理を実行し(図11(2))、コントロールプレーン20停止後もサブクラスタペア#4へのI/Oを継続する処理を実行する(図11(3))。
具体的には、リーダノードのクラスタコントローラ32は、サブクラスタ構成管理表37でサブクラスタ状態37dをFailoverに変更したエントリのセカンダリノードIDのノード20のノードコントローラ31に対して、Failover処理の実行を指示する。Failover処理の実行指示を受けたノード20のノードコントローラ31は、クライアント装置10からのネットワーク再接続要求を待つ。
ここで、I/Oを停止する対象となるボリューム50を持つプライマリノードにおいては、ターゲット機能部41が、ネットワーク分断時のリーダ選出処理で投票完了通知を受け取らずに、自身が少数派に属するノードであると認識した時点で、クライアント装置10からのI/O受付を停止するか否かの判断処理を実行する。少数派に属するプライマリノードのターゲット機能部41は、構成データベースキャッシュ44のノード管理表とサブクラスタ構成管理表を参照して、I/O転送先のセカンダリノードに到達可能か否かを確認する。
セカンダリノードに到達可能な場合は、プライマリノードのターゲット機能部41は、クライアント装置10からのI/Oを停止させずに、セカンダリノードへのI/O転送(同期)も継続する。図11における、少数派のノード20のみで構成されるサブクラスタペア#4のボリュームがこのケースに相当する。このサブクラスタペア#4のボリュームペアが少数側ボリュームグループに相当する。
一方、セカンダリノードに到達できない場合は、ターゲット機能部41は、クライアント装置10からのI/O受付、及びセカンダリノードへのI/O転送を停止する。図11におけるサブクラスタペア#3のボリュームがこのケースに相当する。I/O受付を停止されたクライアント装置10は、パブリックネットワーク11経由でクラスタコントローラ32に対して、ネットワーク再接続要求出す。ここで、クライアント装置10がクラスタコントローラ32に対してネットワーク再接続要求を送信できるようにするためには、例えば、予め決められた代表のIPアドレスに対してネットワーク再接続要求を送信すると、その代表IPアドレスに設定されたリーダノードがネットワーク再接続要求を受信するようにしてもよく、或いは、代表IPアドレスが設定されている装置がリーダノードからリーダノードのIPアドレスを取得しておき、クライアント装置10から代表IPアドレスに対してネットワーク再接続要求が来た場合に、リーダノードに対してリダイレクトしてネットワーク再接続要求をリーダノードが受信できるようにしてもよい。
ネットワーク再接続要求を受信したリーダノードのクラスタコントローラ32は、構成データベース34のボリューム管理表36およびサブクラスタ構成管理表37を参照して、受信したネットワーク再接続要求が、サブクラスタ状態37dをFailoverに設定したサブクラスタが管理するボリューム(この例では、サブクラスタペア#3のボリューム)への接続要求であることを確認した場合、サブクラス構成管理表37のこのサブクラスタに対応するエントリのセカンダリノードIDを検索キーとして、ノード管理表35からセカンダリノードのパブリックネットワークIPアドレスを特定し、クライアント装置10にパブリックネットワークIPアドレスを送信する。
パブリックネットワークIPアドレスを受信したクライアント装置10は、そのIPアドレスに対してネットワーク接続要求を出す。ネットワーク接続要求を受け取ったノード20のターゲット機能部41は、接続承認をクライアント装置10に通知して、クライアント装置10とのネットワーク接続を確立する。ネットワーク接続確立後、クライアント装置10は、対象ボリュームを持つノード20に対してパブリックネットワーク11経由でI/Oを開始可能となる。
なお、クライアント装置10からのI/Oを受けていたプライマリノードは、ネットワーク分断時のリーダ選出処理で投票完了通知を新たなリーダノードから受信して、自身が多数派に属するノードであると認識した場合、プライマリノードのローカルの物理ストレージデバイスへの読み書きを停止させない。ただし、更新された構成データベースキャッシュ44のサブクラスタ構成管理表において、サブクラスタ状態がActive−Downとなっている場合、このプライマリノードのプロテクション機能部43は、セカンダリノードへのI/O転送(すなわち同期)を停止させる。
以降において、クラスタストレージシステム2は、以下に示すクラスタ構成変更によるサブクラスタペア#3へのI/O停止処理を実行する(図11(4))。
具体的には、ノード削除、ストレージデバイス交換、ネットワークスイッチ停止、そのほか多重障害発生等、クラスタがネットワーク分断から復旧していない状態におけるクラスタ構成の変更が発生したことにより、少数派に属するノード間のプライマリノードのプロテクション機能部43によるセカンダリノードへのI/O転送に失敗した場合、この時点でプライマリノードのターゲット機能部43は、クライアント装置10からのI/O受付を停止する。I/O受付を停止されたクライアント装置10は、パブリックネットワーク11経由でクラスタコントローラ32に対して、ネットワーク再接続要求を出す。
ネットワーク再接続要求を受信したクラスタコントローラ32は、構成データベース34のボリューム管理表36およびサブクラスタ構成管理表37を参照して、クライアント装置10から受け付けたネットワーク再接続要求が、サブクラスタ状態37dをUnknownにしたサブラスタが管理するボリュームへの接続要求であることを確認した場合、少数派に属するノード間でボリュームペアの同期ができなくなったと判断し、接続拒否をクライアント装置10に通知して、クライアント装置10にネットワーク接続失敗を認識させる。
次に、クラスタストレージシステム2における復旧時処理について説明する。
図12は、一実施形態に係る復旧時処理のフローチャートである。
クラスタコントローラ32は、クラスタネットワーク12におけるネットワーク障害から復旧したか否かを判定し(S31)、ネットワーク障害から復旧していない場合(S31:No)には、処理をステップS31に進める一方、ネットワーク障害から復旧している場合(S31:Yes)には、少数派だった各ノード20に対して構成データベース34の情報を展開(送信)する(S32)。
次いで、クラスタコントローラ32は、構成データベース34のサブクラスタ構成管理表37を参照して、サブクラスタ状態37dがFailoverに設定されたサブクラスタがあるか否かを判定する(S33)。
この結果、Failoverに設定されたサブクラスタがない場合(S33:No)には、クラスタコントローラ32は、復旧時処理を終了する。一方、Failoverに設定されたサブクラスタがある場合(S33:Yes)には、クラスタコントローラ32は、Failoverに設定されているサブクラスタペアのFailback(フェールバック)を実行する(S34)。具体的にはクラスタコントローラ32は、サブクラスタ構成管理表37のFailoverに設定されているサブクラスタペアのエントリのプライマリノードIDのノード20にサブクラスタに対応するボリュームへのI/Oを受付可能に設定する要求を送信するとともに、セカンダリノードIDのノード20にサブクラスタに対応するボリュームへのI/Oを停止する要求を送信し、対応するエントリのサブクラスタ状態37dをActive−Stanbyに設定する。
図13は、一実施形態に係る復旧時処理の一例を説明する図である。
復旧時処理によるとネットワーク障害から復旧すると、少数派に属するノード20が、多数派と疎通可能な状態となり、少数派に属するノード20(図13のノード#3、ノード#4)の構成データベースキャッシュ44の内容が構成データベース34の最新の内容に更新される。その後、少数派のノード20と、多数派のノード20とで構成されるサブクラスタ(サブクラスタ#3)に対して、Failbackが実行され、サブクラスタペアのエントリのプライマリノードIDのノード20がサブクラスタに対応するボリュームへのI/Oを受付可能に設定され、セカンダリノードIDのノード20がサブクラスタに対応するボリュームへのI/Oを停止される。
図14は、一実施形態に係る復旧時処理のラダーチャートである。なお、クラスタストレージシステム2は、図11に示す処理(3)の直後の状態となっている場合を例に処理を説明する。
クラスタストレージシステム2は、データI/Oを継続している(図14(0))。この状態においては、少数派に属するプライマリノードとセカンダリノードとの間で互いに疎通できている場合は、プライマリノードのターゲット機能部41は、クライアント装置10からのI/Oを停止させずに、セカンダリノードへのI/O転送も継続している。サブクラスタペア#4のボリュームがこのケースに対応している。
この後、クラスタネットワーク12がネットワーク障害から復旧すると、少数派のノード20のノードコントローラ31は、コーディネーションサービス機能部32により、リーダノードに対して生存通知ができるようになる。このとき、リーダノードのクラスタコントローラ32は通知のあったノード20のノードコントローラ31に対して構成データベース34の情報を展開し、このノード20の構成データベースキャッシュ44を更新させる(図14(1))。
続いて、クラスタコントローラ32は、構成データベース34のノード管理表35において、ノード状態35dがDownとなっているノード20について、生存通知を確認できたノード20については、ノード状態35dをDownからActiveに変更する。また、クラスタコントローラ32は、構成データベース34のサブクラスタ構成管理表37において、サブクラスタ状態37dがActive−Down、Unknownとなっているサブクラスタについて、プライマリノードのノードコントローラ31に対してサブクラスタ状態の更新と通知を指示する。また、クラスタコントローラ32は、構成データベース34のサブクラスタ構成管理表37において、サブクラスタ状態37dがFailoverとなっているサブクラスタについて、セカンダリノードのノードコントローラ31に対してサブクラスタ状態の更新と通知を指示する。
指示を受けたノード20のノードコントローラ31は、更新された構成データベースキャッシュ44のサブクラスタ構成管理表から、自身のノード20とサブクラスタを構成しているノードのノードIDを特定し、構成データベースキャッシュ44のノード管理表から、クラスタネットワークIPアドレスを特定し、そのIPアドレスを用いてサブクラスタを構成する他のノード20に対して応答確認を行う。
応答確認を行ったノード20から応答がない場合は、ノードコントローラ31は、その結果をリーダノードに通知する。リーダノードは、構成データベース34のサブクラスタ構成管理表37の対象のサブクラスタのエントリのサブクラスタ状態37dがUnknownであれば、Active−downに変更し、各ノード20のノードコントローラ31経由で、構成データベースキャッシュ44を更新する。
一方、応答確認を行ったノード20から応答があった場合は、ノードコントローラ31は、その結果をリーダノードに通知する。リーダノードのクラスタコントローラ32は、構成データベース34のサブクラスタ構成管理表37の対象のサブクラスタのエントリのサブクラスタ状態37dを確認する。
この結果、サブクラスタ状態37dがUnknownであれば、クラスタコントローラ32は、サブクラスタ状態37dをActiveに変更し、各ノード20のノードコントローラ31経由で、構成データベースキャッシュ44を更新する。
また、サブクラスタ状態37dがActive−Downであれば、クラスタコントローラ32は、プライマリノードのノードコントローラ31にボリュームペアの同期を指示する。指示を受けたプライマリノードのノードコントローラ31は、停止していたプロテクション機能部43の操作を再開し、ローカルの物理ストレージデバイスにあるボリュームの実データをセカンダリノード上の物理ストレージデバイスにコピーして同期させる。ボリュームの同期が完了するとプライマリノードのノードコントローラ31は、リーダノードに同期完了を通知する。通知を受けるとリーダノードのクラスタコントローラ32は、構成データベース34のサブクラスタ構成管理表37の対象のサブクラスタのエントリのサブクラスタ状態37dをActive−DownからActiveに変更し、各ノード20のノードコントローラ31経由で、構成データベースキャッシュ44を更新する。
また、サブクラスタ状態37dがFailoverであれば、クラスタコントローラ32は、セカンダリノードのノードコントローラ31にボリュームペアの同期とFailbackを指示する。指示を受けたセカンダリノードのノードコントローラ31は、停止していたプロテクション機能部43の動作を再開し、ローカルの物理ストレージデバイスにあるボリュームの実データをプライマリノード上の物理ストレージデバイスにコピーして同期させる。また、同期が完了するとセカンダリノードは、クライアント装置10からのI/O受付を停止する。
I/O受付を停止されたクライアント装置10は、パブリックネットワーク11経由でクラスタコントローラ32に対して、ネットワーク再接続要求を出す。クラスタコントローラ32は、構成データベース34のボリューム管理表36及びサブクラスタ構成管理表37を参照して、クライアント装置10から受け付けたネットワーク再接続要求が、サブクラスタ状態37dがFailoverであるサブクラスタが管理するボリューム(図14の例では、サブクラスタペア#3のボリューム)への接続要求であることを確認した場合、サブクラスタ構成管理表37のこのサブクラスタのエントリのプライマリノードIDを検索キーとして、ノード管理表35からプライマリノードのクラスタネットワークIPアドレスを特定し、クライアント装置10にIPアドレスを送信する。
IPアドレスを受け取ったクライアント装置10は、受信したIPアドレスに対してネットワーク接続要求を出す。ネットワーク接続要求を受け取ったノード20のターゲット機能部41は、接続承認をクライアント装置10に通知してクライアント装置10とのネットワーク接続を確立する。ネットワーク接続確立後、クライアント装置10は、対象ボリュームを持つプライマリノードに対してパブリックネットワーク11経由でI/Oを開始可能となる。これにより、Failbackが完了し、各ノード20をネットワーク障害発生の前の設定に従った役割を担う状態とすることができる。ネットワーク接続が確立し、Failbackが完了すると、プライマリノードはリーダノードにFailbackの完了を通知する。通知を受けるとリーダノードのクラスタコントローラ32は、構成データベース34のサブクラスタ構成管理表37の対象のエントリのサブクラスタ状態37dをFailoverからActiveに変更し、各ノード20のノードコントローラ31経由で、構成データベースキャッシュ44を更新する。これにより、クラスタストレージシステム2をネットワーク障害の発生前の状態に復旧することができる。
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
例えば、上記実施形態において、ネットワーク障害により、サブクラスタのボリュームペアのノード20が多数派と、少数派とに分断されて、多数派のノード20(第1ストレージノードの一例)のボリュームにFailoverする処理を実行した場合に、多数派の他のノード20(第2ストレージノードの一例)に、そのボリュームをコピーし、そのノード20のボリュームとの間でボリュームペアを構成して同期するようにしてもよい。このようにすると、ネットワーク障害発生時においても、ボリュームの冗長性を適切に確保することができる。
また、上記実施形態では、サブクラスタとして、2つのノードから構成されるサブクラスタペアを例に挙げていたが、本発明はこれに限られず、サブクラスタを3つ以上のノード20で構成するようにしてもよい。すなわち、3つ以上のボリュームを同期させて管理するようにしてもよい。
また、上記実施形態において、リーダノードを決定する方法は上記した例に限られず、任意の方法を用いてもよく、例えば、多数派のノードの中からランダムに決定するようにしてもよい。
また、上記実施形態において、ノード20のプロセッサが行っていた処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア(例えば可搬型の記憶メディア)であってもよい。
1…計算機システム、2…クラスタストレージシステム、10…クライアント装置、11…パブリックネットワーク、12…クラスタネットワーク、20…ノード、30…コントロールプレーン、31…ノードコントローラ、32…クラスタコントローラ、33…コーディネーションサービス部、34…構成データベース、35…ノード管理表、36…ボリューム管理表、37…サブクラスタ構成管理表、40…データプレーン、41…ターゲット機能部、42…サブクラスタ管理機能部、43…プロテクション機能部、44…構成データベースキャッシュ、50…ボリューム、60…サブクラスタ
Claims (10)
- クライアント装置で利用するデータを格納する複数のストレージノードと、前記クライアント装置と前記ストレージノードとを接続する第1ネットワークと異なる、前記複数のストレージノードを相互に通信可能に接続する第2ネットワークと、を備えるクラスタストレージシステムであって、
それぞれの前記ストレージノードは、ボリュームを単位として前記データを格納可能であり、
複数の前記ストレージノードに格納されている複数のボリュームにより構成されるボリュームグループを複数有し、
前記ボリュームグループの各ボリュームを格納する複数のストレージノードは、前記第2ネットワークを介して同一のボリュームグループのボリュームを同期させる
クラスタストレージシステム。 - 前記複数のストレージノードの少なくともいずれか1つのストレージノードは、
前記第2ネットワークにおける前記複数のストレージノード間の通信が分断されたか否かを判定し、
前記第2ネットワークにおける通信が分断されたと判定した場合に、前記ボリュームグループが、前記ボリュームグループ中のボリュームの同期が実行不可能となった分断ボリュームグループであるか否かを判定し、
前記分断ボリュームグループに属するいずれか1つのボリュームに対する前記クライアント装置からのアクセスを実行可能な状態とする
請求項1に記載のクラスタストレージシステム。 - 複数のストレージノードは、
前記第2ネットワークにおける前記複数のストレージノード間の通信が分断されたと判定された場合に、自身が前記複数のストレージノードの中の前記第2ネットワークを介して相互に通信可能なストレージノードの数が最大となる最大ストレージノードグループに属するか否かを判定し、
前記最大ストレージノードグループに属するストレージノードの中の代表となるストレージノードである代表ストレージノードは、前記最大ストレージノードグループのストレージノードに格納されている、前記分断ボリュームグループに属するボリュームを前記クライアント装置からのアクセスを実行可能な状態とする
請求項2に記載のクラスタストレージシステム。 - 前記代表ストレージノードは、
前記最大ストレージノードグループの前記分断ボリュームグループに属するボリュームを格納する第1ストレージノード以外の第2ストレージノードに、前記分断ボリュームグループに属するボリュームをコピーし、
前記第1ストレージノードのボリュームと、前記第2ストレージノードのボリュームとを含む新たなボリュームグループを構成し、
前記第1ストレージノードと前記第2ストレージノードとは、前記新たなボリュームグループのボリュームを同期させる
請求項3記載のクラスタストレージシステム。 - 前記代表ストレージノードは、
前記第2ネットワークにおける前記複数のストレージノード間の通信の分断の解消を検出し、
前記通信の分断の解消を検出した場合に、前記クライアント装置からアクセス可能に設定された前記分断ボリュームグループのボリュームの内容を、前記分断ボリュームグループの他のボリュームに反映させ、
前記分断ボリュームグループペアの各ボリュームを格納する複数のストレージノードは、前記各ボリュームの同期を開始する
請求項3又は請求項4に記載のクラスタストレージシステム。 - 前記代表ストレージノードは、
前記分断ボリュームグループの複数のボリュームの役割を、前記第2ネットワークにおける前記複数のストレージノード間の通信の分断の発生前の役割に設定する
請求項5に記載のクラスタストレージシステム。 - 前記ボリュームグループが、前記最大ストレージノードグループに属しておらず、前記第2ネットワークを介して通信可能な複数のストレージノードのみに格納されているボリュームで構成されている少数側ボリュームグループである場合に、前記少数側ボリュームグループのボリュームを格納する複数のストレージノードのいずれかのストレージノードは、前記クライアント装置からのアクセスを実行可能な状態とし、
以降において、前記少数側ボリュームグループのボリュームの同期が不可能になった場合に、前記クライアント装置からの前記ボリュームへのアクセスを実行不能な状態とする
請求項3から請求項6のいずれか一項に記載のクラスタストレージシステム。 - 前記複数のストレージノードは、前記第2ネットワークを介して通信可能な他のストレージノードの数に基づいて、最大ストレージノードグループに属するか否かを判定し、自身が最大ストレージノードグループに属しており、且つ自身が最も優先度が高いノードである場合に、自身を代表ストレージノードと決定する
請求項3から請求項7のいずれか一項に記載のクラスタストレージシステム。 - クライアント装置で利用するデータを格納する複数のストレージノードと、前記クライアント装置と前記ストレージノードとを接続する第1ネットワークと異なる、前記複数のストレージノードを相互に通信可能に接続する第2ネットワークと、を備えるクラスタストレージシステムによるデータ管理制御方法であって、
それぞれの前記ストレージノードは、ボリュームを単位として前記データを格納可能であり、
複数の前記ストレージノードに格納されている複数のボリュームにより構成されるボリュームグループを複数有し、
前記ボリュームグループの各ボリュームを格納する複数のストレージノードは、前記第2ネットワークを介して同一のボリュームグループのボリュームを同期させる
データ管理制御方法。 - クライアント装置で利用するデータを格納する複数のストレージノードと、前記クライアント装置と前記ストレージノードとを接続する第1ネットワークと異なる、前記複数のストレージノードを相互に通信可能に接続する第2ネットワークと、を備えるクラスタストレージシステムにおける前記ストレージノードを構成するコンピュータにより実行されるデータ管理制御プログラムであって、
それぞれの前記ストレージノードは、ボリュームを単位として前記データを格納可能であり、
複数の前記ストレージノードに格納されている複数のボリュームにより構成されるボリュームグループを複数有し、
前記コンピュータを、
前記第2ネットワークにおける前記複数のストレージノード間の通信が分断されたか否かを判定し、
前記第2ネットワークが分断されたと判定された場合に、自身が前記複数のストレージノードの中の前記第2ネットワークを介して相互に通信可能なストレージノードの数が最大となる最大ストレージノードグループに属するか否かを判定し、
前記最大ストレージノードグループに属すると判定した場合に、自身が最大ストレージノードグループの中の代表となるストレージノードである代表ストレージノードであるか否かを判定し、
代表ストレージノードであると判定した場合に、最大ストレージノードグループのストレージノードのボリュームが含まれている前記ボリュームグループが、前記ボリュームグループ中のボリュームの同期が実行不可能となった分断ボリュームグループであるか否かを判定し、
前記分断ボリュームグループに属するいずれか1つのボリュームに対する前記クライアント装置からのアクセスを実行可能な状態とするように機能させる
データ管理制御プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018117268A JP2019219954A (ja) | 2018-06-20 | 2018-06-20 | クラスタストレージシステム、データ管理制御方法、データ管理制御プログラム |
US16/291,898 US20190394266A1 (en) | 2018-06-20 | 2019-03-04 | Cluster storage system, data management control method, and non-transitory computer readable medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018117268A JP2019219954A (ja) | 2018-06-20 | 2018-06-20 | クラスタストレージシステム、データ管理制御方法、データ管理制御プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019219954A true JP2019219954A (ja) | 2019-12-26 |
Family
ID=68982196
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018117268A Pending JP2019219954A (ja) | 2018-06-20 | 2018-06-20 | クラスタストレージシステム、データ管理制御方法、データ管理制御プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20190394266A1 (ja) |
JP (1) | JP2019219954A (ja) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11012306B2 (en) * | 2018-09-21 | 2021-05-18 | Cisco Technology, Inc. | Autonomous datacenter management plane |
RU2019102666A (ru) * | 2019-01-31 | 2020-07-31 | ИЭмСи АйПи ХОЛДИНГ КОМПАНИ, ЛЛС | Подход к организации сети диспетчеризации для кластеризованных и федеративных систем хранения |
CN111756571B (zh) * | 2020-05-28 | 2022-02-18 | 苏州浪潮智能科技有限公司 | 一种集群节点故障的处理方法、装置、设备及可读介质 |
JP2021197010A (ja) * | 2020-06-17 | 2021-12-27 | 株式会社日立製作所 | 分散型ストレージシステム及びリバランス処理方法 |
CN112054926B (zh) * | 2020-08-31 | 2023-03-10 | 深圳前海微众银行股份有限公司 | 集群管理方法、装置、电子设备及存储介质 |
CN113010498B (zh) * | 2021-03-25 | 2023-08-08 | 腾讯科技(深圳)有限公司 | 一种数据同步方法、装置、计算机设备及存储介质 |
US11481139B1 (en) | 2021-03-31 | 2022-10-25 | Netapp, Inc. | Methods and systems to interface between a multi-site distributed storage system and an external mediator to efficiently process events related to continuity |
US11360867B1 (en) | 2021-03-31 | 2022-06-14 | Netapp, Inc. | Re-aligning data replication configuration of primary and secondary data serving entities of a cross-site storage solution after a failover event |
US11709743B2 (en) | 2021-03-31 | 2023-07-25 | Netapp, Inc. | Methods and systems for a non-disruptive automatic unplanned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
US11740811B2 (en) | 2021-03-31 | 2023-08-29 | Netapp, Inc. | Reseeding a mediator of a cross-site storage solution |
US11550679B2 (en) | 2021-03-31 | 2023-01-10 | Netapp, Inc. | Methods and systems for a non-disruptive planned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
US11934670B2 (en) | 2021-03-31 | 2024-03-19 | Netapp, Inc. | Performing various operations at the granularity of a consistency group within a cross-site storage solution |
US11409622B1 (en) | 2021-04-23 | 2022-08-09 | Netapp, Inc. | Methods and systems for a non-disruptive planned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system without using an external mediator |
US11893261B2 (en) | 2021-05-05 | 2024-02-06 | Netapp, Inc. | Usage of OP logs to synchronize across primary and secondary storage clusters of a cross-site distributed storage system and lightweight OP logging |
US11537314B1 (en) | 2021-10-07 | 2022-12-27 | Netapp, Inc. | Resynchronization of individual volumes of a consistency group (CG) within a cross-site storage solution while maintaining synchronization of other volumes of the CG |
US11892982B2 (en) | 2021-10-20 | 2024-02-06 | Netapp, Inc. | Facilitating immediate performance of volume resynchronization with the use of passive cache entries |
CN113986135B (zh) * | 2021-10-27 | 2023-08-15 | 北京百度网讯科技有限公司 | 处理请求的方法、装置、设备以及存储介质 |
US11907137B2 (en) | 2022-01-26 | 2024-02-20 | Capital One Services, Llc | Systems and methods for leader node election in cluster server configurations |
US12008250B2 (en) | 2022-01-26 | 2024-06-11 | Capital One Services, Llc | Systems and methods for achieving near zero impact during node failure in a cluster system |
US11907562B2 (en) | 2022-07-11 | 2024-02-20 | Netapp, Inc. | Methods and storage nodes to decrease delay in resuming input output (I/O) operations after a non-disruptive event for a storage object of a distributed storage system by utilizing asynchronous inflight replay of the I/O operations |
US12099719B2 (en) * | 2022-12-29 | 2024-09-24 | Dell Products L.P. | Cluster management in large-scale storage systems |
-
2018
- 2018-06-20 JP JP2018117268A patent/JP2019219954A/ja active Pending
-
2019
- 2019-03-04 US US16/291,898 patent/US20190394266A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20190394266A1 (en) | 2019-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2019219954A (ja) | クラスタストレージシステム、データ管理制御方法、データ管理制御プログラム | |
US11360854B2 (en) | Storage cluster configuration change method, storage cluster, and computer system | |
CN107111457B (zh) | 跨集群冗余配置中的非间断的控制器替换 | |
US11163653B2 (en) | Storage cluster failure detection | |
CN110224871B (zh) | 一种Redis集群的高可用方法及装置 | |
JP6382454B2 (ja) | 分散ストレージ及びレプリケーションシステム、並びに方法 | |
US9928148B2 (en) | Configuration of peered cluster storage environment organized as disaster recovery group | |
JP4659062B2 (ja) | フェイルオーバ方法、プログラム、管理サーバおよびフェイルオーバシステム | |
US9639437B2 (en) | Techniques to manage non-disruptive SAN availability in a partitioned cluster | |
US8583773B2 (en) | Autonomous primary node election within a virtual input/output server cluster | |
EP2434729A2 (en) | Method for providing access to data items from a distributed storage system | |
US10430217B2 (en) | High availability using dynamic quorum-based arbitration | |
KR20030003264A (ko) | 서버의 이중화 방법 및 이중화 서버시스템 | |
CN111400285A (zh) | mySQL数据分片处理方法、装置、计算机设备和可读存储介质 | |
US20220342775A1 (en) | Storage system, storage node virtual machine restore method, and recording medium | |
CN105323271B (zh) | 一种云计算系统以及云计算系统的处理方法和装置 | |
US10305987B2 (en) | Method to syncrhonize VSAN node status in VSAN cluster | |
KR102327520B1 (ko) | 무중단 네트워크 미러링 솔루션 시스템 및 그 방법 | |
CN112702206A (zh) | 一种主备集群部署方法及系统 | |
CN117938629A (zh) | 一种机房容灾处理方法、系统、调度节点及存储介质 |