ロードバランサーに接続された複数のLinux Webサーバーがあり、これらのサーバー間でアセット(写真、ビデオ、およびその他のもの)を共有したい。これを行う最良の方法は何ですか?
現在、すべてのWebサーバーのファイルサーバーにマウントしていますが、トラフィックが多いときにダウンするのではないかと心配しています。これを回避するにはどうすればよいですか?
前もって感謝します。
これには、ニーズに応じて複数の方法があります。
最初の2つは、新しいファイルがたくさんある場合に最適です。 3番目の方法は、ファイルを追加または変更しない場合に理想的なソリューションです。これは、ユーザーが静的コンテンツの404をまだ同期していないためです。
最後のオプションは、多くの点で理想的ですが、4の中で最も高価であることが判明する場合もあります。これをサポートするには、Webサイトを書き直す必要もあります。
ウェブサーバーの負荷を減らし、負荷分散を実行するもう1つの優れた方法は、squid(つまりsquid3)を使用することです。キャッシュを使用してリバースプロキシとして設定します。画像などの静的コンテンツをHDD(デフォルト)またはRAM(より高速で最良))にキャッシュします(このように設定した場合)。他のイカへのラウンドロビンが可能です特定のノードのいずれかが過負荷の場合にもサーバー。
通常、より多くのサーバーの必要性は、動的なWebサイト/ APを実行するために必要なリソースに起因するため、別のサブドメイン/ドメインで静的アセットをホストすることを検討してください。 (static.yourdomain.comなど)
その後、別のサーバーを使用してそれらをホストできます。静的ファイルホスティングはリソースをあまり使用しないため、静的コンテンツ用に必要なサーバーはかなり少なくなります。また、動的コンテンツのためにサーバー上のいくつかのリソースを解放します。
ロードバランサーによっては、同じドメインでこれを行うこともできます。ロードバランサーは、どの要求にどのサーバーを使用するかを決定しますが、別のドメインを使用すると、静的アセットをCDNに非常に簡単に配置できます。必要が生じます!
私が採用したこの課題に対する1つの解決策は、共有NFSドライブにファイルのメインの読み取り/書き込みコピーを置くことですが、NFSホストの障害によりファイルアクセスが発生するように、各Webサーバーで読み取り専用コピーを維持することもできます完全に失うのではなく、読み取り専用モードで。
rsync
は15分ごとに実行され、各Webホストの読み取り専用コピーを最新に保ちます。check_link
bashスクリプトは毎分実行され、NFSマウントがまだそこにあることを確認します。そうでない場合は、シンボリックリンクを読み取り専用コピーにスワップします。詳細については、このシステムを最初にセットアップしたときの この記事 を参照してください。
利点:
欠点:
DFSソリューションを試してみませんか。それらは高レベルの冗長性を提供し、ボリュームは好きなだけ共有できます。 Glusterは私のお気に入りで、有名なLinuxディストリビューションに簡単にインストールして構成できます。