この章では、構成を設定するためのガイドラインを示します。次の表を参考にして、必要な箇所を探してください。
構成の計画を行う際に留意しなければならないことは、どのようなアプリケーションでもパフォーマンス、可用度、ハードウェアコストとの間にはトレードオフの関係がある (同時にすべてを満足させることはできない) ということです。いろいろな要素を変えてみて、構成に最も適した組み合わせを探してください。
最高のパフォーマンスを提供するのはストライプですが、この方式ではデータの保護は行いません。書き込みが多いアプリケーションでは、RAID5 よりミラーのほうが良いパフォーマンスを提供します。
可用度のかね合い
ミラーと RAID5 メタデバイスはデータの可用度が高くなりますが、書き込みのパフォーマンスは低下します。ミラーでは、ランダムな読み取りのパフォーマンスが向上します。
ハードウェアコストのかね合い
ミラーより RAID5 メタデバイスの方がコストを低く抑えることができます。ストライプ方式および連結方式メタデバイスは、追加のハードウェアコストはかかりません。
この節では、単純連結、ストライプ、ミラー、RAID5 メタデバイス、状態データベースの複製、およびメタデバイス上のファイルシステムを構築するためのガイドラインを示します。
単純連結はストライプほど CPU 時間を必要としません。
単純連結は小規模のランダム入出力に適しています。
ディスクジオメトリ (幾何学的配置) が異なる物理ディスクを使用してはなりません。
ディスクジオメトリとは、ディスクドライブの各シリンダでのセクターとトラックの編成を意味します。UFS は、ディスクジオメトリを効率よく使用するように、ファイルシステムを編成します。連結方式メタデバイスの各スライスが異なるディスクジオメトリを持っている場合、DiskSuite は先頭スライスのジオメトリを使用します。この結果、UFS ファイルシステムの効率が低下します。
ゾーンビット記録 (ZBR) 方式を使用しているディスクでは、スピンドルからの距離によって各シリンダのデータ量が異なるため、ディスクジオメトリの違いは問題にはなりません。現在では、ほとんどのディスクが ZBR 方式を使用しています。
単純連結を構築する場合には、異なるコントローラとバス上にスライスを分散させます。複数のコントローラやバスにスライスを分散させることによって、全体の入出力負荷を均一にすることができます。
ストライプの飛び越し値を適切に設定しなければなりません。
ストライプ方式メタデバイスの物理ディスク数が多いほど、入出力パフォーマンスが向上します (ただし、平均故障間隔が短くなるため、ストライプ方式メタデバイスのミラー化を考慮する必要があります) 。
ストライプ方式メタデバイスでは、サイズの異なるスライスを混在させてはなりません。ストライプ方式メタデバイスでは、すべてのスライスにおいて利用可能なサイズが制限を受け、最小のスライスのサイズと同じになってしまいます。
ディスクジオメトリが異なる物理ディスクを使用してはなりません。
ストライプ方式メタデバイスは、異なるコントローラとバスに分散させます。
既存のファイルシステムに対してストライプを構築することはできません。
ストライプは、大規模な順次敵入出力や、入出力が均等にならない場合に適しています。
ストライプは、単純連結より CPU 時間を必要としますが、そのコストに見合うだけの効果があります。
ストライプでは、データの冗長性は提供されません。
ミラーは、スレッド化された入出力または非同期入出力の場合のみ、読み取りパフォーマンスが向上します。メタデバイスからシングルスレッドの読み取りしか行わない場合には、パフォーマンスは向上しません。
ミラーは、1 回の論理的書き込みを完了させるために、データのコピーを 2 つ書き込まなければならないため、書き込みパフォーマンスが 15 〜 50% 程度低下します。書き込みが集中しているアプリケーションでは、ミラーは全体のパフォーマンスを低下させます。しかし、ミラーによる書き込みパフォーマンスの低下は、RAID5 によるパフォーマンス低下 (約 70%) より少なくなっています。図 7-1 を参照してください。
UNIX オペレーティングシステムでは、ファイルシステムキャッシュを実装しています。読み込み要求はこのキャッシュで満たされる場合が多いので、ファイルシステムを介した物理的入出力の読み書きの比率は、書き込みの方に極端に偏ります。
たとえば、あるアプリケーションの読み書きの比率が、読み取り 80% 、書き込み 20% であるとします。しかし、多くの読み取り要求はファイルシステムキャッシュで満たされるため、物理的な入出力の読み書きの比率は、読み取り 60% 、書き込み 40% というように、まったく異なる値になることがあります。多くのメモリーがバッファーキャッシュに割り当てられている場合には、読み書きの比率が (読み取り 80% 、書き込み 20% が、読み取り 40% 、書き込み 60% といった具合に) 逆転する場合もあります。
RAID5 は、1 つのデバイスの故障にしか対応しません。
ミラーメタデバイスは、複数デバイスの故障に対応する場合もあります (障害の発生したデバイスがすべて同じサブミラー上である場合など) が、RAID5 メタデバイスは 1 つのデバイスの故障にしか対応しません。ストライプ方式および連結方式メタデバイスは、1 つでもデバイスが故障すると動作できません。
RAID5 メタデバイスは、エラーが発生していない状態では、読み取りパフォーマンスが向上しますが、エラー状態では読み取りパフォーマンスが低下します。
RAID5 メタデバイスのデバイスが故障すると、複数の入出力操作によって既存のドライブのデータとパリティ情報からデータを再生成しなければならないため、読み取りパフォーマンスが低下します。ミラーメタデバイスの場合は、デバイスが故障しても、このようなパフォーマンスの低下はありません。
RAID5 メタデバイスでは、書き込みパフォーマンスが低下します。
RAID5 メタデバイスでは、パリティを計算して、データとパリティの両方を書き込まなければならず、そのためには複数の入出力操作が必要になるため、RAID5 メタデバイスでは書き込みパフォーマンスが低下します。ミラーメタデバイスでは、データを複数のミラーに書き込むために書き込みパフォーマンスが低下しますが、書き込みが多いアプリケーションでは、ミラーのほうが RAID5 メタデバイスより高い書き込みパフォーマンスを提供します。
RAID5 メタデバイスは、ミラー化より安いハードウェアコストで構築できます。
ミラー化では、2 面ミラーであれば通常の 2 倍のディスク領域を必要とします。したがって、ミラー化より RAID5 メタデバイスのほうが、ハードウェアコストが安くなります。RAID5 メタデバイスでパリティを格納するのに必要なディスク領域は、「ディスク数分の 1」です。
既存のファイルシステムに対して RAID5 メタデバイスを構築することはできません
既存のファイルシステムを RAID5 メタデバイスでカプセル化することはできませんので、ファイルシステムのバックアップを取ってから復元させなければなりません。
構成が変更されると、すべての複製が書き込まれます。
ミラーのダーティー領域ビットマップに対しては、 (1 つのミラーに対して) 2 つの複製のみが更新されます。
適切な平均値は、3 つのミラーに対して 2 つの複製です。
書き込みが多いアプリケーションでは、1 つのミラーに対して 2 つの複製を使用してください。
読み取りが多いアプリケーションでは、10 個のミラーに対して 2 つの複製を使用してください。
newfs(1M) コマンドに対するデフォルトの i ノード密度の値 (-i オプション) は、大規模なファイルシステムには最適ではありません。newfs コマンドで新規のファイルシステムを作成する際は、i ノード密度を、デフォルトの 2 KB のファイル領域につき 1 i ノードではなく、8 KB につき 1 i ノード (-i 8192) に設定してください。現在、一般的なファイルのサイズは、1980 年頃の 1 KB ではなく、64 KB 以上になっています。
8 G バイトを超える大きなメタデバイスでは、次のコマンドのように、シリンダグループのサイズを 256 シリンダに増やす必要がある場合もあります。
# newfs -c 256 /dev/md/rdsk/d114 |
Solaris 2.3 および 2.4 のマニュアルページでは、最大サイズが 32 シリンダ/シリンダグループであると記述していますが、誤りです。
可能であれば、ファイルシステムのクラスタサイズを、ストライプ幅の整数倍に設定します。
たとえば、順次入出力に対して次のパラメータを設定します。
maxcontig = 16 (16 * 8 ブロック = 128 K バイトクラスタ)
飛び越し値を 32K バイトに指定した 4 方向ストライプを使用すると、ストライプ幅は 128 K バイトになり、パフォーマンスが向上します。
飛び越しサイズ = 32 K バイト (32 K バイトのストライプユニットサイズ * 4 ディスク = 128 K バイトのストライプ幅)
ファイルシステムの maxcontig パラメータを設定することによって、ファイルシステムの入出力クラスタサイズを制御することができます。このパラメータは、回転待ちを挿入する前に順次して割り当てられる (1 つのファイルに属する) ブロックの最大数を指定します。
ファイルシステムの入出力クラスタサイズがストライプ幅の整数倍であると、パフォーマンスが向上する場合があります。たとえば、maxcontig パラメータを 16 に設定すると、128 K バイトのクラスタ (16 ブロック * 8 K バイトのファイルシステムブロックサイズ) になります。
mkfs(1M) コマンドのオプションを使用すれば、デフォルトの minfree、i ノード密度、シリンダ/シリンダグループ、maxcontig の設定を変更できます。maxcontig と minfree の設定は、tunefs(1M) コマンドでも変更できます。
詳しい説明は、mkfs(1M)、tunefs(1M)、newfs(1M) コマンドのマニュアルページを参照してください。
利用できるディスクドライブ間で入出力の負荷を均一に分散させるように、データを物理ドライブに割り当てます。
もっとも頻繁にアクセスされるデータを調べて、ミラー化またはストライプによって、そのデータに対するアクセスバンド幅を広げます。
ストライプ方式メタデバイスと RAID5 メタデバイスは、どちらも複数のディスクドライブにデータを分散させて、入出力負荷を均一に保ちます。入出力負荷の均衡を保つためには、ミラー化も有効です。
DiskSuite ツールのパフォーマンスモニタ機能や、iostat(1M) などの OS ツールを使用して、もっとも頻繁にアクセスされるデータを調べます。該当するデータが見つかったら、ミラー化、ストライプ、または RAID5 を使用して、そのデータへのアクセスバンド幅を広げます。
この節では、RAID5 メタデバイスとストライプ方式メタデバイスのパフォーマンスを比較します。
RAID5 メタデバイスとストライプ方式メタデバイスの入出力パフォーマンス
ストライプ方式メタデバイスのほうが RAID5 メタデバイスより高いパフォーマンスを提供しますが、ストライプ方式メタデバイスはデータの保護 (冗長性) を提供しません。
RAID5 メタデバイスは、パリティの計算と格納を実行するために余分な入出力操作を必要とするため、書き込みパフォーマンスはストライプ方式メタデバイスより低下します。
raw ランダム入出力読み取りでは、ストライプ方式メタデバイスも RAID5 メタデバイスもパフォーマンスは同じです。ストライプ方式メタデバイスも RAID5 メタデバイスも複数のディスクにデータを分割しており、読み取り操作では RAID5 メタデバイスのパリティ計算は、スライス障害時を除いて問題にならないからです 。
raw ランダム入出力書き込みでは、 RAID5 メタデバイスはパリティの計算と値の格納を実行するために余分な入出力操作を必要とするため、ストライプ方式メタデバイスのほうがパフォーマンスが高くなります。
raw 順次入出力操作では、ストライプ方式メタデバイスのパフォーマンスが最も高くなります。raw 順次書き込みでは、 RAID5 メタデバイスはパリティの計算と格納を実行するために余分な入出力操作を必要とするため、ストライプ方式メタデバイスのよりパフォーマンスが低くなります。
この節では、ランダム入出力と順次入出力の違いと、特定の構成に対する DiskSuite の最適化戦略について解説します。
ランダム入出力の定義
ランダム入出力環境の例としては、データベースや汎用ファイルサーバーなどがあります。ランダム入出力では、ディスクのシーク時間や回転応答時間によって入出力サービス時間が決定されます。
ランダム入出力を理解することの必要性
ランダム入出力環境のメリットを利用することで、パフォーマンスを向上させることができます。
ランダム入出力環境の構成戦略
入出力要求のサービス中は、すべてのディスクスピンドルをビジーにするのが理想です。ランダム入出力要求は小規模 (通常は 2 〜 8 K バイト) なので、ランダム入出力を複数のディスクドライブに分割するのは効率的ではありません。
データをすべてのディスクに単純に分散させるため、飛び越し値は重要ではありません。通常の入出力要求より大きな飛び越し値であれば問題ありません。
たとえば、4.2 G バイトの DBMS テーブル領域があるとします。4 つの 1 .05 G バイトのディスクスピンドルに渡ってストライプ化して、入出力負荷が完全にランダムでテーブル範囲全体に広がっている場合には、4 つのスピンドルは均等にビジーになります。
ランダム入出力パフォーマンスの目標最大値 (DiskSuite ツールのパフォーマンスモニターまたは iostat(1M) コマンドで調べることができます) は、35% です。65% を超えるディスク使用状況が続く場合には、問題となります。さらにその値が 90% を超える場合は、重大な問題です。
100% で動作しているディスクを 4 つのディスクにストライプ化した場合には、各ディスクが 25% (= 100/4) で動作するものと考えがちです。しかし実際には、 (1 つのディスクの 100% に対する) スループットを人為的に制限しているわけではないので、すべてディスクの使用状況は 35% を超えるでしょう。
ディスク入出力のパフォーマンスを順次パフォーマンスで判断するケースがよくありますが、実際には、順次入出力を行なっているサーバーはごくわずかです (フルテーブルスキャンのみを実行する DBMS サーバーや、極端にデータアクセスが集中するような環境にある NFS サーバーなどのみです) 。
順次入出力について理解する必要性
順次入出力環境のメリットを利用することで、パフォーマンスを向上させることができます。
この場合の目標は、1 つのディスクから得られるパフォーマンスより高い順次パフォーマンスを引き出すことです。このためには、ストライプ幅を通常の入出力要求サイズより小さく設定しなければなりません。この結果、通常の入出力要求が複数のディスクスピンドルに分散され、順次バンド幅が広がります。
順次入出力環境の最適化戦略
飛び越し値を通常の入出力要求サイズより小さい値に設定することによって、1 つのディスクから得られるパフォーマンスより高い順次パフォーマンスをアレイから引き出します。
max-io-size / #-disks-in-stripe (最大入出力サイズ/ストライプのディスク数)
例:
通常の入出力要求サイズが 256 K バイトであり、4 つのスピンドルに渡ってストライプ化するとします。この場合に最適なストライプのユニットサイズは、次のように計算されます。
256 K バイト / 4 = 64 K バイト以下
順次入出力では、シーク時間と回転時間は存在しないことになります。順次入出力を最適化する場合には、ディスクの内部転送レートが最も重要になります。
まず最初に、max-io-size / #-disks-in-stripe (最大入出力サイズ/ストライプのディスク数) の値を調整することをお勧めいたします。UFS ファイルシステムでは、maxcontig パラメータによってファイルシステムのクラスタサイズが制御されます (デフォルトは 56 K バイト) 。一部の順次アプリケーションでは、このクラスタサイズを大きくすることによってパフォーマンスを向上させることができます。たとえば、maxcontig を 12 に設定すると、ファイルシステムのクラスタサイズは 96 K バイト (12 * 8 K バイトブロック) になります。飛び越し値が 24 K バイトの 4 方向ストライプを使用すると、ストライプ幅は 96 K バイト (= 4 * 24 K バイト) になり、パフォーマンスを向上させることになります。
例:順次アプリケーションでは、通常の入出力要求サイズは大きくなります (128 K バイト、場合によっては 1 M バイト以上) 。通常の入出力要求サイズが 256 K バイトで、4 つのディスクスピンドルに渡ってストライプする場合には、256 K バイト / 4 = 64 K バイトですから、最適な飛び越し値は 32 〜 64 K バイトになります。
ストライプ数:ストライプの場合には、先にパフォーマンス条件を決めてしまうというアプローチもあります。たとえば、あるアプリケーションで 10.4 M バイト/秒のパフォーマンスが要求され、各ディスクのパフォーマンスが約 4 M バイト/秒であるとします。この場合には、ストライプすべきディスクスピンドル数は、次のように計算されます。
10.4 M バイト/秒 / 4 M バイト/秒 = 2.6
したがって、3 つのディスクが必要になります。
ストライプは、既存のファイルシステムをカプセル化するために使用することはできません。
ストライプは、大規模な順次的入出力や、入出力が均等にならない場合に適しています。
ストライプは、単純連結より CPU 時間を必要としますが、そのコストに見合うだけの効果があります。
ストライプは、データの冗長性を提供しません。
要約すると、ストライプは大規模な順次入出力と不均一な入出力分散のパフォーマンスを向上させますが、データの冗長性は提供しないということです。
書き込みの多いアプリケーション:
RAID5 は「読み取り−修正−書き込み」という性質を持っていますので、書き込みが 20% を超えるアプリケーションでは、RAID5 を使用しない方がよいでしょう。データの保護が必要であれば、ミラー化を使用します。
RAID5 は、ミラーより書き込みパフォーマンスが低くなりますので、当然のことながら、データを保護しないメタデバイスより低くなります。SPARCstorage Array に搭載されている NVRAM キャッシュにより、RAID5 とミラーのギャップはなくなります。
ストライプ幅単位の書き込み:
RAID5 は、 (ディスク障害が発生して低パフォーマンスモードで動作している場合を除いて) 高い読み取りパフォーマンスを提供しますが、「読み取り−修正−書き込み」という性質のため、書き込みパフォーマンスは低くなります。
特に、書き込みサイズがストライプ幅より小さい場合、つまりストライプと整合がとれていない場合には、複数の入出力 (読み取り−修正−書き込みシーケンス) が必要になります。最初にデータとパリティをバッファに読み込み、次にパリティを修正して (データとパリティの排他的論理和を取ってから新しいパリティを計算して) 新しいパリティとデータをログに書き込み、最後に新しいパリティとデータをデータストライプユニットに書き込みます (この場合、排他的論理和とは古いデータをパリティから論理的に差し引いてから新しいデータをパリティに論理的に加えることをさします)。
ストライプ幅単位の書き込みでは、読み込み−修正−書き込みシーケンスが必要ないため、パフォーマンスはさほど低下しません。この場合には、新しいすべてのデータストライプの排他的論理和を取ってパリティを生成し、新しいデータとパリティをログに書き込んでから、新しいデータとパリティを 1 回の操作でストライプユニットに書き込みます。
ストライプ幅単位の書き込みは、入出力要求がストライプと整合がとれていて、入出力サイズが正確に一致している場合に使用されます。
interlace_size * (num_of_columns -1)
たとえば、RAID5 構成を 4 つのコラムでストライプ化した場合、各ストライプでは、3 つのチャンクにデータが格納され、残りの 1 つのチャンクにパリティが書き込まれます。この例では、入出力要求がストライプの先頭から始まっていて、入出力サイズが stripe_unit_size * 3 に等しければ、ストライプ幅単位の書き込みが使用されます。ストライプユニットサイズが 16 K バイトで、整列している入出力要求のサイズが 48 K バイトであれば、ストライプ幅単位の書き込みが使用されます。
パフォーマンス低下モード:
RAID5 メタデバイスのスライスが故障すると、パリティを使用してデータが再構築されます。この操作では、RAID5 メタデバイスの各カラムからの読み取りを行います。RAID5 メタデバイスに割り当てられているスライス数が多いほど、故障したデバイスに向けられた入出力 (RAID5 メタデバイスの再同期を含む) に掛かる時間が長くなります。
ログ (ロギングデバイス) は、頻繁にアクセスされます。最大のパフォーマンスを引き出すためには、入出力負荷の高いディスクにログを配置しないようにします。ディスクの中央にログを配置することで、ログをアクセスするときの平均シーク時間を最小限に抑えることができます。
入出力負荷の均衡を保つため、同じトランスメタデバイスのロギングデバイスとマスターデバイスは、異なるドライブ (できれば異なるコントローラ) 上に配置します。
ログの共有:トランスメタデバイスはロギングデバイスを共有できますが、入出力負荷が高いファイルシステムに対しては、独立したログを用意しておきます。ロギングデバイスを共有する際のデメリットは、エラーの種類によっては、ロギングデバイスを共有しているすべてのファイルシステムに対して fsck(1M) コマンドを実行しなければならなくなるという点です。
ログサイズが大きくなるほど、パフォーマンスは向上します。ログサイズが大きいほど、並列性 (1 秒間に実行できるファイルシステム操作数) が向上します。
ロギングデバイスの絶対的な最小サイズは 1 M バイトです。適切なパフォーマンスを確保するための平均ログサイズは、100 M バイトあたり 1 M バイトです。1 G バイトあたり少なくとも 1 M バイトのログを持つことをお勧めします。
4 G バイトのファイルシステムがあるとします。この場合に推奨されるログサイズは次のようになります。
高いパフォーマンスを実現したければ 40 M バイト (100 M バイトあたり 1 M バイト)
推奨される最小ログサイズは 4 M バイト (1 G バイトあたり 1 M バイト)
絶対的な最小ログサイズは 1 M バイト
ログはすべてミラー化してください。デバイスエラーでログが失われると、ファイルシステムの一貫性が失われた状態となってしまい、fsck(1M) コマンドでもユーザーの介入がなければファイルシステムを修復できなくなってしまうことがあります。
状態データベースの複製には、すべてのメタデバイスとホットスペアの構成および状態に関する情報が格納されます。冗長性を提供するため、複数のコピー (複製) が取られています。複数のコピーを保存しておくことにより、システムクラッシュ (ほとんどの場合、状態データベースの複製は 1 つしか破壊されません) が発生しても状態データベースを守ることができます。
状態データベースの複製は、ミラーの再同期領域でも使用されます。ミラー数と比較して状態データベースの複製の数が少なすぎる場合には、複製の入出力によってミラーのパフォーマンスが低下する場合があります。
最低 3 つの複製を用意しなければなりません。DiskSuite では、最大 50 個までの複製を作成できます。ガイドラインは次のとおりです。
ドライブが 1 つのシステムでは、3 つの複製をすべて 1 つのスライスに配置する。
ドライブが 2 〜 4 つのシステムでは、各ドライブに複製を 2 つずつ配置する。
ドライブが 5 つ以上のシステムでは、各ドライブに複製を 1 つずつ配置する。
特定箇所の故障に備えて、状態データベースの複製を複数のスライス、ドライブ、およびコントローラに分散させてください。
各状態データベースの複製は、デフォルトでは 517 K バイト (1,034 個のディスクセクター) のディスク領域を専有します。複製は、専用のディスクパーティション、メタデバイスの一部となるディスクパーティション、ロギングデバイスの一部となるディスクパーティションのいずれかに格納できます。
状態データベースの複製は、ルート (/) 、swap、/usr、および既存のファイルシステムやデータが格納されているスライスには格納できません。
最低 3 つの状態データベースの複製が必要な理由
特定箇所の故障が発生した場合には、過半数の状態データベースの複製が正常でなければ、システムは動作を続行できません。したがって、最低 3 つの状態データベースの複製が必要になります。デバイス障害などによって状態データベースの複製を失うと、DiskSuite の実行中やシステムのリブート中に問題が発生することがあります。
DiskSuite による不良複製の扱い
過半数以上の状態データベースの複製が正常であれば、システムは問題なく動作します。正常な複製が過半数を割ると、データの破壊を防ぐため、システムパニックとなります。
過半数以上の状態データベースの複製が正常でなければ、システムはリブートしません。この場合には、シングルユーザーとしてリブートし、不良な複製を (metadb コマンドで) 削除してください。
たとえば、4 つの複製を使用しているとします。このうちの 2 つ (半数) が正常であれば、システムは動作を続けられますが、リブートするためには、過半数 (半数 + 1) の複製が必要です。
ディスクが 2 つの構成では、各ディスクに複製を 2 つずつ (合計 4 つ) 作成します。たとえば、ディスクが 2 つあるのに複製を 3 つ (片方のディスク上で 2 つ、他方のディスク上で 1 つ) しか作成しなかったとします。この場合、2 つの複製が格納されているディスクが故障すると、正常な複製は 1 つだけになってしまうため、DiskSuite は機能を停止します。
ディスクが 2 つの構成で各ディスクに状態データベースの複製を 2 つずつ作成した場合、片方のディスクが故障しても DiskSuite は動作を続行できます。しかしながら、リブートには過半数の複製が必要であるため、システムをリブートすることはできません。
複数のコントローラを使用している場合には、すべてのコントローラにできるだけ均一に複製を配置します。これによって、冗長性が提供されるため、コントローラ障害に備えることができます。また、負荷も分散します。1 つのコントローラ上に複数のディスクが存在する場合には、各コントローラで 2 つ以上のディスク上に複製を配置してください。
データベースの複製が複数存在する場合には、どのデータベースのデータが有効で正しいかを決定しなければなりません。DiskSuite では、多数決アルゴリズムによって、この判断を行います。このアルゴリズムは、過半数 (半数 + 1) の複製が一致していれば、それらの内容は有効である (破壊されていない) と判断します。このアルゴリズムを有効にするために、ディスク構成を設定する際には 3 つ以上の状態データベースの複製を作成しなければなりません。3 つの複製のうちの 2 つが利用できれば、多数決による意見の一致が得られることになります。複製を 1 つしか用意していない状況でシステムクラッシュが発生すると、すべてのメタデバイス構成データが失われることがあります。
多数決アルゴリズムでは、1 つの複製に有効な最新データが入っていたとしても、過半数のコンセンサスが得られない限り、そのデータは使用されません。その意味ではこのアルゴリズムは保守的であるといえますが、どのような障害が発生した場合でも、不良データが間違って使用されないことを保証します。
多数決アルゴリズムによって、次のように動作することが保証されます。
システムは、常に過半数以上の状態データベースの複製とともに動作する。
過半数の状態データベースの複製が利用できない場合、システムはパニックを起こす。
過半数の状態データベースの複製が利用できない場合、システムはリブートできない。