(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023119489
(43)【公開日】2023-08-28
(54)【発明の名称】計算機システム、ボリューム配置管理装置、及びボリューム配置管理方法
(51)【国際特許分類】
G06F 16/182 20190101AFI20230821BHJP
G06F 16/11 20190101ALI20230821BHJP
【FI】
G06F16/182
G06F16/11
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022022423
(22)【出願日】2022-02-16
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】▲高▼田 昌忠
(72)【発明者】
【氏名】早坂 光雄
(57)【要約】
【課題】上位ストレージクラスタで冗長化されたボリュームのデータが使用不可となる状況を適切に抑制できるようにする。
【解決手段】分散ファイルシステムクラスタ30と、ブロックSDSクラスタ40とを備える計算機システム1において、分散ファイルシステムクラスタ30は、複数の分散ファイルシステムノード300を有し、管理すべきファイルを複数の分散ファイルシステムノード300が管理する複数のボリュームに冗長化させて格納させ、ブロックSDSクラスタ40は、複数のブロックSDSノード400を有し、ブロックSDSノード400の記憶装置の記憶領域に基づいて複数のボリュームを提供し、管理サーバ20のCPUは、分散ファイルシステムクラスタ30におけるファイルを冗長化のために格納する複数のボリュームが、1つのブロックSDSノード400の記憶装置の記憶領域に基づくボリュームとならないように制御するように構成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
上位クラスタと、下位クラスタとを備える計算機システムであって、
前記上位クラスタは、複数の第1ノードを有し、管理すべきデータ単位を複数の第1ノードが管理する複数のボリュームに冗長化させて格納させ、
前記下位クラスタは、複数の第2ノードを有し、前記第2ノードの記憶装置の記憶領域に基づいて複数の前記ボリュームを提供し、
前記計算機システムのプロセッサは、
前記上位クラスタにおける前記データ単位を冗長化のために格納する複数の前記ボリュームが、1つの前記第2ノードの前記記憶装置の記憶領域に基づくボリュームとならないように制御する
計算機システム。
【請求項2】
前記計算機システムのプロセッサは、
前記データ単位を冗長化のために格納する複数の前記ボリュームのすべてが異なる前記第2ノードの前記記憶装置の記憶領域に基づくボリュームとなるように制御する
請求項1に記載の計算機システム。
【請求項3】
前記冗長化は、前記データ単位の多重化である
請求項2に記載の計算機システム。
【請求項4】
前記冗長化は、イレイジャーコーディングである
請求項2に記載の計算機システム。
【請求項5】
前記計算機システムのプロセッサは、
前記データ単位を冗長化のために格納させている複数の前記ボリュームのそれぞれが基づいている前記記憶領域を有する第2ノードを特定し、
前記特定された第2ノードが重複している場合に、重複している前記第2ノードの記憶領域に基づいている複数の前記ボリュームの一部のボリュームを、前記特定された第2ノード以外の第2ノードに移動させる
請求項1に記載の計算機システム。
【請求項6】
前記計算機システムは、
管理装置をさらに備え、
前記管理装置のプロセッサは、
前記データ単位を冗長化のために格納させている複数の前記ボリュームのそれぞれが基づいている前記記憶領域を有する第2ノードを特定し、
前記特定された第2ノードが重複している場合に、重複している前記第2ノードの記憶領域に基づいている複数の前記ボリュームの一部のボリュームを、前記特定された第2ノード以外の第2ノードに移動させるように前記下位クラスタのいずれかの第2ノードのプロセッサに指示する
請求項5に記載の計算機システム。
【請求項7】
前記計算機システムは、
管理装置をさらに備え、
前記管理装置のプロセッサは、
前記データ単位を冗長化のために格納させている複数の前記ボリュームを特定可能な冗長化ボリューム情報を前記下位クラスタに送信し、
前記下位クラスタの前記第2ノードのプロセッサは、
前記冗長化ボリューム情報を受信し、
前記冗長化ボリューム情報に対応する複数のボリュームについて、前記複数の前記ボリュームのそれぞれが基づいている前記記憶領域を有する第2ノードを特定し、
前記特定された第2ノードが重複している場合に、重複している前記第2ノードの記憶領域に基づいている複数の前記ボリュームの一部のボリュームを、前記特定された第2ノード以外の第2ノードに移動させる
請求項5に記載の計算機システム。
【請求項8】
前記計算機システムのプロセッサは、
前記データ単位を冗長化のために格納する複数の前記ボリュームを特定可能な冗長化ボリューム情報を受け付け、
前記冗長化ボリューム情報に対応する複数のボリュームを、異なる前記第2ノードの前記記憶装置の記憶領域に基づくボリュームとなるように生成する
請求項2に記載の計算機システム。
【請求項9】
上位クラスタと、下位クラスタとを備える計算機システムにおけるボリュームの移動を管理するボリューム配置管理装置であって、
前記上位クラスタは、複数の第1ノードを有し、管理すべきデータ単位を複数の第1ノードが管理する複数のボリュームに冗長化させて格納させ、
前記下位クラスタは、複数の第2ノードを有し、前記第2ノードの記憶装置の記憶領域に基づいて複数の前記ボリュームを提供し、
前記管理装置のプロセッサは、
前記上位クラスタにおける前記データ単位を冗長化のために格納する複数の前記ボリュームが、1つの前記第2ノードの前記記憶装置の記憶領域に基づくボリュームとならないように制御する
ボリューム配置管理装置。
【請求項10】
上位クラスタと、下位クラスタとを備える計算機システムによるボリューム配置管理方法であって、
前記上位クラスタは、複数の第1ノードを有し、管理すべきデータ単位を複数の第1ノードが管理する複数のボリュームに冗長化させて格納させ、
前記下位クラスタは、複数の第2ノードを有し、前記第2ノードの記憶装置の記憶領域に基づいて複数の前記ボリュームを提供し、
前記計算機システムは、
前記上位クラスタにおける前記データ単位を冗長化のために格納する複数の前記ボリュームが、1つの前記第2ノードの前記記憶装置の記憶領域に基づくボリュームとならないように制御する
ボリューム配置管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のノード(計算機)で構成されるストレージクラスタにおけるボリュームの配置を管理する技術に関する。
【背景技術】
【0002】
複数のノードで構成するスケールアウト型のストレージシステムが知られている。スケールアウト型のストレージシステムは、ノードとして汎用サーバを用いるのが一般的である。汎用サーバは信頼性が低いため、ストレージシステムでは、複数のサーバを並べて冗長構成にし、一部のサーバに障害が発生しても別のサーバでサービスを継続する。
【0003】
AIやデータ分析が扱うデータはファイルデータやNoSQL格納データであり、これらを一元的に保存するストレージがデータレイクである。データレイクには、ファイル/オブジェクトやNoSQLのインタフェースを提供するスケールアウトストレージが用いられる。スケールアウトストレージには、分散ファイルシステムクラスタやNoSQLクラスタの技術が用いられる。分散ファイルシステムクラスタやNoSQLクラスタは、複数のサーバで構成されており、サーバ障害等からデータを保護するため、クライアントが入力したデータを複数の分散ファイルシステムノード/NoSQLノードのボリュームに冗長化して分散して格納する。例えば、データの冗長化の方法は、レプリケーションによる2重化や3重化や、Erasure Coding(イレイジャーコーディング)がある。
【0004】
一方、ブロックストレージをSDS(Software Defined Storage)化したブロックSDSが知られている。ブロックSDSは、複数のノードによりストレージクラスタを構成し、iSCSIなどのインタフェースを提供する。ブロックSDSは、サーバ障害等からデータを保護するため、iSCSIのクライアントが入力したデータを複数のノードに冗長化して分散して格納する。例えば、データの冗長化の方法は、レプリケーションによる2重化や3重化や、イレイジャーコーディングがある。
【0005】
また、ストレージシステムとしては、dHCI(Disaggregated Hyper Infrastructure)が知られている。dHCIでは,コンピュートクラスタとストレージクラスタとが物理的に分離したサーバで動作し、各クラスタは独立してスケールできる。dHCIの考え方を分散ファイルシステムクラスタ/NoSQLクラスタとブロックSDSクラスタとに適用することで、分散ファイルシステムクラスタ/NoSQLクラスタと、ブロックSDSクラスタとを独立してスケールできる。
【0006】
複数のノードにデータを格納する際に、データの冗長度を保つため、データの冗長化を考慮して冗長化したデータが同じストレージノードに配置されないように制御する技術がある。特許文献1には、ブロックSDSにおいて、冗長化したデータのペアが同じストレージノードに格納されないようにストレージノードを選択する方式が開示されている。
【先行技術文献】
【特許文献】
【0007】
【発明の概要】
【発明が解決しようとする課題】
【0008】
例えば、分散ファイルシステムクラスタ/NoSQLクラスタと、ブロックSDSクラスタとを備えるdHCI構成の計算機システムにおいては、分散ファイルシステムクラスタ/NoSQLクラスタがデータを3重化するボリューム(データの格納先)が、ブロックSDSクラスタの1つのノードに配置されてしまう虞がある。この場合、ブロックSDSクラスタのノードに障害が発生した際には、分散ファイルシステムクラスタ/NoSQLクラスタがデータを3重化しているすべてのボリューム(データ)がその障害が発生したノードである場合には、それらのボリュームが同時に使用不可となってしまう。これに対して、特許文献1による技術では、ブロックSDS内部の情報を用いて内部で制御する技術であり、分散ファイルシステムクラスタ/NoSQLクラスタとブロックSDSクラスタとを備えるdHCI構成のシステムに適用できない。
【0009】
本発明は、上記事情に鑑みなされたものであり、その目的は、複数のストレージクラスタを階層化して構成される計算機システムにおいて、上位ストレージクラスタで冗長化されたボリュームのデータが使用不可となる状況を適切に抑制することのできる技術を提供することにある。
【課題を解決するための手段】
【0010】
上記目的を達成するため、一観点に係る計算機システムは、上位クラスタと、下位クラスタとを備える計算機システムであって、前記上位クラスタは、複数の第1ノードを有し、管理すべきデータ単位を複数の第1ノードが管理する複数のボリュームに冗長化させて格納させ、前記下位クラスタは、複数の第2ノードを有し、前記第2ノードの記憶装置の記憶領域に基づいて複数の前記ボリュームを提供し、前記計算機システムのプロセッサは、前記上位クラスタにおける前記データ単位を冗長化のために格納する複数の前記ボリュームが、1つの前記第2ノードの前記記憶装置の記憶領域に基づくボリュームとならないように制御する。
【発明の効果】
【0011】
本発明によれば、複数のストレージクラスタを階層化して構成される計算機システムにおいて、上位ストレージクラスタで冗長化されたボリュームのデータが使用不可となる状況を適切に抑制することができる。
【図面の簡単な説明】
【0012】
【
図1】
図1は、第1実施例に係る計算機システムの全体構成図である。
【
図2】
図2は、第1実施例の概要を説明する図である。
【
図3】
図3は、第1実施例に係る管理サーバの構成図である。
【
図4】
図4は、第1実施例に係るボリュームリバランス管理情報の構成図である。
【
図5】
図5は、第1実施例に係る分散ファイルシステムノードの構成図である。
【
図6】
図6は、第1実施例に係るブロックSDSノードの構成図である。
【
図7】
図7は、第1実施例に係る分散ファイルシステム作成処理のフローチャートである。
【
図8】
図8は、第1実施例に係る分散ファイルシステム拡張処理のフローチャートである。
【
図9】
図9は、第1実施例に係るボリューム移動処理のフローチャートである。
【
図10】
図10は、第2実施例に係るボリューム移動処理のフローチャートである。
【
図11】
図11は、第3実施例に係る分散ファイルシステム作成処理のフローチャートである。
【
図12】
図12は、第3実施例に係る分散ファイルシステム拡張処理のフローチャートである。
【発明を実施するための形態】
【0013】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0014】
なお、以下の説明では「aaaテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。各種情報は、データ構造に依存しないことを示すために「aaaテーブル」を「aaa情報」と呼ぶことができる。
【0015】
また、以下の説明では、「プログラム」を動作の主体として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶資源(例えば、メモリ)及び/または通信インターフェイスデバイス(例えば、通信ポート)を用いながら行うため、処理の動作の主体がプロセッサとされてもよい。逆に、プロセッサが主語となっている処理は、1以上のプログラムを実行することにより行われると解釈することができる。プロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、処理の一部(例えば、暗号化/復号化、圧縮/伸張)を実行するハードウェア回路を含んでもよい。
【0016】
また、各情報の内容を説明する際に、識別情報について「識別子」、「名」、「ID」等の表現を用いるが、これらはお互いが置換可能である。これらのうちの少なくとも1つに代えて、多種の識別情報が使用されてよい。
【0017】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号を使用し、同種の要素を区別して説明する場合には、その要素の参照符号に代えて、その要素に割り振られた識別子(例えば番号及び符号のうちの少なくとも1つ)を使用することがある。
【実施例0018】
図1は、第1実施例に係る計算機システムの全体構成図である。
【0019】
計算機システム1は、1以上のクライアント10、ボリューム配置管理装置の一例としての管理サーバ20、上位クラスタの一例としても分散ファイルシステムクラスタ30、及び下位クラスタの一例としてのブロックSDSクラスタ40を有する。分散ファイルシステムクラスタ30と、ブロックSDSクラスタ40とは、ネットワーク50を介して接続されている。ネットワーク50は、拠点内LAN(Local Area Network)等のネットワークである。
【0020】
また、クライアント10と、分散ファイルシステムクラスタ30と、管理サーバ20とは、例えば、拠点内LAN等のネットワーク51で接続されている。また、管理サーバ20と、ブロックSDSクラスタ40とは、例えば、拠点内LAN等のネットワーク52で接続されている。なお、ネットワーク50,51,52の種類は上記に限定されず、種々のネットワークを利用可能である。
【0021】
クライアント10は、例えば、計算機であり、例えば、NFS(Network File System)やCIFS(Common Internet File System)などのファイル共有プロトコルを用いて分散ファイルシステムクラスタ30が提供するファイル共有サービスを利用する。
【0022】
管理サーバ20は、一以上の計算機であり、分散ファイルシステムクラスタ30と、ブロックSDSクラスタ40とを管理するサーバである。
【0023】
分散ファイルシステムクラスタ30は、クライアント10に対してファイル(データ単位の一例)を共有可能に分散して管理するファイル共有サービスを提供する。分散ファイルシステムクラスタ30は、複数の分散ファイルシステムノード300(第1ノードの一例)から構成される。なお、
図1の例では、分散ファイルシステムクラスタ30が3つの分散ファイルシステムノード300(300-1,300-2,300-3)で構成される例を示しているが、本発明はこれに限られず、分散ファイルシステムクラスタ30を構成する分散ファイルシステムノード300の数はいくつでもよい。
【0024】
ブロックSDSクラスタ40は、分散ファイルシステムクラスタ30にブロックストレージを提供する。ブロックSDSクラスタ40は、複数のブロックSDSノード400(第2ノードの一例)から構成される。なお、
図1の例では、ブロックSDSクラスタ40が3つのブロックSDSノード400(400-1,400-2,400-3)で構成される例を示しているが、本発明はこれに限られず、ブロックSDSクラスタ40を構成するブロックSDSノード400の数はいくつでもよい。
【0025】
また、
図1の例では、計算機システム1に分散ファイルシステムクラスタ30を備えた例を示しているが、本発明はこれに限られず、分散ファイルシステムクラスタ30に代えて、データベースシステムのクラスタでもよい。データベースシステムは、RDBMSであってもよく、NoSQL格納データ(データ単位の一例)を管理するNoSQLであってもよい。NoSQLは、KVS(Key-Value Store)型のデータベースサービスをクライアント10に提供する。
【0026】
【0027】
管理サーバ20は、ボリュームリバランス指示プログラム206と、ボリュームリバランス管理情報210とを有する。ボリュームリバランス指示プログラム206は、定期的に、管理者がボリュームリバランス要求をした時に、管理者が分散ファイルシステム作成要求をした時に、または、管理者が分散ファイルシステム拡張要求をした時に以下の処理を実行する。
【0028】
ボリュームリバランス指示プログラム206は、分散ファイルシステムクラスタ30から分散ファイルシステム60の冗長化構成情報を取得する(
図2(1))。ここで、分散ファイルシステム60の冗長化構成情報とは、データがどのボリュームによって冗長化(例えば、多重化)されているかを示す情報である。なお、ボリュームリバランス指示プログラム206が分散ファイルシステム60の冗長化構成情報を取得するインタフェースは、例えば、REST APIを用いるが、これに限定されない。
【0029】
ここで、分散ファイルシステム60は、障害等からデータを保護するため、クライアント10が入力したデータを、複数の分散ファイルシステムノード300に冗長化して分散して格納する。分散ファイルシステム60でのデータの冗長化の方法は、例えば、レプリケーションによる多重化(2重化,3重化等)や、イレイジャーコーディングであってよい。なお、本実施例では、冗長化として、レプリケーションによる3重化を例を中心に説明する。レプリケーションによる3重化を実行する場合、クライアント10が入力したデータは、異なる分散ファイルシステムノード300が管理する3つのボリュームにコピーされて格納される。
【0030】
次に、ボリュームリバランス指示プログラム206は、ブロックSDSクラスタ40からブロックSDSノード400のノード情報と、ブロックSDSクラスタ40に管理されているボリュームのボリューム情報を取得する(
図2(2))。ここで、ブロックSDSノード400のノード情報は、ブロックSDSノード400のノード識別子、及びフォールトセットや、ブロックSDSノード400が保有するボリュームのボリューム識別子を含む。また、ブロックSDSクラスタ40で管理されているボリュームのボリューム情報は、ボリューム識別子、ボリューム名、ボリュームのサイズ、及びボリュームが格納されているノードのノード識別子を含む。なお、ノード情報とボリューム情報とを取得するインタフェースは、例えば、REST APIを用いるが、これに限定されない。
【0031】
次に、ボリュームリバランス指示プログラム206は、分散ファイルシステム60がデータを3重化しているボリュームが、同じブロックSDSノード400に配置されているか否かをチェックする(
図2(3))。このチェックの結果、分散ファイルシステム60がデータを3重化しているボリュームが、同じブロックSDSノード400に配置されている場合は、ボリュームリバランス指示プログラム206は、
図2(4)の処理に進め、そうでない場合は処理を終了する。
【0032】
次に、ボリュームリバランス指示プログラム206は、同じブロックSDSノード400に格納されている一部のボリュームを新たに配置させる配置先のブロックSDSノード400を指定して、ブロックSDSクラスタ40にボリュームの移動を指示する(
図2(4))。ボリュームリバランス指示プログラム206が、この指示を行うインタフェースは、例えばREST APIを用いるが、これに限定されない。ここで、ボリュームの移動は、例えば、2つのボリュームが同じブロックSDSノード400に配置されている場合、そのうちのいずれか一方のボリュームを別のブロックSDSノード400を配置先として移動するように指定する。また、例えば3つのボリュームが同じブロックSDSノード400に配置されている場合、そのうちのいずれか2つのボリュームを、それぞれ別のブロックSDSノード400を配置先として移動するように指定する。
【0033】
次に、ブロックSDSノード400内のボリュームリバランスプログラム412は、ボリュームリバランス指示プログラム206からの指示を受理し、指示で指定されたボリュームを、指定された配置先のブロックSDSノード400に移動する(
図2(5))。
【0034】
上記処理によると、分散ファイルシステム60がデータを3重化しているボリュームを、異なるブロックSDSノード400に配置されるようにすることができる。これにより、いずれかのブロックSDSノード400に障害が発生した際に、3重化しているすべてのボリュームが使用不可となることを抑制できる。
【0035】
なお、上記した例では、管理サーバ20がボリュームリバランス指示プログラム206を実行する例を示したが、本発明はこれに限定されず、例えば、分散ファイルシステムクラスタ30の分散ファイルシステムノード300がボリュームリバランス指示プログラム206を実行してもよい。
【0036】
図3は、第1実施例に係る管理サーバの構成図である。
【0037】
管理サーバ20は、メモリ202、CPU201、ネットワークI/F203,204、及びドライブ205を有する。メモリ202、CPU201、ネットワークI/F203,204、及びドライブ205は、例えばバス等の通信路により相互に接続される。
【0038】
CPU201は、メモリ202に格納されたプログラムを実行する。ネットワークI/F203は、ネットワーク51を介してクライアント10及び分散ファイルシステムノード300と通信するインタフェースである。ネットワークI/F204は、ネットワーク52を介してブロックSDSクラスタノード400と通信するインタフェースである。これらのネットワークI/F203,204は、共通のインタフェースとしてもよく、独立したインタフェースとしてもよい。
【0039】
ドライブ205は、例えば、HDD(ハードディスクドライブ)や、SSD(ソリッドステートドライブ)であり、管理サーバ20を制御するプログラム及び情報を格納する。
【0040】
メモリ202は、例えば、RAM(RANDOM ACCESS MEMORY)であり、管理サーバ20を制御するプログラム及び情報を格納する。具体的には、メモリ202は、例えば、ボリュームリバランス指示プログラム206と、オペレーティングシステム207と、ボリュームリバランス管理情報210とを格納する。なお、メモリ202に格納されている各プログラム及び情報は、CPU201によってドライブ205からメモリ202に読み出されてもよい。
【0041】
ボリュームリバランス指示プログラム206は、ブロックSDSクラスタ40により提供されるボリュームのリバランスを指示するプログラムである。オペレーティングシステム207は、管理サーバ20の全体を制御するプログラムである。ボリュームリバランス管理情報210は、ブロックSDSクラスタ40により提供されるボリュームのリバランス処理を管理する情報である。
【0042】
図4は、第1実施例に係るボリュームリバランス管理情報の構成図である。
【0043】
ボリュームリバランス管理情報210は、分散ファイルシステムノード情報テーブル250と、分散ファイルシステム情報テーブル220と、ブロックSDSノード情報テーブル230と、ブロックSDSボリューム情報テーブル240とを有する。
【0044】
分散ファイルシステムノード情報テーブル250は、分散ファイルシステムクラスタ30を構成する分散ファイルシステムノード300の情報を管理する。分散ファイルシステムノード情報テーブル250は、分散ファイルシステムノード300ごとにエントリを有する。分散ファイルシステムノード情報テーブル250のエントリは、ノード(Node)2500と、フォールトセット(Fault Set)2501とのフィールドを有する。ノード2500には、エントリに対応する分散ファイルシステムノード300の識別子(ノード識別子)が格納される。フォールトセット2501には、エントリに対応する分散ファイルシステムノード300が属するフォールトセットの識別子が格納される。ここで、フォールトセットは、電源やネットワークスイッチの障害に対して冗長化構成とされた計算機システム1において、障害が他のセットに影響を及ぼさないように構成されている構成のセットである。
【0045】
分散ファイルシステム情報テーブル220は、分散ファイルシステムクラスタ30により構成される1以上の分散ファイルシステム60の情報を管理する。分散ファイルシステム情報テーブル220は、分散ファイルシステム60ごとにエントリを有する。分散ファイルシステム情報テーブル220のエントリは、ファイルシステム(File System)2200と、データ保護タイプ(Data Protection type)2201と、ボリューム(Volume)2202とのフィールドを有する。
【0046】
ファイルシステム2200には、エントリに対応する分散ファイルシステムの識別子が格納される。データ保護タイプ2201には、エントリに対応する分散ファイルシステムにおけるデータ保護(冗長化)の方法のタイプが格納される。データ冗長化の方法としては、例えば、データの3重化や、イレイジャーコーディング等がある。ボリューム2202には、エントリに対応する冗長化方法の対象となるボリュームの組が格納される。
【0047】
図4に示す分散ファイルシステム情報テーブル220は、例えば、FS00の分散ファイルシステムは、レプリケーションによる3重化の方法により、Vol03,Vol04,及びVol05のボリュームによりデータが3重化され、Vol06,Vol07,及びVol08のボリュームによりデータが3重化されていることを示し、また、FS01の分散ファイルシステムは、データが、Vol09,Vol10,Vol11にイレイジャーコーディングによって格納されていることを示している。
【0048】
ブロックSDSノード情報テーブル230は、ブロックSDSクラスタ40を構成するブロックSDSノード400の情報を管理する。ブロックSDSノード情報テーブル230は、ブロックSDSノード400ごとにエントリを有する。ブロックSDSノード情報テーブル230のエントリは、ノード(Node)2300と、フォールトセット2301と、ボリューム(Volume)2302とのフィールドを有する。
【0049】
ノード2300には、エントリに対応するブロックSDSノード400の識別子が格納される。フォールトセット2301には、エントリに対応するブロックSDSノード400が属するフォールトセットの識別子が格納される。ボリューム2302には、エントリに対応するブロックSDSノード400が保有するボリュームの識別子が格納される。
【0050】
ブロックSDSボリューム情報テーブル240は、ブロックSDSクラスタ40におけるボリュームの情報を管理する。ブロックSDSボリューム情報テーブル240は、ボリュームごとのエントリを有する。ブロックSDSボリューム情報テーブル240のエントリは、ボリューム(Volume)2400と、ボリューム名(Volume Name)2401と、サイズ(Size)2402と、ノード2403と、のフィールドを含む。ボリューム2400には、エントリに対応するボリュームの識別子(ボリューム識別子)が格納される。ボリューム名2401には、エントリに対応するボリュームの名前(ボリューム名)が格納される。ボリューム名は、例えば、ボリューム作成者がボリュームの作成時にボリューム対して指定する任意の名前である。サイズ2402には、エントリに対応するボリュームのサイズが格納される。ノード2403には、エントリに対応するボリュームが保持されているノードの識別子が格納される。
【0051】
図5は、第1実施例に係る分散ファイルシステムノードの構成図である。
【0052】
分散ファイルシステムノード300は、コントローラ301を有する。コントローラ301は、メモリ303、CPU302、ネットワークI/F304,305を有する。メモリ303、CPU302、及びネットワークI/F304,305は、例えばバス等の通信路により相互に接続される。
【0053】
CPU302は、メモリ303に格納されたプログラムを実行する。ネットワークI/F304は、ネットワーク51を介してクライアント10及び他の分散ファイルシステムノード300と通信するインタフェースである。ネットワークI/F305は、ネットワーク50を介してブロックSDSクラスタ40と通信するインタフェースである。これらのネットワークI/F304,305は、共通のインタフェースとしてもよく、独立したインタフェースとしてもよい。
【0054】
メモリ303は、分散ファイルシステムノード300を制御するプログラム及び情報を格納する。具体的には、メモリ303は、例えば、ファイル共有プログラム310と、分散ファイルシステムプログラム311と、分散ファイルシステム作成プログラム312と、分散ファイルシステム拡張プログラム313と、分散ファイルシステム単位ボリューム管理プログラム314と、ノード単位ボリューム管理プログラム315と、オペレーティングシステム(OS)316と、冗長化構成情報317とを格納する。なお、メモリ303に格納されている各プログラム及び情報は、分散ファイルシステムノード300の記憶装置(図示せず)に格納されてもよい。この場合、これらはCPU302によってメモリ303に読み出されて実行される。
【0055】
ファイル共有プログラム310は、クライアント10との間で、ファイル共有プロトコルを用いたインタフェースを提供するプログラムである。分散ファイルシステムプログラム311は、複数の分散ファイルシステムノード300間で構成される分散ファイルシステム60をクライアント10に提供するプログラムである。分散ファイルシステム作成プログラム312は、管理者による管理サーバ20からの分散ファイルシステム60の作成要求(分散ファイルシステム作成要求)を受理し、分散ファイルシステム60を作成するプログラムである。分散ファイルシステム拡張プログラム313は、管理者による管理サーバ20からの分散ファイルシステム60の拡張要求(分散ファイルシステム拡張要求)を受理し、分散ファイルシステム60を拡張するプログラムである。分散ファイルシステム単位ボリューム管理プログラム314は、分散ファイルシステム作成プログラム312または分散ファイルシステム拡張プログラム313からのボリューム作成要求を受理し、ブロックSDSクラスタ40に対してボリューム作成を要求するプログラムである。ノード単位ボリューム管理プログラム315は、分散ファイルシステム単位ボリューム管理プログラム314からの、分散ファイルシステムノード300に対するボリュームの割り当て要求を受理し、分散ファイルシステムノード300にボリュームを割り当てるプログラムである。分散ファイルシステム単位ボリューム管理プログラム314及びノード単位ボリューム管理プログラム315は、例えば、Kubernetes等のコンテナ環境におけるCSI(Container Storage Interface)ドライバでもよい。オペレーティングシステム316は、分散ファイルシステムノード300の全体を制御するプログラムである。
【0056】
冗長化構成情報317は、分散ファイルシステムクラスタ30におけるデータを冗長化して管理しているボリュームの情報を格納する。具体的には、冗長化構成情報317は、分散ファイルシステム情報テーブル220と同様な情報であってもよい。なお、冗長化構成情報317は、分散ファイルシステムクラスタ30の代表となる分散ファイルシステムノード300のメモリ303のみに格納されていてもよい。
【0057】
図6は、第1実施例に係るブロックSDSノードの構成図である。
【0058】
ブロックSDSノード400は、コントローラ401と、記憶装置402とを有する。コントローラ401は、メモリ403、CPU405、ネットワークI/F406,407、及びI/F404を有する。メモリ403、CPU405、ネットワークI/F406,407、及びI/F404は、例えばバス等の通信路により相互に接続される。
【0059】
CPU405は、メモリ403に格納されたプログラムを実行する。ネットワークI/F406は、ネットワーク50を介して分散ファイルシステムクラスタ30(分散ファイルシステムノード300)と通信するインタフェースである。I/F404は、記憶装置402と通信するインタフェースであり、記憶装置402の後述するI/F420に接続される。ネットワークI/F407は、ネットワーク52を介して他のブロックSDSノード400、または管理サーバ20と通信するインタフェースである。
【0060】
メモリ403は、ブロックSDSノード400を制御するプログラム及び情報を格納する。具体的には、メモリ403は、例えば、ブロックIO制御プログラム410と、ボリューム作成プログラム411と、ボリュームリバランスプログラム412と、オペレーティングシステム413と、を格納する。なお、メモリ403に格納されている各プログラム及び情報は、記憶装置402に格納されてもよい。この場合、各プログラム及び情報は、CPU405によって記憶装置402からメモリ403に読み出される。
【0061】
ブロックIO制御プログラム410は、分散ファイルシステムクラスタ30からのIO要求を処理するプログラムである。IO要求は、例えば、iSCSIやFC(Fibre Channel)のプロトコルを使用したSCSIコマンドである。ボリューム作成プログラム411は、分散ファイルシステムクラスタ30からのボリューム作成要求を受理し、ボリュームを作成するプログラムである。ボリュームリバランスプログラム412は、管理サーバ20からのボリュームリバランス要求を受けて、または、ブロックSDSクラスタ40内部の処理に応じてボリュームのリバランスを実行するプログラムである。具体的には、ボリュームリバランスプログラム412は、ブロックSDSノード400間の空き容量や性能の偏りを解消するためにボリュームをブロックSDSノード400間で移動する。オペレーティングシステム413は、ブロックSDSノード40の全体を制御するプログラムである。
【0062】
記憶装置402は、メモリ421、CPU422、1台以上のディスク423、及びI/F420を有する。メモリ421、CPU422、ディスク423、及びI/F420は、例えばバス等の通信路により相互に接続される。I/F420は、コントローラ401と通信するインタフェースである。メモリ421及びディスク423は、プログラムやデータを格納する。CPU422は、コントローラ401からの命令に基づき、メモリ421内のプログラムを実行する。記憶装置402は、FC-SAN等のブロック形式のストレージ機能をコントローラ401に提供してよい。
【0063】
次に、第1実施例に係る計算機システム1による処理動作について詳細に説明する。
【0064】
次に、分散ファイルシステム作成処理6000について説明する。
【0065】
図7は、第1実施例に係る分散ファイルシステム作成処理のフローチャートである。
【0066】
分散ファイルシステム作成処理6000は、例えば、分散ファイルシステム作成プログラム312が、管理サーバ20から管理者による分散ファイルシステムの作成要求を受理した場合に実行される。分散ファイルシステム作成処理6000は、CPU302が分散ファイルシステム作成プログラム312を実行することにより行われる処理である。
【0067】
分散ファイルシステム作成プログラム312(厳密には、分散ファイルシステム作成プログラム312を実行するCPU302)は、管理サーバ20からの分散ファイルシステム作成要求を受理し、分散ファイルシステム単位ボリューム管理プログラム314に、分散ファイルシステムに使用するための複数のボリュームの作成を要求する(S6001)。
【0068】
分散ファイルシステム単位ボリューム管理プログラム314は、ボリュームの作成の要求を受理し、ブロックSDSクラスタ40にボリューム作成を要求する(S6002)。
【0069】
ブロックSDSクラスタ40(ブロックSDSクラスタ40のいずれかのブロックSDSノード400)のボリューム作成プログラム411は、ボリューム作成要求を受理し、ブロックSDSノード400の記憶装置402の記憶領域により複数のボリュームを作成し、ボリュームの作成要求に対する応答を行う(S6003)。
【0070】
分散ファイルシステム作成プログラム312は、ボリューム作成要求に対する応答を受け、分散ファイルシステムノード300への、作成された複数のボリュームの割り当てを分散ファイルシステム単位ボリューム管理プログラム314に要求する(S6004)。
【0071】
分散ファイルシステム単位ボリューム管理プログラム314は、分散ファイルシステムクラスタ30を構成するそれぞれの分散ファイルシステムノード300のノード単位ボリューム管理プログラム315に、生成されたボリュームのいずれかについてのその分散ファイルシステムノード300への割り当てを要求する(S6005)。
【0072】
ノード単位ボリューム管理プログラム315は、ボリュームの分散ファイルシステムノード300への割り当て要求を受理し、割り当て要求で指定されたボリュームに分散ファイルシステムノード300を接続する(S6006)。
【0073】
分散ファイルシステム作成プログラム312は、分散ファイルシステムノード300に接続された複数のボリューム上に分散ファイルシステム60を作成し(S6007)、分散ファイルシステム作成処理6000を終了する。
【0074】
上記した分散ファイルシステム作成処理6000によると、分散ファイルシステムクラスタ30上に分散ファイルシステム60が作成され、ファイル共有プログラム310によってファイル共有サービスがクライアント10に提供され、クライアント10は分散ファイルシステム60にファイルを読み書きできるようになる。
【0075】
次に、分散ファイルシステム拡張処理7000について説明する。
【0076】
図8は、第1実施例に係る分散ファイルシステム拡張処理のフローチャートである。
【0077】
分散ファイルシステム拡張処理7000は、分散ファイルシステム60の容量が足りなくなった場合などに実行される処理であり、例えば、分散ファイルシステム拡張プログラム313が、管理サーバ20から管理者による分散ファイルシステムの拡張の要求を受理した場合に実行される。分散ファイルシステム拡張処理7000は、CPU302が分散ファイルシステム拡張プログラム313を実行することにより行われる処理である。
【0078】
分散ファイルシステム拡張プログラム313(厳密には、分散ファイルシステム拡張プログラム313を実行するCPU302)は、管理サーバ20からの分散ファイルシステム拡張要求を受理し、分散ファイルシステム単位ボリューム管理プログラム314に、分散ファイルシステムに使用するための複数のボリュームの作成を要求する(S7001)。
【0079】
分散ファイルシステム単位ボリューム管理プログラム314は、ボリュームの作成の要求を受理し、ブロックSDSクラスタ40にボリューム作成を要求する(S7002)。
【0080】
ブロックSDSクラスタ40(ブロックSDSクラスタ40のいずれかのブロックSDSノード400)のボリューム作成プログラム411は、ボリューム作成要求を受理し、ブロックSDSノード400の記憶装置402の記憶領域により複数のボリュームを作成し、ボリュームの拡張要求に対する応答を行う(S7003)。
【0081】
分散ファイルシステム拡張プログラム313は、ボリューム作成要求に対する応答を受け、分散ファイルシステムノード300への、作成された複数のボリュームの割り当てを分散ファイルシステム単位ボリューム管理プログラム314に要求する(S7004)。
【0082】
分散ファイルシステム単位ボリューム管理プログラム314は、分散ファイルシステムクラスタ30を構成するそれぞれの分散ファイルシステムノード300のノード単位ボリューム管理プログラム315に、生成されたボリュームのいずれかについてのその分散ファイルシステムノード300への割り当てを要求する(S7005)。
【0083】
ノード単位ボリューム管理プログラム315は、ボリュームの分散ファイルシステムノード300への割り当て要求を受理し、割り当て要求で指定されたボリュームに分散ファイルシステムノード300を接続する(S7006)。
【0084】
分散ファイルシステム拡張プログラム313は、追加されたボリュームを利用して分散ファイルシステム60を拡張し(S7007)、分散ファイルシステム拡張処理7000を終了する。
【0085】
次に、ボリューム移動処理8000について説明する。
【0086】
図9は、第1実施例に係るボリューム移動処理のフローチャートである。
【0087】
ボリューム移動処理8000は、例えば、定期的に、または、管理者によってボリュームリバランスが要求されたときに、管理サーバ20のボリュームリバランス指示プログラム206により実行される。なお、ボリューム移動処理8000は、分散ファイルシステム作成処理6000または分散ファイルシステム拡張処理7000が完了した後にその延長で呼び出されて実行されてもよい。
【0088】
ボリュームリバランス指示プログラム206(厳密には、ボリュームリバランス指示プログラム206を実行するCPU201)は、分散ファイルシステム60から冗長化構成情報を取得する(S8001)。ここで、冗長化構成情報は、例えば、分散ファイルシステム60の識別子と、分散ファイルシステム60におけるデータ保護(冗長化)の方法のタイプと、冗長化方法の対象となるボリュームの組とを含む。
【0089】
ボリュームリバランス指示プログラム206は、取得した冗長化構成情報と、ボリュームリバランス管理情報210の分散ファイルシステム情報テーブル220に格納されている情報とを比較し、情報の更新があるか否かをチェックする(S8002)。
【0090】
この結果、情報の更新がない場合(S8002:No)、ボリュームリバランス指示プログラム206は、処理をS8004に進める。
【0091】
一方、情報の更新がある場合(S8002:Yes)、ボリュームリバランス指示プログラム206は、冗長化構成情報に基づいて、分散ファイルシステム情報テーブル220を更新し(S8003)、処理をS8004に進める。
【0092】
ステップS8004では、ボリュームリバランス指示プログラム206は、ブロックSDSクラスタ40からノード情報とボリューム情報とを取得する。ここで、ノード情報には、例えば、ブロックSDSノード400の識別子と、ブロックSDSノード400が属するフォールトセットの識別子と、ブロックSDSノード400が保有するボリュームの識別子とが含まれる。また、ボリューム情報には、例えば、ボリュームの識別子と、ボリューム名と、ボリュームのサイズと、ボリュームが保持されているノードの識別子とが含まれる。
【0093】
ボリュームリバランス指示プログラム206は、ブロックSDSクラスタ40のノード情報及びボリューム情報と、ブロックSDSノード情報テーブル230及びブロックSDSボリューム情報テーブル240に格納されている情報とを比較し、情報の更新があるか否かをチェックする(S8005)。
【0094】
この結果、情報の更新がない場合(S8005:No)、ボリュームリバランス指示プログラム206は、処理をS8007に進める。一方、情報の更新がある場合(S8005:Yes)、ボリュームリバランス指示プログラム206は、ブロックSDSノード情報テーブル230及びブロックSDSボリューム情報テーブル240を更新する(S8006)。
【0095】
ステップS8007では、ボリュームリバランス指示プログラム206は、ボリュームリバランス管理情報210を参照し、分散ファイルシステム60がデータを冗長化している複数のボリュームが配置されているブロックSDSノード400をチェックする。
【0096】
ボリュームリバランス指示プログラム206は、分散ファイルシステム60がデータを冗長化(例えば、3重化、イレイジャーコーディング)している複数のボリュームのすべてが異なるブロックSDSノード400に配置されているか否かをチェックする(S8008)。
【0097】
この結果、冗長化しているボリュームがすべて異なるブロックSDSノード400に配置されている場合(S8008:Yes)、1つのブロックSDSノード400が故障しても、他のブロックSDSノード400のデータによりデータを取得または復元できることを意味しているので、ボリュームリバランス指示プログラム206は、ボリューム移動処理8000を終了する。
【0098】
一方、冗長化しているボリュームがすべて異なるブロックSDSノード400に配置されていない場合(S8008:No)、いずれか複数のボリュームが同じブロックSDSノード400に配置されていることを意味しているので、ボリュームリバランス指示プログラム206は、すべてのボリュームの配置先が異なるブロックSDSノード400となるように、ボリュームの配置先を決定し、決定した配置先のブロックSDSノード400を指定してブロックSDSクラスタ40にボリューム移動を指示する(S8009)。
【0099】
ブロックSDSクラスタ40のボリュームリバランスプログラム412は、ボリューム移動指示を受理し、指示されたボリュームを指示された配置先のブロックSDSノード400に移動し(S8010)、ボリューム移動処理8000を終了する。
【0100】
上記したボリューム移動処理8000によると、分散ファイルシステム60がデータを冗長化している複数のボリュームが、異なるブロックSDSノード400に配置されるようになる。これにより、ブロックSDSノード400の障害時に、冗長化しているすべてのボリュームが使用不可となることを抑制できる。
ここで、第2実施例に係る計算機システムの基本的な構成は、第1実施例に係る計算機システム1と同様であるので、同様な構成については、便宜的に第1実施例に係る計算機システム1と同一の符号を用いる。
ボリューム移動処理9000は、例えば、定期的に、または、管理者によってボリュームリバランスが要求されたときに、管理サーバ20のボリュームリバランス指示プログラム206により実行される。なお、ボリューム移動処理9000は、分散ファイルシステム作成処理6000または分散ファイルシステム拡張処理7000が完了した後にその延長で呼び出されて実行されてもよい。
ボリュームリバランス指示プログラム206(厳密には、ボリュームリバランス指示プログラム206を実行するCPU201)は、分散ファイルシステム60から冗長化構成情報を取得する(S9001)。ここで、冗長化構成情報は、例えば、分散ファイルシステム60の識別子と、分散ファイルシステム60におけるデータ保護(冗長化)の方法のタイプと、冗長化方法の対象となるボリュームの組とを含む。
ボリュームリバランス指示プログラム206は、取得した冗長化構成情報と、ボリュームリバランス管理情報210の分散ファイルシステム情報テーブル220に格納されている情報とを比較し、情報の更新があるか否かをチェックする(S9002)。
一方、情報の更新がある場合(S9002:Yes)、ボリュームリバランス指示プログラム206は、冗長化構成情報に基づいて、分散ファイルシステム情報テーブル220を更新し(S9003)、処理をS9004に進める。
ステップS9004では、ボリュームリバランス指示プログラム206は、ボリュームリバランス管理情報210を参照し、分散ファイルシステム60がデータを冗長化しているボリュームが同じブロックSDSノード400に配置されないよう、ブロックSDSクラスタ40に、冗長化しているボリュームの同一ノード配置禁止を指定する(S9004)。ここで、同一ノード配置禁止には、冗長化している複数のボリュームを識別する情報(冗長化ボリューム情報の一例)が含まれている。
ブロックSDSクラスタ40(ブロックSDSクラスタ40のいずれかのブロックSDSノード400)のボリュームリバランスプログラム412は、同一ノード配置禁止の指定を受理し、同一ノード配置禁止として指定されたボリュームが配置されているブロックSDSノード400をチェックする(S9005)。
ボリュームリバランスプログラム412は、同一ノード配置禁止として指定された複数のボリュームのすべてが異なるブロックSDSノード400に配置されているか否かをチェックする(S9006)。
この結果、指定された複数のボリュームのすべてが異なるブロックSDSノード400に配置されている場合(S9006:Yes)、1つのブロックSDSノード400が故障しても、他のブロックSDSノード400のデータによりデータを取得または復元できることを意味しているので、ブロックSDSのボリュームリバランスプログラム412はボリューム移動処理9000を終了する。
一方、指定されたボリュームの全てが異なるブロックSDSノード400に配置されていない場合(S9006:No)、ボリュームリバランスプログラム412は、指定されたボリュームが異なるブロックSDSノード400に配置されるように、移動対象のボリューム及びその移動先のブロックSDSノード400を計算する(S9007)。
ブロックSDSクラスタ40のボリュームリバランスプログラム412は、計算した移動先のブロックSDSノード400に移動対象のボリュームを移動し(S9008)、ボリューム移動処理9000を終了する。
上記したボリューム移動処理9000によると、分散ファイルシステム60がデータを冗長化している複数のボリュームが、異なるブロックSDSノード400に配置されるようになる。これにより、ブロックSDSノード400の障害時に、冗長化しているすべてのボリュームが使用不可となることを抑制できる。