序章

このチュートリアルでは、HAProxyをレイヤー7ロードバランサーとして使用して、単一のドメイン名またはIPアドレスから複数のアプリケーションにサービスを提供する方法を説明します。 負荷分散により、環境のパフォーマンス、可用性、および復元力を向上させることができます。

複数のアプリケーションにサービスを提供する単一のドメイン名が必要な場合は、レイヤー7リバースプロキシと負荷分散がサイトに適しています。これは、http要求を分析して、トラフィックを受信するアプリケーションを決定できるためです。

このチュートリアルは、WordPressと静的Webサイトを例として作成されていますが、その一般的な概念を他のアプリケーションで使用して、同様の効果を得ることができます。

前提条件

このチュートリアルを続行する前に、少なくとも2つのアプリケーションを別々のサーバーで実行する必要があります。 2つのアプリケーションとして、NginxとWordPressでホストされている静的Webサイトを使用します。 このチュートリアルを正確に実行したい場合は、前提条件の環境をセットアップするために使用したチュートリアルを次に示します。

開始環境は次のようになります。

現在の環境に加えて、次のVPSを作成します。

  • haproxy-www :負荷分散とリバースプロキシ用のHAProxyサーバー
  • wordpress-2 :2番目のWordPress Webアプリケーションサーバー(環境のWordPressコンポーネントの負荷を分散する場合にのみ必要)
  • web-2 :2番目のNginx Webサーバー(環境のNginxコンポーネントの負荷を分散する場合にのみ必要)

レイヤー7ロードバランシングバックエンド ACL など、基本的なロードバランシングの概念や用語に慣れていない場合は、次の記事で基本を説明します。 HAProxyと負荷分散の概念の概要

私たちの目標

このチュートリアルの終わりまでに、次のような環境が必要になります。

つまり、ユーザーはhttp://example.comを介して両方のアプリケーションにアクセスします。 http://example.com/wordpress で始まるすべてのリクエストは、WordPressサーバーに転送され、他のすべてのリクエストは、基本的なNginxサーバーに転送されます。 アプリケーションを単一のドメインに表示するために、必ずしもアプリケーションの負荷分散を行う必要はありませんが、このチュートリアルでは負荷分散について説明します。

注: DigitalOceanロードバランサーは、フルマネージドで可用性の高いロードバランシングサービスです。 DigitalOceanでアプリケーションを実行している場合、これらのタイプの構成では、ロードバランサーサービスがHAProxyを置き換えることができる場合があります。 これを試すには、HAProxyを設定する代わりに、手順2のロードバランサーの設定に関するガイドに従ってください。

HAProxyをインストールする

プライベートネットワーキングを使用して新しいVPSを作成します。 このチュートリアルでは、これをhaproxy-wwwと呼びます。

haproxy-www VPSで、apt-getを使用してHAProxyをインストールしましょう。

sudo apt-get update
sudo apt-get install haproxy

HAProxy initスクリプトを有効にする必要があるため、HAProxyはVPSとともに開始および停止します。

sudo vi /etc/default/haproxy

の値を変更します ENABLED1 HAProxyの初期化スクリプトを有効にするには:

ENABLED=1

保存して終了します。 これで、HAProxyはVPSで開始および停止します。 また、あなたは今使用することができます service HAProxyを制御するコマンド。 実行されているかどうかを確認しましょう。

user@haproxy-www:/etc/init.d$ sudo service haproxy status
haproxy not running.

実行されていません。 使用する前に構成する必要があるため、これで問題ありません。 次に、環境に合わせてHAProxyを構成しましょう。

HAProxyの設定

HAProxyの設定ファイルは、2つの主要なセクションに分かれています。

  • グローバル:プロセス全体のパラメーターを設定します
  • プロキシデフォルトリッスンフロントエンド、およびバックエンドパラメーターで構成されます

繰り返しになりますが、HAProxyまたは基本的な負荷分散の概念と用語に慣れていない場合は、次のリンクを参照してください。HAProxyと負荷分散の概念の概要

