RAID1または5の代わりにRAID0これはおかしいですか?


14

SQL Serverクラスターの1つにRAID0セットアップを使用することを検討しています。私は状況の概要を説明し、これが悪い考えである理由を探しています。また、ユースケース、ホワイトペーパー、または他のドキュメントを持っている人がこのトピックについて私に指摘できるなら、それは素晴らしいことです。

SQLクラスターの一部である2つのデータセンターに3つのサーバーがあります。それらはすべて、可用性グループでSQL Serverを実行しています。プライマリには、すぐ隣にレプリカがあり、もう1つは他のデータセンターにあります。自動フェールオーバーを使用して同期レプリケーションを実行しています。すべてのドライブはエンタープライズクラスのSSDです。SQL Server 2017または2019を実行します。

RAID0アレイで他の方法よりもRAID0アレイ上で実行することには、実際の欠点があったとしてもわずかしかありませんが、複数の利点があると考えています。私が現在見ている唯一のマイナスは、プライマリサーバーの冗長性の欠如です。長所として:

  1. 誰かが手動で操作を行うという通知を受け取るまで、速度が低下した状態で実行されるのではなく、ドライブに障害が発生した場合、サーバーはすぐに二次側に障害を起こし、完全な動作能力を維持します。これには、フェールオーバーを通知するという追加の利点があるため、原因をより早く調査できます。

  2. TB容量ごとの全体的な障害の可能性を減らします。パリティドライブまたはミラードライブは必要ないため、アレイあたりのドライブ数を減らします。ドライブが少ないほど、ドライブが故障する可能性が低くなります。

  3. もっと安い。必要な容量に必要なドライブの数が少ないことは明らかにコストがかかりません。

これは従来のビジネス思考ではないことは知っていますが、検討していないことはありますか?私は、賛否両論の入力を歓迎します。

クエリのパフォーマンスを向上させるためにこれをしようとはしていませんが、意味のあるものがあれば、気軽に指摘してください。私の主な関心事は、私が考えていなかった信頼性または冗長性の問題を考慮または対処できないことです。

OSは別のミラードライブ上にあるため、サーバー自体は動作し続ける必要があります。これらのドライブの1つを交換して、再びミラー化できます。それは小さく、システムDB以外のデータベースファイルはありません。数分以上かかるとは想像できません。データアレイの1つに障害が発生した場合、ドライブを交換し、アレイを再構築して、AGと復元および再同期します。私の経験では、復元はRAID5ドライブの再構築よりもはるかに高速です。RAID1で障害が発生したことは一度もないので、その再構築が高速になるかどうかはわかりません。リストアはバックアップから行われ、プライマリと一致するようにロールフォワードされるため、プライマリサーバーの負荷の増加は、回復したレプリカと最後の数分間のログのみを同期する必要があります。


回答:


19

評価に欠けていると思う非常に重要な側面が1つあります。

どのように回復する予定ですか?

raid5がドライブを失うと、自動的に回復するまで劣化状態で実行されます。(少なくとも、手元にホットスペアがある場合。)

raid0がドライブを失うと、まったく回復できなくなります。これは、冗長性が失われたことを意味し、それを回復するには、raid0を再構築し、現在の負荷がかかっているセカンダリからすべてのデータ(破損したドライブ上のデータだけでなく)をコピーする必要があります。つまり、単一の劣化したraid5アレイの代わりに、パフォーマンス全体に影響を与えるのは実稼働環境全体です。

raid5(またはraid6)による状態パフォーマンスの低下が対処できない場合は、代わりにraid 1 + 0を実行する必要があります。はい、それはより多くの費用がかかりますが、ディスクの価格はそれらが何であるか、それはよく使われるお金になるでしょう。

