ストレージ障害を高速で復旧する、ノードリプレイス

データリバンスではなく、ノードリプレイスを

分散ストレージはデータの冗長化のために各ノードでデータを持ち合っている関係で、ノード障害時にデータのリバランスを行う必要があります。このデータリバランスは、パフォーマンスの劣化や、長期間に渡る冗長数の減少を引き起こす、分散ストレージの課題となっています。

今回の記事では、リバランスの問題点と、どうやってそれに対処するのかを考えてみます。

リバランスとは

分散ストレージでは基本的に、各ノードの容量使用率など、ポリシーに応じてクラスタ内のデータの配置先を決定しています。ノードの追加や削除といった、クラスタを構成するノード数が変化するタイミングで、データの再配置が行われます。この動作をリバランスと呼び、ノード数の増減によって、クラスタ内でデータ配置に偏りが生じている状態を最適化することで、パフォーマンスや冗長数を維持しています。

リバランスはデータを最適な配置に分散し、ストレージの冗長性、可用性を保つために必要不可欠な挙動ですが、リバランス中はクラスタ全体のパフォーマンスが劣化しやすいという課題があります。

リバランスはデータの再配置計算のために多くのCPUリソースを使用し、再配置時のデータ移動には多くのネットワーク帯域を使用するため、システム全体として負荷の高い処理となります

オートリバランスの問題

特にリバランスが「予期しないタイミング」で発生した場合、運用に深刻な影響を及ぼす可能性があります。そして「予期しないタイミング」とは多くのの場合、ノードに障害が発生したタイミングです。

ただでさえノードがダウンし、システム全体のパフォーマンスが下がっているタイミングで更に負荷の高いリバランスが実施されてしまうと、リバランスの長期化により多重障害など、より深刻な問題を引き起こす可能性があります。

では、「予期しないタイミング」のリバランスを無くせば、このような問題は避けられるのでしょうか

計画的なリバランスだけでは全ての問題を解決できない

「予期しないタイミング」でのリバランスは、ストレージ製品によっては避けることができます。単純にノードが故障した時に自動でリバランスが走らないようになっていれば良いだけの話です。

実際、計画的にリバランスが実行できるのであれば、リバランスはそれほど脅威とならないケースもあります。サービスのピーク時間帯を避けるなどして、パフォーマンスの劣化が問題とならないタイミングでリバランスを実行できれば、少なくともパフォーマンスの劣化によって発生する問題は軽減できます。

とはいえ、そうもいかないケースもあります。グローバルな環境での利用や、24時間動き続けるようなサービスの場合、ピークではない時間帯が無いような場合もあります。

さらにデータ量が膨大であったりしてリバランスに長い時間がかかる場合、計画した時間内にリバランスが終わらない可能性もあります。

データの再配置ではなく、差分だけをアップデートする

前述のような、「予期しないタイミング」でのリバランスを避けるだけではカバーしきれない問題を解決する方法として、IzumoFSはノードリプレイスという機能を提供しています。

ノードリプレイスとは、故障したノードを新しいノードと置換する機能です。この機能の特徴は、置換されたノードは置換元のノードが本来持つべきだったデータだけを取得して、復帰するという点にあります。クラスタ全体でのデータの再配置は行われないため、ネットワークにかかる負荷や、CPUの負担は大幅に軽減されます。最低限の処理だけ行われるため、復旧時間も大幅に短縮されます。

差分だけを更新する

また、故障したノードのディスクにデータが残っていれば、それを新しいノードに移してからノードリプレイスを実行することで、残っているデータからの差分のみをコピーして復旧します。これは、IzumoFSがイミュータブル(不変的)なデータ構造を持つために可能な動作です。

例えば、ノードがダウンしてから6時間後に新しいノードとリプレイスした場合、この6時間の間に変更のあったファイルのみがコピーされます。この場合、復旧にかかる負荷と時間は、さらに低減できます。

さいごに

ノードリプレイスは、必要ない時にはリバランスを行わず、別の手段で解決するというアプローチです。

IzumoFSでもノード追加による容量の拡張や、クラスタの縮退時にはリバランスは発生しますが、これらは管理者により意図的に実行されるため、リバランスによる影響が考慮されています。一方でノード障害などによる管理者が予期していないタイミングでは、自動でのリバランスを避け、かつノードリプレイス機能により、障害時の高速復旧方法を提供することで、システムの信頼性は大きく向上すると考えています。 もしもデータのリバランスでお困りなら、リバランスの負荷や時間の短縮方法を検討するだけでなく、リバランス以外の方法で問題解決する方法を検討してみるのはいかがでしょうか?