9

私は大きなファイルサーバーを構築するつもりであり、ファイルシステムの選択(Linux)についてスタックオーバーフローコミュニティのアドバイスが必要です。

ファイルサーバーは、ディスクへの一定の中程度の書き込み(RAID5 SATA / 7200ディスク大容量)の下で、Nginxを介して1〜2GBサイズの静的ファイル(ほとんどの場合、要求ごとに異なります)を提供します。書き込みと読み取りの比率は約1:5〜10で、1秒あたり1バイトの書き込みごとに5〜10が読み取られます。私にとって最も重要なのは読み取りパフォーマンスです。遅い書き込みで生きることができます。

このタスクに最適なソリューションはどのLinuxファイルシステムですか?そしてなぜ:)ありがとう!

4

3 に答える 3

8

負荷の高いコンテンツで最良の結果を提供するには、他にも調整する必要があります。以下の Nginx コア開発者のコ​​メントをご覧ください。

  1. sendfileをオフにします。Linuxでは、先読みを制御できないため (したがって、ディスクからの読み取りがブロックされます)、このようなワークロードではうまく機能しません。

    sendfile オフ;

  2. 大きな出力バッファを使用する

    output_buffers 1 512k

  3. aioを使用して、より良いディスクの同時実行性を確保してみてください(Linux では、directio も必要であることに注意してください)。つまり、次のようなものです。

    aio on; 方向 512;

その他の推奨事項:

  1. ファイルシステムのスワップが使用されていないことを確認します

  2. ファイルシステム - ext4、xfs。data_writeback と notime マウント オプションを有効にすると良い

于 2012-06-29T05:48:34.893 に答える
8

「実際の」ディスク (スピンドル) あたり 80MB/秒の「ランダム読み取り」パフォーマンスを達成しました。これが私の発見です。

したがって、最初に、ユーザーにプッシュする必要があるトラフィックの量と、サーバーごとに必要なストレージの量を決定します。

すでに RAID5 セットアップを行っているため、以下のディスク セットアップのアドバイスはスキップできます。

3 * 2TB ディスクを備えた専用の 1Gbps 帯域幅サーバーの例を見てみましょう。OS と tmp 専用の最初のディスクを保持します。他の 2 つのディスクについては、ソフトウェア RAID を作成できます (私にとっては、オンボード ハードウェア RAID よりもうまく機能しました)。それ以外の場合は、ファイルを独立したディスクに均等に分割する必要があります。アイデアは、両方のディスク共有の読み取り/書き込み負荷を均等に保つことです。ソフトウェア RAID-0 が最適なオプションです。

Nginx Conf nginx を使用して高レベルのパフォーマンスを達成するには、2 つの方法があります。

  1. 指示を使用

    aio on;
    方向 512; output_buffers 1 8m;

    「このオプションでは十分な量の RAM が必要です」 約 12 ~ 16 GB の RAM が必要です。

  2. ユーザーランドio

    output_buffers 1 2m;

    「ソフトウェア RAID マウント用に先読みを 4 ~ 6MB に設定したことを確認してください」 blockdev --setra 4096 /dev/md0 (または独立したディスク マウント)

    この設定では、システム ファイル キャッシュが最適に使用され、必要な RAM がはるかに少なくなります。約8GBのRAMが必要です。

共通の注意事項:

  • 「sendfileをオフにしてください;」

帯域幅スロットルを使用して、利用可能な帯域幅で数百の接続を有効にすることもできます. 各ダウンロード接続は、4MB のアクティブな RAM を使用します。

        limit_rate_after 2m;
        limit_rate 100k;

上記のソリューションはどちらも、3 ディスク サーバーで 1,000 人以上の同時ユーザーに簡単に拡張できます。帯域幅が 1Gbps で、各接続が 1Mb/ps で調整されていると仮定すると、読み取りにあまり影響を与えずにディスク書き込みを最適化するには、追加の設定が必要です。

マウント上のメイン OS ディスクへのすべてのアップロードを /tmpuploads とします。これにより、大量の読み取りが行われている間、断続的な障害が発生しなくなります。次に、oflag=direct を指定した「dd」コマンドを使用して、/tmpuploads からファイルを移動します。何かのようなもの

dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k
于 2012-08-28T07:36:05.343 に答える
0

非常に大きなファイルは、使用するファイルシステムにあまり依存しない傾向があります。最新のファイルシステム (つまり、FAT ではない!) は、それらをストレージの大きな連続したチャンクに割り当てることで、シーク レイテンシを最小限に抑えます。それらの違いが見られる傾向があるのは、小さなファイルのパフォーマンス、スペース不足の状況での断片化への耐性、同時実行性などです...大きなファイルを保存することは比較的簡単な問題であり、測定可能な違いが見られるとは思えません。

しかし、いつものように、本当に気にするなら、ベンチマークしてください。ファイルシステムのパフォーマンスに関する簡単な答えはありません。

于 2012-06-28T21:41:00.763 に答える