BBUの目的は何でしょうか。私が最初に理解したのは、停電時にキャッシュがディスクにデータを書き込むことができるということでした。ただし、一部の仕様では、BBUは最大72時間データを保持できるとしています。私はデータがミリ秒以内にディスクに書き込まれることを期待します(ただし、ディスクにもまだ電力があることを前提とします)。
では、BBUはキャッシュを保護するだけでなく、ディスク全体を数秒間保護する必要がありますか?キャッシュデータがキャッシュ内に存在し、再び電源を待つのではなく、ディスクに書き込まれるので、それはさらに安全ではないでしょうか? 1秒ほど後に、ディスクがシャットダウンする可能性があります。
ディスクに電力を供給するのではなく、マシンをオンラインに戻すまで、データをキャッシュに(この場合は)最大72時間保持します。マシンに電源を入れると、キャッシュの内容がディスクに書き戻されます。
それが行うすべては停電からの保護です。 (何らかの理由で)データをディスクにきれいにフラッシュせずにマシンの電源が失われた場合、マシンを再起動できるまで、バッテリーによってキャッシュの内容が維持されます。
ディスクが外部ディスクアレイにある場合や、別の電源回路にある場合もあるので、ディスク用のUPSではありません。 UPSでも故障する可能性があります。
それはこのように動作します:
ほとんどのオペレーティングシステムには、いわゆる「同期書き込み」を可能にするシステムコールがあります。つまり、書き込み操作中に書き込みが完了した場合、ディスクにコミットされたことが保証されます。
したがって、同期書き込みはキャッシュされません。完了するまでアプリケーションをブロックします。この種の操作は、ディスクが十分にアイドル状態になりデータを書き込むまでOSのメモリにデータを保持するキャッシュ書き込みよりも明らかに低速です。
データベースソフトウェアなどの一部の重要なソフトウェアでは、停電の場合に書き込みが半分しか更新されないため、データベースの整合性が損なわれることがあるため、重要なデータに対して同期書き込みを実行します。
RAIDコントローラーはRAID-5書き込みで非常に低速であるため、アプリケーションソフトウェアが多数の同期書き込みを使用する場合、これが問題になります。このため、RAID-5コントローラーには独自のキャッシュが装備されています。
RAIDコントローラが行うことは、代わりにデータをキャッシュに書き込み、OSにLIESを書き込み、データがディスクに実際にコミットされているのに、実際にはデータがRAIDキャッシュにあることを伝えることです。
しかし、データがRAIDコントローラーのバッファーに残っている間に電源が失われた場合はどうなりますか?半分書き込まれ、おそらく一貫性のないデータがディスクにあります。
この動作は同期書き込みの目的を損なうと言えるかもしれません...キャッシュされた書き込みが問題なければ、アプリソフトウェアはそもそも同期書き込みを要求しません。
妥協点は次のとおりです。RAIDコントローラーは、データをディスクにコミットしたOSに依然存在しますが、電源障害が発生した場合にこの重要なデータを保護するために、RAIDコントローラーには、電源がオンになるまでしばらくキャッシュを維持するバッテリーがあります復元されました。
したがって、電源が回復し、ディスクが回転して初期化された後、コントローラーはバッテリーのおかげでそのデータをキャッシュに保持し、トランザクションのディスクへの書き込みを完了することができます。
みんな幸せです。
このため、通常、機能し充電されたバッテリーユニットがない限り、RAIDコントローラーでは書き込みキャッシュを有効にできません。
一部の新しいディスクコントローラーには、通常の72時間よりもはるかに長い間データを保持する高速フラッシュキャッシュが付属していることにも言及する価値があります。パーツの詳細が必要な場合はお知らせください。
そのBBUキャッシュは、ジャーナルファイルシステムによって提供されるものと同様のレベルの保護を追加するものと考えてください。これは、停電によって中断された場合にトランザクション(この場合は単純な書き込み)を完了できるようにするためにあります。電力が低下すると、コントローラーは書き込みを続行できなくなります。これは、完全に予測不可能な結果をもたらすためです。代わりに、それは可能な限りデータを保持し、電力が再開した場合にデータの書き込みを終了します。それが行わないことは、ドライブのUPSのように動作することです。
電源障害はまれですが、特にDBサーバーでは、100ドルのバッテリーを入手することは必須です。 トランザクションが有効になっている場合でもで、これらの変更がキャッシュを離れてディスクにコミットされる前にサーバーの電源が失われると、クエリが不完全になるか、データが破損します。
サーバーがクラッシュしたり、ハングしたり、誰かが電源ケーブルを引っ張ったりした場合、書き込みキャッシュを使用している場合、BBUはデータの破損または損失から保護します。 USVを使用しても、電源障害から保護されるだけです。
書き込みキャッシュを使用しない場合は、BBUは必要ありません。
RAIDカードは1 GBのキャッシュを持つことができます。通常はすべてが書き込みキャッシュに使用されるわけではありませんが、書き込まれていないデータのかなり長いキューを格納すると想定できます。
ファイルシステムとデータベースは、停電が発生した場合でも、同期書き込みが再順序付けされないことを前提としています。通常、同期書き込みは、データがディスク上にあるときにのみ戻りますが、これは比較的低速です。 RAIDカードは、小さな書き込みをグループ化し、ランダム性が低くなるようにそれらを並べ替えることにより、パフォーマンスを向上させます。
BBUがなかった場合、負荷がかかった状態で電源障害が発生すると悲惨な結果が生じます。書き込みにより、RAIDカードは失われると約束していました(ファイルシステムの場合のように、新しいファイルまたはディレクトリへの参照がある可能性がありますが、これを回避するために、ファイルシステムがそれを参照する前に新しいファイルを特別に作成した場合でも、ファイルまたはディレクトリ。さらに悪いことに、誰かが秘密ファイルを削除し、他の誰かが誰でも読み取り可能なファイルを作成した場合、秘密ファイルの内容の一部が誰でも読み取り可能なファイルで見つかることがあります。ファイルシステムが構築されているという前提を破ると、何でも可能になります。
UPSが無停電電源を保証していると仮定すると、素朴です。マシンがクラッシュし、電源コードを抜く必要がある場合、または誰かがトリップした場合はどうなりますか?
コンシューマSATAディスク(およびSSD)は同期書き込みもキャッシュすることがありますが、キャッシュははるかに小さく、コンシューマの使用はそれほど要求されないため、通常はそれを使用できます。
最新のRAIDコントローラーはフラッシュも備えており、停電時に書き込みキャッシュの内容をコピーするため、バッテリーが数秒以上持続する必要はありません。