たぶん「raid5の状態を積極的に監視し、ドライブに障害が発生したときに負荷をプライマリから移す」ことが、欠点のないほとんどの利点をもたらすソリューションでしょうか。(別にもちろん、任意のローカル冗長性なしで実行しているの涼しさの要因を失ってから。)あなたのRAID5ドライブの回復はどちらかお使いのRAIDソフトウェアが妙に動作している、またはあなたが持っている、完全なデータベースのデータ同期よりも多くの時間がかかっている場合は真剣に特大のディスクを、私は思うだろう。


16

ここでは、ドライブの障害を考慮する必要があります。

特定の日のドライブの障害率が1/1000であると想像してください。3つのアレイのそれぞれに20個のドライブがあると想像してください。

したがって、アレイ内で単一のドライブが故障する可能性は20/1000 = 1/50です。同じアレイ内で2つのドライブが故障する可能性は、20/1000 * 20/1000 / 2 = 200/1000000 = 1/5000に近いものです。そのため、RAID 0からRAID 5に切り替えることで、アレイの1つを殺す可能性はすでにかなり低くなっています。

したがって、これをさらに進めることができます-1日でアレイが故障する可能性が1/50である場合、1日で2つのアレイが故障する可能性は1 /(50 * 50)= 1/2500です。 2つの同一のRAID 0アレイに障害が発生する可能性は、同じディスクセットを想定して、1つのRAID 5アレイに障害が発生する場合の2倍です。障害の可能性のこの指数関数的な増加は、複数のアレイが一度に障害を起こす可能性を大幅に増加させるため、心配する必要があります

これらのディスクの寿命は長い可能性が高いため、上記の数値を実行して、信頼性にどのような影響があるかを直接確認できます。ドライブの仕様を投稿できる場合は、この投稿に計算を追加できます。リスクが許容できるかどうかは、組織が決定します。

注意すべきもう1つの項目は、同じバッチ内(同じ工場、同じ時間)に製造されたSSDを利用することで、ドライブ障害の可能性を高めることができるということです。注意しないと、この問題が原因で3つのノードすべてがダウンする可能性があります。

免責事項:上記の計算は簡略化されています-まだ比較的正確です。



13

RAID0アレイで他の方法よりもRAID0アレイ上で実行することには、実際の欠点があったとしてもわずかしかありませんが、複数の利点があると考えています。

これは、内部/直接接続のストレージドライブでAGを実行する場合の非常に一般的な構成です。特にNVMeまたはその他のPCIベースのフラッシュストレージデバイスで。

単にサーバー障害のようなドライブ障害を処理することになります。少数のソリッドステートドライブでは、サーバーの他のソリッドステートコンポーネントの場合よりもドライブのMTBFが大幅に低くなることはないため、各ドライブを障害のポイントとして扱うだけです。サーバー、およびドライブ障害の場合にサーバーを交換/再構築します。


2

あなたが達成しようとしていることに興味がありますか?あなたはこのセットアップからパフォーマンスの向上を得ようとはしていないと自分自身に言いますが、どのようなゲインを得ようとしていますか?

パフォーマンスの問題に関する注意:エンタープライズクラスのSSDを実行している場合、RAID計算は本当にそれを改善する必要があるボトルネックの多くですか?

あなたの3人のプロを取り上げて、あなたはそれを十分に考えたとは思わない:

  1. SQLはすぐにフェールオーバーしますか?フェールオーバーが自動的にトリガーされる原因は何ですか?サーバーは、誰かがヒットするとすぐにドライブをオフラインにしますか?1つのディスク上の単なる不良セクタの場合はどうなりますか?SQLが不良セクタにヒットしない場合、フェールオーバーしますか?私はそれについて100%確信していません。

  2. TB容量あたりの全体的な障害の可能性を減らしますか。ディスクの数が少ないほど故障点が少ないと思われますが、それは正しいとは思いません。1台のディスクまたは10台のディスク(または100台のディスク)がある場合、1台のディスクに障害が発生する可能性は同じですが、RAID 0では致命的な障害であることも意味します。

  3. RAID5を入手するには、1台のSSDが余分にコストがかかりすぎませんか?RAID1 OR 1 + 0が予算を圧迫する可能性がありますが、余分なディスクが1つありますか?

