web-dev-qa-db-ja.com

24ディスクのプールされたSSDホットセットキャッシュを構築するための推奨アプローチ:RAID、LVM JBODなど?

ローカルに接続された24x SSDを、価値の低いデータを持つ大きな論理ボリュームとしてプロビジョニングする最も手間のかからない方法を見つけようとしています。私は、マスター状態(約1ペタバイト)がS3に存在するデータのホットセットキャッシュとして使用しているため、データの損失よりもパフォーマンス、メンテナンスの複雑さ、およびダウンタイムの方を重視しています。ホットデータセットには何日も残りません。S3から簡単に再作成できます。

  • 中規模の大規模インスタンス:32x vCPU、120GB RAM、Skylake
  • 24xローカル接続SSD @各375 GB =合計9 TB
  • Google Cloud(GCP)でホスト
  • Debian 10(バスター)
  • アクセスは読み取りより書き込みの約4倍重い
  • かなりランダムなアクセスパターンを持つ同時ユーザー(人間とマシン)の数が多く、I/Oに非常に飢えています。
  • ファイルの90%が10MBより大きい

RAID 5は問題外だと思います。手動での再構築を待つつもりはありません。私はRAID 0、RAID 10、または...のいずれかに傾向があります。多分これは実際にはRAIDがまったくない単純なLVMプールの場合ですか?この場合、比較的単純な経路をたどることによって本当に何かを失うのですか?

私の理想的な解決策は、各サブディレクトリ(サブディレクトリごとに1つの自己完結型データセットがある)の/完全に単一のディスクに含まれています(各ドライブに10個のサブディレクトリを収めることができます)。ドライブに障害が発生した場合、そのドライブのサブディレクトリ/データセットが一時的に停止しますが、「これらのデータセットは再ダウンロードされており、利用できません」という理由は簡単にわかります。次に、S3から失われたデータセットを新しいドライブに再構築します。 LVM jbods(これにぴったりのWordがわからない?)は、この動作の複製に最も近いと思われます。

5
Seth

あなたはあなたのニーズに矛盾しているようです-"私の理想的なソリューションは各サブディレクトリを持っています(私はサブディレクトリごとに1つの自己完結型データセットを持っています)/ /完全に単一のディスクに含まれています"はあなたが望まないことを伝えますRAID、LVM、または任意の抽象化テクノロジー-*確かにこれに対する解決策は、単に各ディスクを個別にマウントすることです。ここでの不利な点は、ディスク領域を浪費する可能性が高く、データセットが大きくなると、それを調整するためにより多くの時間を費やす必要があることです。 (Unixがドライブをファイルシステムツリーの任意の場所にマウントできることを知っていると思います。そのため、ドライブを論理ツリー構造として認識させるのは十分簡単であると考えれば少しですが)

あなたはJBODまたはRAID0について話します。複合ディスクソリューションを選択した場合、データはディスク上で簡単に分割されるため、ほとんどの場合、RAID0を使用すると読み取りパフォーマンスが向上します。 RAID10は、不要だと言った冗長性を購入します。 JBODは、さまざまなサイズのディスクがある場合にのみ役立ちます。LVMは同じように動作し、データを柔軟に移動できるため、代わりにLVMを使用する方がよいでしょう。

LVMが個々のディスクを支援するEdgeのケースを見ることができますが、一般的に、どのシナリオでも複雑さが増す可能性が高く、ここで有用な柔軟性が得られます。

ある程度の労力を費やしたいのは、最も適切なファイルシステムとチューニングパラメータを調べることです。

4
davidgo

私は、データの損失よりも、パフォーマンス、メンテナンスの複雑さ、およびダウンタイムを重視しています。

パフォーマンスを最大化するには、何らかの形式のRAID-0またはRAID10、またはLVMを使用する必要があることを示します。メンテナンスの複雑さは、サブディレクトリによってディスクをセグメント化するようなものを除外します(別のボリュームジャグリングが言及されているように)。 1つのドライブが失われるとアレイ全体がダウンし、再構築する必要があるため、ダウンタイムを最小限に抑えるには、何らかの形式の冗長性が必要です。それを「ダウンタイム」と読みました。 RAID-5の縮退モードでは、パフォーマンス上の理由からRAID-5も除外される可能性があります。

