「実際の」ディスク (スピンドル) あたり 80MB/秒の「ランダム読み取り」パフォーマンスを達成しました。これが私の発見です。
したがって、最初に、ユーザーにプッシュする必要があるトラフィックの量と、サーバーごとに必要なストレージの量を決定します。
すでに RAID5 セットアップを行っているため、以下のディスク セットアップのアドバイスはスキップできます。
3 * 2TB ディスクを備えた専用の 1Gbps 帯域幅サーバーの例を見てみましょう。OS と tmp 専用の最初のディスクを保持します。他の 2 つのディスクについては、ソフトウェア RAID を作成できます (私にとっては、オンボード ハードウェア RAID よりもうまく機能しました)。それ以外の場合は、ファイルを独立したディスクに均等に分割する必要があります。アイデアは、両方のディスク共有の読み取り/書き込み負荷を均等に保つことです。ソフトウェア RAID-0 が最適なオプションです。
Nginx Conf
nginx を使用して高レベルのパフォーマンスを達成するには、2 つの方法があります。
指示を使用
aio on;
方向 512; output_buffers 1 8m;
「このオプションでは十分な量の RAM が必要です」 約 12 ~ 16 GB の RAM が必要です。
ユーザーランドio
output_buffers 1 2m;
「ソフトウェア RAID マウント用に先読みを 4 ~ 6MB に設定したことを確認してください」 blockdev --setra 4096 /dev/md0 (または独立したディスク マウント)
この設定では、システム ファイル キャッシュが最適に使用され、必要な RAM がはるかに少なくなります。約8GBのRAMが必要です。
共通の注意事項:
帯域幅スロットルを使用して、利用可能な帯域幅で数百の接続を有効にすることもできます. 各ダウンロード接続は、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