冗長性がないため、ディスクに障害が発生してRAIDがオフラインになると、RAIDを再構築してすべてのデータベースを最初から復元するまで、そのノードはオフラインになります。それを実現するためにどのようなプロセスを取りますか?可用性グループからデータベースを削除することはできません。これにより、DRへのレプリケーションが停止しますが、何らかのアクションを実行しないと、他の2つのサーバーはログファイルを切り捨てることができません。それは大丈夫ですか?長い週末の金曜日の夜に失敗するとどうなりますか?まだ大丈夫ですか?セカンダリは、蓄積されたそのデータ量に対処できますか?

私の最後の質問は、あなたが言及した再構築時間がより早くなることです。もっと速くなると100%確信していますか?どれくらい速いですか?

Brent Ozarサーバーのセットアップは、新しいSQLインスタンスをセットアップするための頼りになるガイドです。ガイドの最初のポイントは、ドライブにRAID0を使用していないことを検証することです。

==== UPDATE ====

予備の考えとして、セカンダリサーバーがプライマリサーバーと同期していない場合はどうなりますか?同期レプリケーションを使用しても、セカンダリは自動的に非同期に戻ることができ、フェイルオーバーによりデータが失われるため、自動フェイルオーバー機能が失われます。これが発生する可能性のあるいくつかの例:

  1. 非常に大きなインデックスの再構築-セカンダリの一方または両方で複製が遅れる場合があります
  2. セカンダリへのパッチ適用中のRAID0でのディスク障害。プライマリがオフラインになっているため、パッチを適用しているサーバーがオンラインに戻れない場合があります。

それらはエッジケースですが、その間に失われたものによっては壊滅的なものになる可能性があります。


#3のポイントに加えて、追加のディスク(または3つ)のコストが予算を左右する場合、1つのディスクが故障した場合、どこからお金を交換するのですか?
CVn

@Gregすべてを熟考していなかったかもしれないという事実が、私がこの質問をしている理由です。私は全体として効率を改善できる場所を見ていると言うと思います。質問に答えるには:1.はい。アレイに障害が発生すると、AGはすぐに別のノードに障害を起こします。不良セクタは、回復可能なビットエラーであるかどうかによって異なりますが、ディスクがあらゆる種類のRAIDであるかどうかに関係なく、エラーが発生します。2.ディスクが少ないと、アレイで障害が発生する可能性が低くなります。RAID0は、アレイの障害の可能性を高めます。3.いいえ、お金の節約は特典です。
zsqlman

@Greg良いフォローアップの質問と、私が完全に具体化していないものもありました。冗長性の層は多数あり、サーバーはトリプルです。すべてのデータベースの復元は、簡単にスクリプト化できます。ノードに障害が発生した場合、AGからそのレプリカを削除して、Tlogバックログの問題を削除します。ノードを削除しなくても、数日分のログの増加に対応できる十分なスペースがあります。復旧時間については、データポイントが1つしかなく、テストするための予備のハードウェアはありません。RAIDの障害は1つしかなく、復旧に2日以上かかり、8時間で復元できます。
-zsqlman

@zsqlman-RAIDがないためにデータを失う可能性のある時間を追加しました。また、障害を減らすために適用するロジックにはまだ欠陥があると思います。RAIDのディスクが少ない場合に1つのディスクが故障する可能性は、RAIDの冗長性が1つのディスクが故障した場合と同じです。ディスクの数を減らしても、1つのディスクが故障するリスクは減りません-各ディスクは他のディスクと同じように故障する可能性があります。
グレッグ

各ディスクの障害発生率が同じであることは正しいです。ディスクが少ないほど、障害が発生する可能性は低くなります。
zsqlman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.