だから私はあなたのオプションはRAID10、またはRAID1 + LVMだと思います。 LVMは、ボリュームのサイズを管理するためのいくつかの向上した機能を提供しますが、とにかくRAID-1でそれをミラーリングする場合、その多くは消えます。この記事によると https://www.linuxtoday.com/blog/pick-your-pleasure-raid-0-mdadm-striping-or-lvm-striping.html RAID-0はより良いパフォーマンスを提供しますLVMより。

2
Steve Sether

よりシンプルで手間のかからないセットアップは、ソフトウェアRAIDアレイ+ XFSを使用することです。 その場合のみデータと可用性を気にしない場合は、RAID0アレイを使用できます。それ以外の場合は、他のRAIDレイアウトを使用することを強くお勧めします。私は一般的にRAID10を使用することをお勧めしますが、50%の容量を要求します。 24x 375GB RAIDの場合、RAID6または-gasp- RAID5についても考えることができます。

上記のソリューションには多くの文字列が添付されており、最も重要なのは単一のブロックデバイスを示し、LVMベースのストレージパーティションをスキップし、スナップショット機能がないことを意味します。一方、XFSアロケーターは、R​​AID0セットアップで個々のディスク間のバランスを非常によく処理します。

その他の可能な解決策:

  • rAID0/5/6上の従来のLVMではなくXFSを使用します。レガシーLVMボリュームは基本的にパフォーマンスに影響を与えず、単一のブロックデバイスを動的にパーティション化し、短期間のスナップショットを取得できます(非常に高いパフォーマンスペナルティはあります)。

  • rAID0/5/6を介したシンLVMを介したXFSの使用:シンLVMは、パフォーマンスのペナルティを軽減した最新のスナップショットを可能にします。十分な大きさのチャンクサイズで使用した場合、パフォーマンスは良好です

  • zFSを使用することを検討してください(そのZoLインカラントで)。特に、データが圧縮可能な場合は、スペースとパフォーマンスの点で大きなメリットがあります。さらに、ワークロードが読み取りが重いように見えるため、ZFS ARCは従来のLinuxページキャッシュよりも効率的です。

データがうまく圧縮されないが重複排除に適している場合は、RAIDブロックデバイスとファイルシステムの間にVDOを挿入することを検討できます。

最後に、あらゆる種類のLVM、JBOD、またはZFSプーリングが行うことを考慮してくださいnotは、ディスクを失うと、そのようなディスクにあるディレクトリのみがオフラインになることを意味します。むしろ、仮想ブロックデバイス全体が使用できなくなります。このような分離を行うには、ブロックデバイスごとにファイルシステムを配置する必要があります。つまり、さまざまなマウントポイントを管理する必要があり、さらに重要なのは、ストレージがプールされないことです(つまり、ディスクのスペースが不足する可能性があります)。 、他は十分な空き容量があります)。

1
shodanshok

本当にデータを気にしない場合は、障害を回避するのではなく、障害が発生した場合にそのパフォーマンスとサービスを再構築する速度のみを使用します。私の通常のより良い判断に反して、R0は問題ありません。

どのデータをどこに移動するかを明確に選択することはできませんが、それは私が考えている限りの速さになります。はい、間違いなく失敗しますが、R0アレイを削除して再構築するスクリプトを作成することができます。最大で1分ほどかかることはありません。ドライブにアクセスできなくなったときに自動的に実行することもできます。

1つの小さな質問-32 x vCPUが必要VM Skylakeコアを使用すると、この大きなソケットは1つも実行されないため、VMが分割されますソケット、これはあなたが期待するほど速くないかもしれません、おそらく影響が何であるかを確認するために32/24/16コアでパフォーマンスをテストしてください、それは少なくともちょっと試してみる価値があります。

1
Chopper3

最高のパフォーマンスとメンテナンスの複雑さについては、ここに記載されているベストプラクティス[1] [2]を使用して、Cloud Storageを使用するアプリケーションを構築する際の注意事項をすばやく参照できます。

[1] https://cloud.google.com/storage/docs/best-practices

[2] https://cloud.google.com/compute/docs/disks/performance

0
Shafiq I