Ubuntu14.04でWordPressおよびNginxのレイヤー7ロードバランサーとしてHAProxyを使用する方法
序章
このチュートリアルでは、HAProxyをレイヤー7ロードバランサーとして使用して、単一のドメイン名またはIPアドレスから複数のアプリケーションにサービスを提供する方法を説明します。 負荷分散により、環境のパフォーマンス、可用性、および復元力を向上させることができます。
複数のアプリケーションにサービスを提供する単一のドメイン名が必要な場合は、レイヤー7リバースプロキシと負荷分散がサイトに適しています。これは、httpリクエストを分析して、トラフィックを受信するアプリケーションを決定できるためです。
このチュートリアルは、WordPressと静的Webサイトを例として作成されていますが、その一般的な概念を他のアプリケーションで使用して、同様の効果を得ることができます。
前提条件
このチュートリアルを続行する前に、少なくとも2つのアプリケーションを別々のサーバーで実行する必要があります。 2つのアプリケーションとして、NginxとWordPressでホストされている静的Webサイトを使用します。 このチュートリアルを正確に実行したい場合は、前提条件環境をセットアップするために使用したチュートリアルを次に示します。
- wordpress-1 VPS:MySQLでサイトのパフォーマンスを最適化するためにリモートデータベースを設定する方法
- web-1 VPS: Ubuntu14.04にNginxをインストールする方法
開始環境は次のようになります。
現在の環境に加えて、次の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ロードバランサー are a fully-managed, highly available load balancing service. If you are running your application on DigitalOcean, the Load Balancer service may be able to replace HAProxy in these types of configurations. To try this out, follow our 手順2からロードバランサーを設定するためのガイド instead of setting up HAProxy.
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
ENABLED
の値を1
に変更して、HAProxyinitスクリプトを有効にします。
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
globalとdefaultsの2つのセクションがすでに定義されていることがわかります。 まず、デフォルトのパラメータのいくつかを見ていきます。
defaults で、次の行を探します。
mode http
option httplog
モードとしてhttpを選択すると、HAProxyがレイヤー7またはアプリケーションレイヤーの負荷分散を実行するように構成されます。 これは、ロードバランサーがhttpリクエストのコンテンツを確認し、フロントエンドで定義されたルールに基づいて適切なサーバーに転送することを意味します。 この概念に慣れていない場合は、 Intro toHAProxyのTypesof LoadBalancingセクションをお読みください。
まだ設定ファイルを閉じないでください! 次にプロキシ設定を追加します。
HAProxy構成:プロキシ
フロントエンド構成
最初に追加したいのはフロントエンドです。 基本的なレイヤー7リバースプロキシと負荷分散のセットアップでは、トラフィックを適切なバックエンドサーバーに転送するために使用されるACLを定義する必要があります。 HAProxyで使用できるACLは多数あります。このチュートリアルではそのうちの1つ( path_beg )についてのみ説明します。HAProxyのACLの完全なリストについては、公式ドキュメントを参照してください。 HAProxy ACL
ファイルの最後に、フロントエンドwwwを追加しましょう。 必ずhaproxy_www_public_IP
をhaproxyのpublicIPに置き換えてください-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 user : password
上記の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ログが有効になりました! HAProxyが起動すると、ログファイルが/var/log/haproxy.log
に作成されます。
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がトラフィックを転送する方法の説明は次のとおりです。
- http://example.com/wordpress : / wordpress で始まるリクエストは、 wordpress-backend (で構成されます)に送信されますwordpress-1 サーバー)
- http://example.com/ :その他のリクエストは web-backend ( web-1 サーバーで構成されます)に送信されます
単一のドメインで複数のアプリケーションをホストするだけでよい場合は、これで完了です。 アプリケーションの負荷を分散したい場合は、読み進める必要があります。
負荷分散を追加する方法
負荷分散ウェブ-1
基本的なWebサーバーの負荷を分散するには、元のWebサーバーと同じ構成とコンテンツを持つ新しいWebサーバーを作成するだけです。 この新しいサーバーをweb-2と呼びます。
新しいVPSを作成するときは、次の2つのオプションがあります。
- web-1 のスナップショットから新しいVPSを作成するオプションがある場合、それがweb-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を作成します。
まだ負荷分散されていないというセクションに到達したら停止します。
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でそれを設定する方法を説明するこのチュートリアルをチェックしてください: