web-dev-qa-db-ja.com

メディアのウェブサイトでの10TBのファイルストレージ設計の質問

私はかなり忙しいメディアのウェブサイトを持っており、MP3オーディオファイルがメンバーによってアップロードされ、現在負荷分散されている2つのWindowsサーバーからストリーミング/ダウンロードされています...両方のサーバーは単に相互にミラーリングされ、同期が保たれています。

現在行っているのは、現在のドライブがいっぱいになるたびに新しい2TB HDDを追加するだけで、ユーザーは新しいドライブにデータをアップロードします... 24台のディスクに十分なベイがあります。

すべての新しいメディアがこのドライブに追加されるため、最近追加されたHDDでI/Oボトルネックが発生しています。これも最も人気があります...これは、各ディスクにデータを分散することで克服できますが、複雑になるとスペースが不足し、新しい空のドライブを追加します。

ファイルをミラーリングしている理由は、1:1のバックアップ、1台のサーバーがダウンした場合のフェイルオーバー、および2台のマシンでサイトの負荷分散を簡単に行えるようにするためです。

以前はNAS/SANの使用を推奨していたソモネですが、残念ながらこれにアクセスできません。

私の状況で何をお勧めしますか...セットアップを改善する方法はありますか?

先日、分散ファイルシステムについて読んだのですが、それは収まるように聞こえましたが、すべてLinuxのみのようです...今はLinuxに変換するのは、経験がほとんどないので控えめに言っても難しいでしょう。

私があなたが答えるのを助ける何かを逃したならば、私に知らせてください。

ありがとう、ポール

2
Paul Hinett

データ負荷分散の問題。これは楽しいものです。通常、複数のサーバーに分散している場合でも、大量のデータセットを処理した経験がいくつかあります。

  1. ストレージをプレゼンテーションから切り離していないようです。あなたはこれをする必要があります。ストレージへのインターフェイスを設計します(別のサーバー、NFS共有などとしてファイルとして表示できます)。個人的には、データのみを提供する「メディア」サーバーを使用することに強く賛成です。このようにして、NASモデルに移行すると、成長するにつれて膨大な量の苦痛を軽減できます。

  2. メディアをアプリケーションから分離したら、この大量のデータを処理する方法のソリューションを検討し始めることができます。

商用のSAN製品が多数あります。通常、大量のディスクの負荷分散を行い、ストレージの追加/削除を適切に処理します。また、非常に高価であり、すでにハードウェアを使用しているようです。 。

Linux側には、この量のデータを問題なく処理するための標準ソフトウェアがあります。 LVMとEXT4は、非常に大きなファイルシステムを処理できます(ただし、FSCK時間には注意してください)。これを構築する場合、おそらくLVM、EXT4を使用して、Apacheを使用してデータを提供します。この組み合わせにより、ストレージを必要なだけ大きくすることもできます。

しかし、それは単なる一般的な戦略です。今、あなたが持っている特定の問題を攻撃するために。実装の詳細を知らなければ少し難しいですが、私はいくつかの提案を提供することができます:

IOが適切に負荷分散されていないようです。データを提供するディスクを追跡できると思います。その場合は、「リバランス」スクリプトを作成する必要があります。システムへの新しいディスクこのスクリプトは、すべての古いディスクからデータを取得し、新しいディスクをいっぱいにします。次に、受信ファイルをすべてのディスクに分散して、IO loadのバランスを改善することができます。 。これは、異なるディスク上に異なるファイルシステムがあり、巨大なJBODを作成しているだけではないことを前提としています。これは一般的に悪い考えです。

2番目のステップは、プロファイリングを開始することです。各ファイル要求をログに記録する小さなアプリケーションを作成します。特定のディスクがフェアシェアを超えてヒットしている場合は、そのディスクと最も使用率の低いディスクの間でデータを交換します。この種の負荷分散は、通常のジョブとして、おそらく1時間または1日ごとに実行することが望ましいです。

また、大きなIOキャッシュを取得するようにしてください。通常、取得した種類のアプリケーションでIOパフォーマンスを低下させるのは、非常に多くの異なるファイルを提供する場合です。キャッシュを圧倒し、ディスクのスラッシングを開始します。ディスクコントローラのキャッシュを最大限に活用し、システムにできるだけ多くのメモリを投入します。Windowsは、予備のRAMを読み取りキャッシュとして使用します。難しいことではありません。特に今日のサーバーに128G以上のRAMを詰め込むには高価です。ホットファイルセットが1TBであっても、これはかなり大きなキャッシュです。

提供しているデータの量を考えると、RAIDソリューションには近づかないことをお勧めします。大規模なRAIDアレイを再構築することは、苦痛な経験になる傾向があります。

4
pehrs

基本的な質問-追加する2つのドライブを単にミラーリングするのではなく、RAIDアレイを使用していますか?

ストレージボックスでRAID10のようなものを使用すると、アレイを拡張できます(ドライブを追加してから、RAIDコントローラーまたはソフトウェアRAIDサブシステムに追加のディスクを使用するように指示します。

ただし、分離ストレージモデルに移行することをお勧めします。単にスケーリングの観点からすると、データセットが大きくなり、大きくなるという問題があります。古いデータをアーカイブして削除しないと、成長が止まることはありません。

たとえば、既存のマシンのすべてのベイを埋めるとき、何をしますか? ;-)

私はWindowsを使用して、彼らが使用する分散ファイルシステムから個人的に離れていきました。最も単純なソリューションを使用してください。幸い、Windows 2008r2にはiSCSIサポートが付属しているため、独自のSANをかなり簡単に構築できます( http://technet.Microsoft.com/en-us/library/cc726015。 aspx )。

さらに良いことに、iSCSIターゲットとしてLinuxボックスを構築し、Windowsマシンからそれを指すだけです。

0
tsykoduk