HAProxy構成:グローバル

すべてのHAProxy設定は、HAProxy VPS、haproxy-wwwで行う必要があります。

まず、デフォルトのhaproxy.cfgファイルのコピーを作成しましょう。

cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig

次に、テキストエディタでhaproxy.cfgを開きます。

sudo vi /etc/haproxy/haproxy.cfg

globaldefaultsの2つのセクションがすでに定義されていることがわかります。 まず、デフォルトのパラメータのいくつかを見ていきます。

defaults で、次の行を探します。

mode    http
option  httplog

モードとしてhttpを選択すると、HAProxyがレイヤー7またはアプリケーションレイヤーの負荷分散を実行するように構成されます。 これは、ロードバランサーがhttpリクエストのコンテンツを確認し、フロントエンドで定義されたルールに基づいて適切なサーバーに転送することを意味します。 この概念に慣れていない場合は、 Intro toHAProxyTypesof LoadBalancingセクションをお読みください。

まだ設定ファイルを閉じないでください! 次にプロキシ設定を追加します。

HAProxy構成:プロキシ

フロントエンド構成

最初に追加したいのはフロントエンドです。 基本的なレイヤー7リバースプロキシと負荷分散のセットアップでは、トラフィックを適切なバックエンドサーバーに転送するために使用されるACLを定義する必要があります。 HAProxyで使用できるACLは多数あります。このチュートリアルではそのうちの1つ( path_beg )についてのみ説明します。HAProxyのACLの完全なリストについては、公式ドキュメントを確認してください。 HAProxy ACL

ファイルの最後に、フロントエンドwwwを追加しましょう。 必ず交換してください haproxy_www_public_IP haproxyのパブリックIPを使用-wwwVPS:

フロントエンドwwwbindhaproxy_www_public_IP :80 option http-server-close acl url_wordpress path_beg / wordpress use_backend wordpress-backend if url_wordpress default_backend web-backend

上記のフロントエンド設定スニペットの各行の意味は次のとおりです。

  • フロントエンドwww:「www」という名前のフロントエンドを指定します。これを使用して着信wwwトラフィックを処理します
  • bind haproxy_www_public_IP:80 :置換 haproxy_www_public_IP haproxy-wwwのパブリックIPアドレスを使用します。 これは、このフロントエンドがこのIPアドレスとポートで着信ネットワークトラフィックを処理することをHAProxyに通知します
  • option http-server-close :サーバーでHTTP接続クローズモードを有効にし、クライアントでHTTPキープアライブとパイプラインをサポートする機能を維持します。 このオプションにより、HAProxyは単一の接続で複数のクライアント要求を処理できるようになり、多くの場合、パフォーマンスが向上します
  • acl url_wordpress path_beg / wordpress :リクエストのパスが「/ wordpress」で始まる場合にtrueと評価されるurl_wordpressというACLを指定します。例: http://example.com/wordpress/hello-world
  • use_backend wordpress-backend if url_wordpress url_wordpressACLに一致するトラフィックをwordpress-backendに転送します。これはまもなく定義されます
  • default_backend web-backend :これは、use_backendルールに一致しないトラフィックがweb-backendに転送されることを指定します。これは次で定義します。ステップ

バックエンド構成

フロントエンドの構成が完了したら、次の行を追加して最初のバックエンドを追加し続けます。 強調表示された単語を適切な値に置き換えてください。

バックエンドWeb-バックエンドサーバーWeb- 1web_1_private_IP :80チェック

上記のバックエンド構成スニペットの各行の意味は次のとおりです。

  • backend web-backend web-backendという名前のバックエンドを指定します
  • server web-1… web-1 という名前のバックエンドサーバー、プライベートIP(置換する必要があります)、およびリッスンしているポート 80 [X157X ] この場合。 check オプションを使用すると、ロードバランサーはこのサーバーで定期的にヘルスチェックを実行します。

次に、WordPressアプリケーションのバックエンドを追加します。

