2.9. クラスターの再構築について¶
ストレージクラスターには自己修復機能があります。ノードまたはディスクに障害が発生した場合、クラスターは失われたデータを自動的に復元しようとします。つまり、自身を再構築しようとします。
再構築プロセスは複数の手順で構成されます。各CSは5秒おきにハートビートメッセージをMDSに送信します。ハートビートが送信されなかった場合、CSは*非アクティブ*と見なされ、MDSはそのデータに対する操作のリクエストを停止するようにすべてのクラスターコンポーネントに通知します。15分間CSからハートビートを受信しなかった場合、MDSはCSは*オフライン*であると見なし、(次の前提条件を満たしている場合に)クラスターの再構築を開始します。プロセス中、MDSは失われたデータの部分(レプリカ)を持っていないCSを見つけ、そのデータを復元します。次のように一度に1つの部分(レプリカ)を復元します。
レプリケーションを使用している場合、降格したチャンクの既存のレプリカはロックされ(すべてのレプリカが同一のまま維持されるようにするため)、1つのレプリカが新しいCSにコピーされます。この時点でクライアントがまだ再構築されていないデータを読み取る必要がある場合、クライアントはそのデータの残りのレプリカを読み取ります。
イレージャーコーディングを使用している場合、新しいCSは残りのほぼすべてのデータの部分をリクエストして、失われた部分を再構築します。この時点でクライアントがまだ再構築されていないデータを読み取る必要がある場合、そのデータは順番から外れて再構築され、読み取られます。
注釈
メンテナンス中にノードまたはディスクがオフラインになった場合、クラスターのリソースを節約するためにクラスターの自己修復は延期されます。デフォルトの延期時間は30分です。この延期時間は、vstorage -c <cluster_name> set-config
コマンドを使用してmds.wd.offline_tout_mnt
パラメータをミリ秒単位で設定することで調整できます。
レプリケーションが使用されている場合、自己修復には、より多くのネットワークトラフィックとCPUリソースが必要になります。一方で、イレージャーコーディングを使用した再構築は速度が遅くなります。
クラスターが自身で再構築できるようにするには、少なくとも次のリソースが用意されている必要があります。
冗長性モードに必要な数の正常なノード
1つのノードに保存できるデータ量と同じ量に対応できる十分な空き領域
最初の前提条件について次の例で説明します。5+2イレージャーコーディングモードで動作し、7つのノード(つまり、最小)で構成されるクラスターでは、ユーザーデータの各部分は冗長性を確保するために5+2のノードに配信されるため、各ノードが使用されます。1つまたは2つのノードで障害が発生した場合、ユーザーデータは失われ、クラスターは降格し、少なくとも7つのノードが再び正常になるまで(つまり、欠けているノードを追加するまで)再構築できません。一方、5+2イレージャーコーディングモードで動作し、10個のノードで構成されるクラスターでは、ユーザーデータの各部分は、CSの負荷を均等にするために10個のノードからランダムに選ばれた5+2のノードに配信されます。最大3つのノードで障害が発生した場合でも、このクラスターには再構築するための十分なノードがあります。
2番目の前提条件について次の例で説明します。10個の10TBノードで構成されるクラスターでは、各ノードで少なくとも1TBの空き領域を確保する必要があります。1つのノードで障害が発生した場合、9TBのデータは残りの9個のノードで再構築できます。ただし、10個の10TBノードと1つの20TBノードで構成されるクラスターの場合、最も大きいノードで障害が発生した場合に備えて、(最も大きいノードにも1TBの空き領域はありますが)容量の小さい各ノードで2TBの空き領域を確保する必要があります。
再構築のオーバーヘッドを取り除くのに役立つ2つの推奨事項:
再構築を簡単にするために、すべてのノードでディスクの数と容量サイズを統一する。
再構築によってネットワークにかかる負荷が増大し、読み書き操作の遅延が増加する。クラスターのネットワークの帯域幅が大きいほど、再構築が完了し、帯域幅が解放されるまでの時間が短くなる。