HAProxyは、非常に優れたパフォーマンスを備えたオープンソースのロードバランサーです。 Twitterのような惑星規模のWebアプリケーションでさえフロントエンドに使用されます。 TCP(レイヤー3)およびHTTP(レイヤー7)を介してネットワークアプリケーションの負荷を分散できます。また、必要に応じてアクティブなサーバーインスタンスへのリクエストをフェイルオーバーするため、高可用性(HA)を提供します。
E2Eネットワークは、HAProxyのような高性能ロードバランサーを実行するのに適したコンピューティングパワーを備えた指定ノードを提供します。これらのノードは、仮想ロードバランサー(VLB)ノードと呼ばれます。このブログでは、E2Eクラウドの仮想ロードバランサーノードにHAProxyを設定する方法について説明します。レイヤー7でHAProxyを使用して、ApacheWebサーバーで実行されているPHPアプリケーションをフロントエンドします。このブログの2番目の最後の部分では、基本的な設定に加えて、ほとんどのWebサイト管理者が実行する必要のあるいくつかの追加手順を実行します。これらの追加の手順は次のとおりです。セッションのスティッキ性を実装し、SSLを使用してWebサイトへのアクセスを保護します。多くの場合、これら2つのブログは自己完結型であり、システム管理者がE2EクラウドにデプロイされたWebアプリケーションのフロントエンドロードバランサーとしてHAProxyをスムーズにセットアップするのに役立ちます。
インストールと基本的なセットアップ
HAProxyに焦点を当てていますが、HTTPリクエストをルーティングできる2つのWebサーバーのインストールから始めます。 E2Eネットワークダッシュボードにログインした後、「ノードの作成」へのリンクをたどり、1CPUと2GBRAMを備えたUbuntu16.04ディストリビューションを選択します。 。この仮想計算ノードの名前を「websrv1」とします。 ‘。次に、別の同一ノードを起動して、「 websrv2」という名前の2番目のWebサーバーインスタンスをインストールします。 ‘。各Webサーバーノードに、(各Webサーバーノードの)ターミナルで次のコマンドを実行して、Apache2.4とPHPをインストールします。
- apt-get update
- apt-get install apache2#Webサーバーをインストールする
- apt-get install php libapache2-mod-php php-mcrypt#phpおよび関連パッケージ
- systemctl enable apache2#システムの再起動時にWebサーバーを起動できるようにする
- systemctl restart apache2#Webサーバーを再起動します
- systemctl status apache2#ウェブサーバーが稼働していることを確認します
WebサーバーインスタンスがPHPをサーバーできることをテストするために、viエディターを使用して各Webサーバーのドキュメントルート(/ var / www / htmlディレクトリ)に単純なPHPファイルを作成します:
<!DOCTYPE html>
Greeter
ello "<?php
/>?>
これで、ブラウザでhttp://
これで、HAProxyをインストールしてWebサーバーをフロントエンドする準備が整いました。 E2Eネットワークダッシュボードから、再びノードを作成しますが、今回は「アプライアンス」から作成します。タイプ「LoadBalancingHAProxy」のアプライアンスを選択します。利用可能な構成はいくつかありますが、HAProxyインスタンスにはVLB-B-1(5つのVCPUと4GBのRAM)を選択します。
図1:仮想ロードバランサーノードの作成
E2EクラウドのVLBノードは、CentOS 7で実行される強力な計算ノードです。これらの各ノードにHAProxyをインストールするには、ターミナルで次のコマンドを実行します。
- yum install haproxy#HAProxyをインストール
- systemctl enable haproxy#システムの再起動時にHAProxyを開始できるようにする
- systemctl restart haproxy#HAProxyを再起動します
- systemctl status haproxy#HAProxyが稼働中であることを確認します
このデプロイメントでは、HAProxyが機能するためにsyslogとopensslの2つの追加パッケージが必要になります。 VLBノード(CentOSで実行)にはこれら2つのパッケージがプリインストールされているため、追加のインストール手順は必要ありません。ただし、負荷分散が機能し始める前であっても、HAProxyのいくつかの構成手順が必要です。
HAProxyの一般的な構成
HAProxy設定ファイルは/etc/haproxy/haproxy.cfgにあり、すぐに使用できる設定がいくつか付属していますが、そのうちのいくつかは微調整が必要な場合があります。この構成ファイルには、少なくとも1つの「フロントエンド」と少なくとも1つの「バックエンド」が定義されている必要があります。各フロントエンドは、1つ以上のバックエンドに負荷分散します。バックエンドは、スケーラビリティと冗長性のために、同じWebアプリケーションにサービスを提供する複数のWebサーバーで構成されます。ただし、このファイルには、HAProxyのインストール全体に関連する「generic」というラベルのセクションと、 allに適用可能なパラメータ値を指定する「defaults」セクションもあります。 ここで定義されているフロントエンドとバックエンド。
最大接続数 :「グローバル」セクションで、「maxconn」パラメータを設定します(このロードバランサがすべてで処理できるクライアント接続の最大数 それに対応するバックエンド)。このパラメータは、HAProxyのサイズ設定ガイドラインを使用して設定できます。 、または逆に、Webサイトで発生する可能性のある予想されるピーク負荷に基づいて、E2EクラウドからVLBノードを選択できます。選択したVLB-B-1 ノード、4096は、グローバルレベルでの「maxconn」の妥当な値です。
図2:HAProxyのグローバルおよびデフォルトの構成パラメーター
プロトコル: 私たちのデプロイメントでは、HAProxyはHTTPトラフィックをインターセプトして負荷分散します。これは、上記のデフォルトセクションでモードを設定することで構成されます。
-
モードhttp
ロギング :HAProxyは syslogを使用することをお勧めします 。 CentOSでは、これは、上のスクリーンショットに示すように、「log」パラメーターを「local2」に設定することを意味します。さらに、HAProxyノード(/etc/rsyslog.conf)のsyslog構成も、UDPポート514でリッスンするように変更する必要があります。
図3:HAProxyノードでのSyslog構成
「local2」のすべてのログメッセージがHAProxy専用の別のファイル(/var/log/haproxy.log)に確実に送信されるようにするには、ディレクトリ/にhaproxy.confファイルを作成する必要があります。 etc / rsyslog.dと入力し、次の行を入力します:
-
local2。*/var/log/haproxy.log
エンドツーエンドのリクエストのトレーサビリティのために、Webサーバー構成ファイル(/etc/apache2/apache2.conf)のApacheWebサーバーログ形式も微調整する必要があります。各Webサーバーノードで、(HAProxyノードのIPアドレスを表示する代わりに)HTTPリクエストの発信元である実際のクライアントアドレス(X-Forwarded-For)を含めるようにLogFormatを変更します。
図4:ApacheWebサーバーのLogFormat
HAProxy統計 :HAProxyは、WebベースのUIに要求統計を表示するように構成できます。基本認証を使用して保護されたHAProxy統計(/ lb-stats)を表示するためのURLを設定できます。
その他のデフォルト :「デフォルト」セクションには、多数のタイムアウトパラメータがあります 変更せずに残しました。ただし、本番環境では、各サイト管理者は、ネットワークレイテンシ、サーバー側での処理時間などの要因に基づいてタイムアウトを微調整する必要がある場合があります。HTTPクライアント接続がすぐに閉じられるように、オプション「httpclose」を導入しました。リソースを不必要に消費することなく、応答が返送されるため(HTTP接続のKeep-Alive設定がない場合)。また、トレーサビリティのために、実際のクライアントIPアドレスがWebサーバーに転送されるようにしました(オプション「optionforwardfor」パラメーターを使用)。 HAProxy構成パラメーターの詳細な定義については、HAProxyドキュメント 相談する必要があります。
単純なラウンドロビン負荷分散
最初は、HAProxyのインストールによって負荷分散される単一のWebサイト(前述の単純なPHP Greeterアプリで構成されています)のみをセットアップしました。 E2Eクラウドダッシュボードにリストされているように、すでに2つのWebサーバーと1つのロードバランサー(HAProxy)をセットアップしています。
図5:Webサーバーノードとロードバランサーノード
まず、HAProxyをVLBノードの適切なIPアドレスとポート(通常はhttpモードの場合はポート80)にバインドします 。クライアントの要求を受け入れるには、IPアドレスが外部向けである必要があります。これにより、次のように「httptraffic」という名前の「フロントエンド」を定義できます(/etc/haproxy/haproxy.cfg内)。ここで、デフォルトでは、このフロントエンドはクライアントリクエストを「サイト」という名前のバックエンドに負荷分散します。
図6:HAProxyのフロントエンド構成
したがって、明らかに、「サイト」という名前の「バックエンド」を定義する必要があります。これは、リクエストをルーティングするWebサーバーのIPアドレスで構成されている必要があります(ただし、内部/プライベートアドレスを使用する必要があります) この目的のために)。また、負荷分散ポリシーを「ラウンドロビン」に指定します。 HAProxyを使用すると、定期的なヘルスチェックを有効にすることもできます。 「check」パラメータを使用して、バックエンドノードの
図7:HAProxyのバックエンド構成
この時点で、ロードバランサノードでsyslogとHAProxyを再起動する必要があります:
- systemctl restart rsyslog
- systemctl restart haproxy
ファイアウォール設定
HAProxyを介してWebアプリケーションにアクセスする前に、仮想ロードバランサーノードのポート80(httpモードに設定されたHAProxyの場合)とsyslogのUDPポート514を開く必要があります。 CentOSでは、これには iptablesを設定する必要があります 適切に:
- iptables -A INPUT -m state –state ESTABLISHED、RELATED -j ACCEPT
- iptables -A INPUT -i eth0 -p udp –dport 514 -j ACCEPT
- iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW、ESTABLISHED -j ACCEPT
- systemctl restart iptables
テスト
この段階で、前のセクションで説明した負荷分散機能といくつかの構成設定(ロギングと統計収集を含む)を実際にテストできます。
HAProxyに到達するリクエストを検出するには、ロードバランサノードで次のコマンドを実行します。
- tail -f /var/log/haproxy.log
HAProxyの場合、このログファイル(/var/log/haproxy.log)はsyslogを介して更新されます。
同様に、各ウェブサーバーノードのアクセスログをチェックして、リクエストをエンドツーエンドで追跡できます。
- tail -f /var/log/apache2/access.log
これで、2台の異なるマシンからシンプルなPHPGreeterアプリケーションにアクセスできるようになりました。 。各クライアントマシンで、ブラウザにURLを指定できます:
http://
HAProxyログの更新を見つける必要があります。 (これにより、syslog構成が機能していることも確認されます。)
図8:HAProxyログ(ラウンドロビン負荷分散)
リクエストの1つはノードwebsrv1によって処理され、もう1つはノードwebsrv2によって処理されます。これは、各Webサーバーのアクセスログから、およびタイムスタンプを厳密に一致させることによって明らかです。クライアントのIPアドレスは、HAProxy内およびWebサーバーログにも記録されます。
図9:ノードからのアクセスログ:websrv1
図10:ノードからのアクセスログ:websrv2
図11:ブラウザの表示
ロードバランサーの統計 :最後に、HAProxy統計を確認できます。 ブラウザで次のURL(「デフォルト」セクションで設定)を指定します。
http://
図12:ロードバランサーの統計
結論と次のステップ
これまでのところ、HAProxyを使用してE2Eクラウドで負荷分散を正常に設定できました。このブログの次の(そして最後の)部分では、スティッキーセッションとWebサイトへの安全なアクセスを有効にし、複数のアプリケーションを備えたより大きなWebサイトをセットアップすることで、この構成を次のレベルに引き上げます。これらの手順により、本番環境への導入に近づくことができます。
以下のリンクをたどって、ステップ2を確認してください。
E2Eクラウドでの負荷分散のためのHAProxyの使用:セッションのスティッキネスとセキュリティ