バックエンドワードプレス-バックエンドreqrep^([^ \:]  )\ /ワードプレス/(。  )\ 1 \ / \2サーバーwordpress- 1wordpress_1_private_IP :80チェック

上記のバックエンド構成スニペットの各行の意味は次のとおりです。

  • backend wordpress-backend wordpress-backendという名前のバックエンドを指定します
  • reqrep…:トラフィックをWordPressサーバーに転送するときに、 /wordpressのリクエストを/に書き換えます。 WordPressアプリケーションがサーバールートにインストールされている場合、これは必要ありませんが、HAProxyサーバーの/wordpressからアクセスできるようにする必要があります
  • server wordpress-1… wordpress-1 という名前のバックエンドサーバー、プライベートIP(置換する必要があります)、およびリッスンしているポート 80 [X169X ] この場合。 check オプションを使用すると、ロードバランサーはこのサーバーで定期的にヘルスチェックを実行します。

HAProxy構成:統計

HAProxyが着信トラフィックをどのように処理しているかを判断するのに役立つ、HAProxy統計を有効にする場合は、以下を構成に追加する必要があります。

統計を聞く:1936統計を有効にする
stats scope www stats scope web-backend stats scope wordpress-backend stats uri / stats realm Haproxy \ Statistics stats auth userpassword

上記のlistenstats構成スニペットの重要な行の説明は次のとおりです。

  • listen stats:1936 :ポート1936でアクセスできるようにHAProxyの統計ページを構成します(つまり、 http:// haproxy _www_public_IP:1936)
  • 統計スコープ…:指定されたフロントエンドまたはバックエンドで統計を収集します
  • stats uri / :統計ページのURIを/として指定します
  • stats realm Haproxy \ Statistics :統計を有効にし、認証レルム(ポップアップ認証)名を設定します。statsauthオプションと組み合わせて使用します
  • stats auth haproxy:password :統計ページの認証クレデンシャルを指定します。 ユーザー名とパスワードを自分のものに変更します

保存して終了します。 HAProxyを起動すると、HAProxyサービスを起動すると、統計ページが http:// haproxy_www_public_ip:1936/から利用できるようになります。 これでHAProxyを開始する準備ができましたが、最初にロギングを有効にしましょう。

HAProxyログの有効化

HAProxyでのロギングの有効化は非常に簡単です。 まず、rsyslog.confファイルを編集します。

sudo vi /etc/rsyslog.conf

次に、次の2行を見つけ、コメントを外してUDPsyslog受信を有効にします。 完了すると、次のようになります。

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

次に、rsyslogを再起動して、新しい構成を有効にします。

sudo service rsyslog restart

HAProxyロギングが有効になりました! ログファイルは次の場所に作成されます。 /var/log/haproxy.log HAProxyが開始されると。

WordPress構成を更新する

WordPressアプリケーションのURLが変更されたので、WordPressのいくつかの設定を更新する必要があります。

いずれかのWordPressサーバーで、wp-config.phpを編集します。 WordPressをインストールした場所にあります(チュートリアルでは、 /var/www/example.com にインストールされていますが、インストールは異なる場合があります):

 cd /var/www/example.com ;  sudo vi wp-config.php

上部にある「 define('DB_NAME', 'wordpress'); その上に次の行を追加し、強調表示された値に置き換えます。

 define('WP_SITEURL'、' http:// haproxy_www_public_IP ');  define('WP_HOME'、' http:// haproxy_www_public_IP ');

保存して終了します。 これで、WordPress URLは、元のWordPressサーバーだけでなく、ロードバランサーを指すように構成されました。これは、wp-adminダッシュボードにアクセスしようとしたときに機能します。

HAProxyを起動します

haproxy-www で、HAProxyを起動して、構成の変更を有効にします。

sudo service haproxy restart

リバースプロキシ完了

これで、アプリケーションは同じドメイン example.com からレイヤー7リバースプロキシ経由でアクセスできますが、まだ負荷分散されていません。 環境は次の図のようになります。

前に定義したフロントエンドに従って、HAProxyがトラフィックを転送する方法の説明は次のとおりです。

単一のドメインで複数のアプリケーションをホストするだけでよい場合は、これで完了です。 アプリケーションの負荷を分散したい場合は、読み進める必要があります。

負荷分散を追加する方法

負荷分散ウェブ-1

基本的なWebサーバーの負荷を分散するには、元のWebサーバーと同じ構成とコンテンツを持つ新しいWebサーバーを作成するだけです。 この新しいサーバーをweb-2と呼びます。

新しいVPSを作成するときは、次の2つのオプションがあります。

  1. web-1 のスナップショットから新しいVPSを作成するオプションがある場合、それがweb-2を作成する最も簡単な方法です。
  2. ゼロから作成します。 すべて同じソフトウェアをインストールし、同じように構成してから、rsyncを使用してNginxサーバールートのコンテンツをweb-1からweb-2にコピーします(Rsyncチュートリアルを参照) ])。

