web-dev-qa-db-ja.com

複数のWebサーバーとデータベースサーバーを設定するにはどうすればよいですか?

私のウェブサイトはトラフィックの面で成長していて、mysqlの負荷は増加しています。メインサーバーに障害が発生した場合にフェイルオーバーとして機能する可能性のあるトラフィックとバックアップサーバーの増加により、mysqlの負荷の増加(すべてのクエリはすでに最適化されています)に対処するのに役立つソリューションが必要でした。

複数のWebサーバーとデータベースサーバーのセットアップについて読みましたが、いくつか質問がありました。

1)同じコンテンツを維持しながら複数のWebサーバーを設定するにはどうすればよいですか(ファイルが更新されるたびにすべてのサーバーにファイルをアップロードする必要がありますか、それとも別の方法がありますか?)

2)同様に、DBを複数のサーバーにスケールアウトする必要がある場合、レプリケーション以外の方法はありますか、それともmysqlレプリケーションが最善の方法です。

3)データベースをWebサーバーから分離することは良い考えだと読みましたが、それはなぜですか?サーバーが2つある場合、両方のサーバーにDBとファイルの両方を配置することはできません。

4)ロードバランサーと呼ばれるものが必要ですか?レプリケーションが設定されている場合、mysqlクエリのバランスを取るのにも役立ちますか?

非常に混乱しているので、助けが必要です。

3
Sam

従来の設定では、Web /アプリケーションサーバーとDBサーバーを分離します。それらを同じボックスに置くことはかなり制限されます。 Webアプリケーションが静的コンテンツと動的コンテンツの混合で構成されている場合は、さらに分離すると(Webサーバー、アプリケーションサーバー、コンテンツサーバーが分離されます)、パフォーマンスが向上します。

MySQLに関する限り、これらを試してみることをお勧めします。

  • 間違いなくMySQLを専用サーバーに置いてください。
  • MySQL lovesメモリを、余裕があり、マシンが使用できる限り多くのメモリを投入します。
  • OS、ビンログ、データを3つの別々の物理ディスクに置きます。
3
Qwerky

1)同じコンテンツを維持しながら複数のWebサーバーを設定するにはどうすればよいですか(ファイルが更新されるたびにすべてのサーバーにファイルをアップロードする必要がありますか、それとも別の方法がありますか?)

状況は規模とともにより複雑になります。最初は、すべてのコンテンツをすべてのサーバーに同時に手動でデプロイするだけです。これを行うためのスクリプトを書くことができます。

大きくできるように、 構成管理ソフトウェア が役立ちます。また、 OpenEFS が適切なソリューションになります。

静的コンテンツと特定の種類のコンテンツでは、より多くのオプションを利用できます。これらの決定は、負荷分散されたアプリケーション自体を介してコンテンツを変更またはアップロードしようとすると、これをうまく処理しないかのように、より明白になるため、データパーティションが発生します。たとえば、アップロードされたファイルは、負荷分散されたサーバーの1つにのみ存在します。

順不同:

  • コンテンツ配信ネットワーク を使用します。
  • 自分でキャッシュして静的コンテンツをプロキシします。
  • データストレージを高可用性ファイルシステムに抽象化します。
  • 多くの場合、理想的には、コンテンツをデータベースに保存することをお勧めします。

2)同様に、DBを複数のサーバーにスケールアウトする必要がある場合、レプリケーション以外の方法はありますか、それともmysqlレプリケーションが最善の方法です。

それはあなたの最終目標に依存します:一貫性、可用性、またはパーティションの許容範囲。妥協が必要になる可能性があります。これは広大なテーマであり、 High Performance MySQL などの本を読むことでメリットが得られます。一般的なオプション:

  • Linux-HA[〜#〜] vrrp [〜#〜] 、または マルチマスターMySQL などのテクノロジーを使用したデュアルマスターレプリケーション。これにはフローティングIPがあります。自動IDオフセットを実装し、アプリケーションのパフォーマンスに注意する必要があります。
  • ブロックレベルのストレージレプリケーションに [〜#〜] drbd [〜#〜] のようなソリューションを使用し、障害が発生した場合にLinux-HAのようなテクノロジーを使用してリソースをフェイルオーバーします。

MySQLにもさまざまな ホワイトペーパー が公開されています。

3)データベースをWebサーバーから分離することは良い考えだと読みましたが、それはなぜですか?サーバーが2つある場合、両方のサーバーにDBとファイルの両方を配置することはできません。

複雑さとセキュリティリスクを軽減するため、役割を目的に専念させることをお勧めします。少なくとも2つのロードバランサー、2つのデータベースサーバー、および2つのWebサーバーの恩恵を受ける可能性があります。高可用性はそこで止まらないため、追加の障害点に注意してください。ネットワークは、次の明らかな単一障害点になる可能性があります。

また、標準のビルド、スケーリング、および役割の転送をより簡単に行うことができます。それにもかかわらず、これらの機能はサーバーの役割を分離することに固有のものではありません。

4)ロードバランサーと呼ばれるものが必要ですか?レプリケーションが設定されている場合、mysqlクエリのバランスを取るのにも役立ちますか?

書き込みクエリとMySQLの場合、多くの場合、垂直方向にスケールアップする方が簡単です。多くの最新のソリューションで推奨される水平方向にスケールアウトするには、 sharding などのアーキテクチャを採用する必要があります。理想的には、アプリケーションはそれをサポートするように設計する必要があります。私が一般的に警戒しているさまざまなミドルウェアソリューションもあります。

MySQLレプリケーションスレーブサーバーに簡単に負荷分散できます。これにより、読み取り専用クエリに負荷分散VIPを使用できます。

2
Warner