web-dev-qa-db-ja.com

複数のWebサーバー間でアセットを共有する方法は?

ロードバランサーに接続された複数のLinux Webサーバーがあり、これらのサーバー間でアセット(写真、ビデオ、およびその他のもの)を共有したい。これを行う最良の方法は何ですか?

現在、すべてのWebサーバーのファイルサーバーにマウントしていますが、トラフィックが多いときにダウンするのではないかと心配しています。これを回避するにはどうすればよいですか?

前もって感謝します。

17
getmizanur

これには、ニーズに応じて複数の方法があります。

  • Webサーバー上のfx NFSでマウントされた中央ファイルサーバーを使用する
  • 上記と同じですが、冗長なので、一方がダウンすると、もう一方が引き継ぎます
  • ある種の同期ツール(rsyncなど)を使用して、ファイルをWebサーバー上でローカルにホストします。次に、cronjobをセットアップして、特定の間隔でサーバー間でファイルを同期します。
  • Amazon S3、AkamaiなどのCDNを使用します。

最初の2つは、新しいファイルがたくさんある場合に最適です。 3番目の方法は、ファイルを追加または変更しない場合に理想的なソリューションです。これは、ユーザーが静的コンテンツの404をまだ同期していないためです。

最後のオプションは、多くの点で理想的ですが、4の中で最も高価であることが判明する場合もあります。これをサポートするには、Webサイトを書き直す必要もあります。

12

ウェブサーバーの負荷を減らし、負荷分散を実行するもう1つの優れた方法は、squid(つまりsquid3)を使用することです。キャッシュを使用してリバースプロキシとして設定します。画像などの静的コンテンツをHDD(デフォルト)またはRAM(より高速で最良))にキャッシュします(このように設定した場合)。他のイカへのラウンドロビンが可能です特定のノードのいずれかが過負荷の場合にもサーバー。

2
Aihngel Tech

通常、より多くのサーバーの必要性は、動的なWebサイト/ APを実行するために必要なリソースに起因するため、別のサブドメイン/ドメインで静的アセットをホストすることを検討してください。 (static.yourdomain.comなど)

その後、別のサーバーを使用してそれらをホストできます。静的ファイルホスティングはリソースをあまり使用しないため、静的コンテンツ用に必要なサーバーはかなり少なくなります。また、動的コンテンツのためにサーバー上のいくつかのリソースを解放します。

ロードバランサーによっては、同じドメインでこれを行うこともできます。ロードバランサーは、どの要求にどのサーバーを使用するかを決定しますが、別のドメインを使用すると、静的アセットをCDNに非常に簡単に配置できます。必要が生じます!

私が採用したこの課題に対する1つの解決策は、共有NFSドライブにファイルのメインの読み取り/書き込みコピーを置くことですが、NFSホストの障害によりファイルアクセスが発生するように、各Webサーバーで読み取り専用コピーを維持することもできます完全に失うのではなく、読み取り専用モードで。

  • ファイルは中央のホストに存在し、NFSマウントを介してWebホストと共有されます
  • rsyncは15分ごとに実行され、各Webホストの読み取り専用コピーを最新に保ちます。
  • check_link bashスクリプトは毎分実行され、NFSマウントがまだそこにあることを確認します。そうでない場合は、シンボリックリンクを読み取り専用コピーにスワップします。

詳細については、このシステムを最初にセットアップしたときの この記事 を参照してください。

利点:

  • ファイルの読み取りは高可用性です
  • ファイル書き込みの競合状態はありません
  • 新しいファイルは、すべてのWebホストですぐに利用できます。

欠点:

  • 少し複雑。
  • 読み取り専用コピーの数はWebホストの数に比例します。2つよりも多い場合は、過剰になる可能性があります。
  • ファイルの書き込みは高可用性ではありません。
  • 読み取り専用コピーに切り替える前に、最大1分のダウンタイムが発生する可能性があります。
1
Adam Franco

DFSソリューションを試してみませんか。それらは高レベルの冗長性を提供し、ボリュームは好きなだけ共有できます。 Glusterは私のお気に入りで、有名なLinuxディストリビューションに簡単にインストールして構成できます。

0
Arash mo

NoSQLデータベースを検討することをお勧めします。これらはクラスターで動作するように設計されており、結果整合性を提供します。ただし、ACIDではないことに注意してください。

はじめに は、目的に合わせてどのようなNoSQLデータベースが必要かを判断するのに役立ちます。

以下は、利用可能なNoSQLに関連する リソースのリスト です。

0
Azzy