SQL Serverクラスターの1つにRAID0セットアップを使用することを検討しています。私は状況を概説し、これが悪い考えである理由を探しています。また、誰かがユースケース、ホワイトペーパー、またはその他のドキュメントを持っている場合は、このトピックについて私に指摘していただければすばらしいと思います。
SQLクラスターの一部である2つのデータセンターに3つのサーバーがあります。それらはすべて、可用性グループでSQL Serverを実行しています。プライマリのレプリカは、そのすぐ隣にあり、もう1つは他のデータセンターにあります。自動フェイルオーバーを備えた同期レプリケーションを実行しています。すべてのドライブはエンタープライズクラスのSSDです。彼らはSQL Server 2017または2019を実行します。
RAID0アレイで実行すると、実際の欠点がほとんどない場合でも、他の方法よりも複数の利点があると考えています。現在私が見ている唯一の欠点は、プライマリサーバーの冗長性の欠如です。そのため、障害が増加します。プロとして:
ドライブが故障した場合、誰かが手動で操作したという通知を受け取るまで、速度が低下した低下した状態で実行されるのではなく、サーバーはすぐにセカンダリに失敗し、完全な動作機能を維持します。これには、フェイルオーバーを通知するという追加の利点があるため、原因をより早く調査できます。
TB容量ごとに全体的な障害の可能性を減らします。パリティドライブやミラードライブは必要ないため、アレイあたりのドライブ数を減らします。ドライブ数が少ないほど、ドライブ障害。
もっと安い。必要な容量に必要なドライブの数が少ないほど、明らかにコストが低くなります。
これは従来のビジネス思考ではないことはわかっていますが、考慮していないことはありますか?私は、プロでもコンでも、どんな入力も好きです。
クエリのパフォーマンスを向上させるためにこれを行うことはしませんが、意味のあるものがあれば、遠慮なく指摘してください。私の主な関心事は、私が考えていなかった信頼性または冗長性の問題を考慮または対処できないことです。
OSは別のミラードライブ上にあるため、サーバー自体は稼働し続ける必要があります。これらのドライブの1つを交換して、再度ミラーリングできます。小さく、システムDB以外のデータベースファイルはありません。数分以上かかるとは思えません。データアレイの1つに障害が発生した場合、ドライブを交換し、アレイを再構築し、AGと復元して再同期します。私の個人的な経験では、復元はRAID5ドライブの再構築よりもはるかに高速です。 RAID1に障害が発生したことは一度もないので、その再構築が高速になるかどうかはわかりません。復元はバックアップから行われ、プライマリと一致するようにロールフォワードされるため、プライマリサーバーの負荷の増加は、ログの最後の数分間を回復されたレプリカと同期することだけが最小限である必要があります。
評価に欠けていると思う非常に重要な側面が1つあります。
どのように回復する予定ですか?
Raid5がドライブを失うと、自動的に回復するまで低下した状態で実行されます。 (少なくとも手元にホットスペアがある場合)。
Raid0がドライブを失うと、まったく回復できなくなります。これは、冗長性が失われたことを意味します。それを回復するには、raid0を再構築し、allデータ(壊れたドライブのデータだけでなく)を現在運用中のセカンダリからコピーして戻す必要があります。負荷。つまり、単一の機能低下したraid5アレイの代わりに、パフォーマンスに影響を与えるのは本番のセットアップ全体です。
Raid5(またはraid6)の低下した状態のパフォーマンスペナルティが対処できない場合は、おそらく代わりにraid 1 + 0を実行にする必要があります。はい、それはもっとコストがかかりますが、ディスクの価格は彼らがそうであるものであり、それはよく使われるお金になるでしょう。
たぶん、「raid5の状態をアクティブに監視し、ドライブに障害が発生したときに負荷をプライマリから転送する」ことが、欠点なくほとんどの利点をもたらすソリューションでしょうか。 (もちろん、ローカルの冗長性なしで実行することのクールさの要素を失うことは別として。)raid5ドライブの回復が完全なデータベースデータの同期よりもはるかに時間がかかる場合、raidソフトウェアが異常に動作しているか、または真剣に特大のディスクだと思います。
ここでは、ドライブ障害を考慮する必要があります。
ある特定の日のドライブの故障率が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つのノードすべてがダウンする可能性があります。
免責事項:上記の計算は簡略化されています-それらはまだ比較的正確です。
RAID0アレイで実行することには、実際の欠点がほとんどないとしても、他の方法よりもいくつかの利点があると私は考えています。
これは、内部/直接接続されたストレージドライブでAGを実行する場合の一般的な構成です。特にNVMeまたはその他のPCIベースのフラッシュストレージデバイスでは。
これは単に、ドライブの障害をサーバーの障害のように扱うことを意味します。少数のソリッドステートドライブでは、サーバーの他のソリッドステートコンポーネントに比べてドライブのMTBFが大幅に低いわけではないため、各ドライブを単に処理するだけです。サーバーの障害点として、ドライブ障害の場合はサーバーを交換/再構築します。
あなたが達成しようとしていることに興味をそそられますか?あなたは、このセットアップからパフォーマンスの向上を得ようとしているわけではないので、あなたは何を求めているのですか?
パフォーマンスの問題に注意してください:Enterprise Class SSDを実行している場合、RAID計算は本当にそれを改善するために必要なボトルネックの大部分ですか?
あなたの3人のプロを引き受けて、私はあなたが十分にそれを考えたとは思いません:
SQLはすぐにフェイルオーバーしますか?フェイルオーバーが自動的にトリガーされる原因は何ですか?サーバーは、誰かがドライブにアクセスするとすぐにドライブをオフラインにしますか? 1つのディスクの不良セクターである場合はどうなりますか? SQLが不良セクターにヒットしない場合、フェイルオーバーしますか?私はそれについて100%確信が持てません。
TB容量あたりの全体的な障害の可能性を減らしますか?ディスクの数が少ないほど障害点が少ないと考えられますが、私はそれは正しくないと思います。1台のディスクが失敗する確率1台のディスクまたは10台のディスク(または100台のディスク)がある場合は同じままですが、RAID 0の場合は、致命的な障害であることも意味します。
RAID5を使用するには、1つの追加SSDのコストがかかりすぎますか?どのようにしてRAID1 OR 1 + 0はバジェットを吹き飛ばすことができますが、追加のディスクが1つありますか?
冗長性がない場合、ディスクに障害が発生してRAIDがオフラインになると、RAIDを再構築してすべてのデータベースを最初から復元するまで、そのノードはオフラインになります。それを実現するためにどのようなプロセスをとりますか? DRへのレプリケーションが停止するため、可用性グループからデータベースを削除することはできませんが、何らかのアクションを実行しないと、他の2つのサーバーはログファイルを切り捨てることができません。それは大丈夫ですか?長い週末の金曜日の夜に失敗するとどうなりますか?それでも大丈夫ですか?あなたのセカンダリーは、蓄積されたその量のデータに対処できますか?
私の最後の質問は、あなたがより速くなるだろうと言っている再構築時間についてです。あなたはそれがより速くなると100%確信していますか?どれくらい速く?
Brent Ozarサーバーのセットアップ は、新しいSQLインスタンスをセットアップするためのガイドです。このガイドの最初のポイントは、どのドライブにもRAID0を使用していないことを確認することです。
====更新====
もう1つ考えてみてください。セカンダリサーバーがプライマリと同期していない場合はどうなりますか?同期レプリケーションを使用しても、セカンダリは自動的に非同期に戻ることができます。セカンダリを使用すると、フェイルオーバーによってデータが失われるため、自動フェイルオーバーができなくなります。これが発生する可能性のあるいくつかの例:
それらはEdgeケースですが、それらの期間中に何が失われたかに応じて、分類学的である可能性があります。