:前述の両方の方法は、サーバーのルートコンテンツの1回限りのコピーを実行します。 サーバーノードweb-1またはweb-2のいずれかでファイルを更新する場合は、ファイルを再度同期するようにしてください。

同一のWebサーバーをセットアップしたら、HAProxy構成のweb-backendに追加します。

haproxy-www で、haproxy.cfgを編集します。

sudo vi /etc/haproxy/haproxy.cfg

構成のweb-backendセクションを見つけます。

バックエンドWeb-バックエンドサーバーWeb- 1web_1_private_IP :80チェック

次に、web-2サーバーを次の行に追加します。

サーバーweb- 2web_2_private_IP :80チェック

保存して終了します。 次に、HAProxyをリロードして、変更を有効にします。

sudo service haproxy reload

これで、 web-backend には、WordPress以外のすべてのトラフィックを処理する2つのサーバーがあります。 負荷分散されています! `

ロードバランシングワードプレス-1

WordPressなどのアプリケーションの負荷分散は、アップロードされたファイルや追加のデータベースユーザーの同期などについて心配する必要があるため、静的Webサーバーの負荷分散よりも少し複雑です。

追加の同一のWordPressサーバーを作成するために必要なすべての手順は、別の負荷分散チュートリアルで説明されています:WordPressのレイヤー4ロードバランサーとしてHAProxyを使用する方法。 そのチュートリアルの次の3つの手順を実行して、2番目のWordPressサーバーwordpress-2を作成します。

  1. 2番目のWebアプリケーションサーバーを作成する
  2. Webアプリケーションファイルを同期する
  3. 新しいデータベースユーザーを作成する

まだ負荷分散されていないというセクションに到達したら停止します。

wordpress-2 を作成し、データベースを正しく設定したら、HAProxy構成のwordpress-backendに追加するだけです。

haproxy-www で、haproxy.cfgを編集します。

sudo vi /etc/haproxy/haproxy.cfg

構成のwordpress-backendセクションを見つけます。

バックエンドワードプレス-バックエンドサーバーワードプレス-1wordpress_1_private_IP :80チェック

次に、wordpress-2サーバーを次の行に追加します。

サーバーwordpress- 2wordpress_2_private_IP :80チェック

保存して終了します。 次に、HAProxyをリロードして、変更を有効にします。

sudo service haproxy reload

これで、 wordpress-backend には、すべてのWordPressトラフィックを処理する2つのサーバーがあります。 負荷分散されています!

結論

このチュートリアルを完了すると、リバースプロキシと負荷分散の概念を拡張して、環境にアプリケーションとサーバーを追加し、ニーズに適合させることができるようになります。 環境を構成する方法は無限にあることを忘れないでください。より複雑な要件がある場合は、HAProxy構成マニュアルを詳しく調べる必要があるかもしれません。

さらに、WordPressインスタンスのパフォーマンスを向上させる別の方法を探している場合は、MySQLレプリケーションを調べることをお勧めします。 WordPressでそれを設定する方法を説明するこのチュートリアルをチェックしてください:

ミッチェル・アニカス