ウェブアプリケーションの可用性、拡張性、および高性能を確保するために、サーバークラスタリングや負荷分散など、冗長性を導入する技術の実装が一般的になっています。たとえば、同じアプリケーションを実行する複数のサーバーのクラスターを設定し、それらの前に負荷分散器を展開してトラフィックを分散することがあります。
HAProxyは、非常に高いトラフィックのウェブサイト向けに構築された、オープンソースで強力で高性能、信頼性の高いセキュアなハイアベイラビリティのTCP/HTTP負荷分散器、プロキシサーバー、SSL/TLSターミネーターです。それはLinux、Solaris、FreeBSD、OpenBSD、およびAIXオペレーティングシステム上で信頼性高く実行されます。
このガイドでは、HAProxyを使用してCentOS 8上に専用の高可用性負荷分散器を設定し、NGINXウェブサーバーのクラスター内のトラフィックを制御する方法について説明します。また、HAProxyでSSL/TLSの終了を構成する方法も示します。
前提条件:
A total of 4 servers with minimal CentOS 8 installation.
テスト環境のセットアップ
----------- HAProxy Server Setup ----------- HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247 Test Site Domain: www.tecmint.lan ----------- Client Web Servers Setup ----------- Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200 Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21 Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34
ステップ1:クライアントマシンにNginx HTTPサーバーを設定する
1.すべてのCentOS 8クライアントマシンにログインし、Nginxウェブサーバーをdnfパッケージマネージャーを使用してインストールします。
# dnf install Nginx
2. 次に、現時点でNginxサービスを開始し、システムの起動時に自動的に開始するように設定し、その状態を確認するためにsystemctlコマンドを使用して状態を確認します(これをすべてのクライアントマシンで実行します)。
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
3. また、すべてのクライアントマシンでfirewalldサービスが実行されている場合(systemctl start firewalldを実行して確認できます)、ファイアウォール構成にHTTPおよびHTTPSサービスを追加して、負荷分散装置からNginxウェブサーバーに対するリクエストがファイアウォールを通過するようにします。その後、新しい変更を反映するためにfirewalldサービスをリロードします(これをすべてのクライアントマシンで実行します)。
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
4. 次に、ローカルマシンでウェブブラウザを開き、Nginxインストールが正常に機能しているかどうかをテストします。クライアントのIPを使用してナビゲートし、Nginxのテストページが表示されると、クライアントマシンにインストールされているウェブサーバーが正常に動作していることを意味します。

5. 次に、後でHAProxyセットアップをテストするために使用するクライアントマシンにテストページを作成する必要があります。
----------- Web Server #1 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #2 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #3 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html
ステップ2:CentOS 8にHAProxyサーバーをインストールして構成します
6. 以下のコマンドを実行して、HAProxy パッケージを HAProxy サーバーにインストールします。
# dnf install haproxy
7. 次に、HAProxy サービスを起動し、システムの起動時に自動的に起動するように設定し、その状態を確認します。
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy

8. 次に、次の構成ファイルを使用して HAProxy を構成します。
# vi /etc/haproxy/haproxy.cfg
構成ファイルは、4つの主要なセクションに分かれています。
- global settings – プロセス全体のパラメータを設定します。
- defaults – このセクションは、その宣言に続くすべての他のセクションのデフォルトパラメータを設定します。
- frontend – このセクションは、クライアント接続を受け入れるリスニングソケットのセットを記述します。
- Backend – このセクションは、プロキシが転送される着信接続先のサーバーのセットを記述します。
global settings と defaults のオプションを理解するには、HAProxy のドキュメントを参照してください(記事の最後にリンクが提供されています)。このガイドでは、デフォルトを使用します。
HAProxy ロギングの設定
9. 一度デプロイされた HAProxy は、ITインフラストラクチャにおいて重要な役割を果たすため、それに対してログを設定することは基本的な要件です。これにより、バックエンドのWebサーバーへの各接続に関する洞察を得ることができます。
ログパラメーター(以下のスクリーンショットで強調表示されています)は、ローカルなSyslogサーバー(たとえばCentOSのデフォルトであるrsyslog)を宣言し、ログメッセージを受信することができます。ここには複数のサーバーを宣言できます。
デフォルトの設定は、localhost(127.0.0.1)を指し示し、local2はrsyslogでHAProxyログメッセージを識別するために使用されるデフォルトのファシリティコードです。

10.次に、rsyslogサーバーにHAProxyログメッセージを受信および処理する方法を指示する必要があります。rsyslog構成ファイルを開いてください:/etc/rsyslog.conf、または/etc/rsyslog.dディレクトリ内に新しいファイルを作成してください。たとえば、/etc/rsyslog.d/haproxy.confです。
# vi /etc/rsyslog.d/haproxy.conf
以下の構成をコピーしてUDPを使用してデフォルトポート514でログを収集するように設定してください。
$ModLoad imudp $UDPServerAddress 127.0.0.1 $UDPServerRun 514
rsyslogにこれらの行を追加して、重大度に基づいて2つの別々のログファイルに書き込むように指示してください。ここで、local2は上記のHAProxy構成で定義されたファシリティコードです。
local2.* /var/log/haproxy-traffic.log local2.notice /var/log/haproxy-admin.log
11.ファイルを保存して閉じてください。その後、最近の変更を適用するためにrsyslogサービスを再起動してください。
# systemctl restart rsyslog
HAProxyフロントエンドとバックエンドの構成
12. このセクションでは、フロントエンドとバックエンドのプロキシの構成方法を説明します。 HAProxy 構成ファイルに戻り、デフォルトのフロントエンドおよびバックエンドセクションを次のように変更します。各パラメータの詳細な説明には立ち入りませんが、公式ドキュメントを常に参照できます。
次の構成は、listen セクションを定義し、HAProxy Stats ページを提供するために使用されます。 bind パラメータは、指定されたIPアドレス(この場合はすべての場合は *
)と port (9000) にリスナーを割り当てます。
stats enable 設定は、統計ページを有効にし、URI /stats(つまり http://server_ip:9000/stats
)を使用してアクセスされます。
stats auth 設定は、ページにアクセスする際に基本認証を追加するために使用されます(haproxy と Lostp@1ss を任意のユーザー名とパスワードで置き換えます)。
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:Lostp@1ss
13. 次の構成は、TL と呼ばれるフロントエンドセクションを定義します(お好みで名前を付けることができます)。mode パラメータは、HAProxy が動作するモードを定義します。
acl(アクセス制御リスト)パラメータは、リクエストから抽出されたコンテンツに基づいて決定を行うために使用されます。この例では、リクエストがHTTP上で行われていない場合、それはプレーンなリクエストと見なされます。
その後、http-request set-header設定が使用されて、リクエストにHTTPヘッダーが追加されます。これにより、Nginxに初期リクエストがHTTP(またはポート80経由で)で行われたことが通知されます。
default_backendまたはuse_backendディレクティブは、バックエンドサーバーを定義します。この場合、TL_web_serversで参照されます。
注意:HAProxyは、リクエストがuse_backendまたはdefault_backendディレクティブによってルーティングされない場合、「503 Service Unavailable error」を返します。
frontend TL bind *:80 mode http acl http ssl_fc,not http-request set-header X-Forwarded-Protocol http if http default_backend TL_web_servers
14.次に、balance設定がバックエンドサーバーを選択する方法を定義するバックエンドセクションを定義する必要があります。持続性の方法がその選択を上書きしない場合、HAProxyがリクエストを処理するためにバックエンドサーバーを選択します。
cookieディレクティブは、クッキーベースの持続性を有効にします。これにより、HAProxyは、クライアントにSERVERIDという名前のクッキーを送信し、それを最初のレスポンスを提供したサーバーのIDに関連付けます。
serverディレクティブは、server_name(例:websrv1)、server_IP:port、およびoptionsの形式でアップストリームサーバーを定義するために使用されます。
重要なオプションの1つは、checkで、HAProxyにサーバーの可用性を定期的にチェックし、統計ページにレポートするように指示します。
backend TL_web_servers mode http balance roundrobin option httpchk HEAD / cookie SERVERUID insert indirect nocache server websrv1 10.42.0.200:80 cookie websrv1 check server websrv2 10.42.0.21:80 cookie websrv2 check server websrv3 10.42.0.34:80 cookie websrv3 check
次に、スクリーンショットに示されているように、他のフロントエンドおよびバックエンドセクションをコメントアウトします。ファイルを保存して閉じます。

15.次に、新しい変更を適用するためにHAProxyサービスを再起動します。
# systemctl restart haproxy
16.次に、クライアントリクエストを受け入れるためにファイアウォールでHTTP(ポート80)およびHTTPS(ポート433)サービスが開かれていることを確認します。また、統計ページにアクセスするためにファイアウォールでポート9000を開き、ファイアウォール設定をリロードします。
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent –add-service=https # firewall-cmd --zone=public --permanent --add-port=9000/tcp # firewall-cmd --reload
ステップ3:HAProxyのセットアップのテストと統計情報の表示
17.次に、HAPrxoyのセットアップをテストする時間です。すべてのサーバーにアクセスしているローカルデスクトップマシンで、ダミーサイトドメインを使用できるように/etc/hostsファイルに次の行を追加します。
10.42.0.247 www.tecmint.lan
18.次に、ブラウザを開いて、サーバーアドレスまたはサイトドメインを使用してナビゲートします。
http://10.42.0.247/ OR http://www.tecmint.lan/

19.HAProxy統計ページにアクセスするには、次のアドレスを使用します。
http://10.42.0.247:9000/stats
その後、HAProxy構成ファイルで定義したユーザー名とパスワードを使用します(stats authパラメータを参照)。

ログインに成功すると、HAProxy 統計ページに移動します。このページでは、サーバーの健康状態、現在のリクエストレート、応答時間などをカバーするメトリクスが表示されます。
色コードの動作を示すために、バックエンドサーバーの1つを設定しました。

ステップ4: セルフサインドSSL証明書を使用してHAProxyでHTTPSを構成する
20. 最後のセクションでは、SSL/TLS を構成して、HAProxyサーバーとクライアント間のすべての通信をセキュリティで保護する方法を示します。HAProxyは4つの主要なHTTPS 構成モードをサポートしていますが、このガイドではSSL/TLS オフロードを使用します。
SSL/TLS オフロードモードでは、HAProxy はクライアント側でトラフィックを解読し、バックエンドサーバーにはクリアトラフィックで接続します。
まず、スクリーンショットで強調されているように、証明書 と キー を作成します(証明書作成時に会社の詳細に基づいて適切に回答してください)。
# mkdir /etc/ssl/tecmint.lan # cd /etc/ssl/tecmint.lan/ # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt # cd /etc/ssl/tecmint.lan/ # cat tecmint.crt tecmint.key >tecmint.pem # ls -l

21. 次に、HAProxy 構成ファイル(/etc/haproxy/haproxy.cfg)を開き、フロントエンドセクションを編集します。
frontend TL bind *:80 bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem redirect scheme https if !{ ssl_fc } mode http acl http ssl_fc,not acl https ssl_fc http-request set-header X-Forwarded-Protocol http if http http-request set-header X-Forwarded-Protocol https if https default_backend TL_web_servers

ファイルを保存して閉じます。
22. 次に、新しい変更を適用するためにHAProxyサービスを再起動します。
# systemctl restart haproxy.service
23. 次に、ウェブブラウザを開いてサイトに再アクセスしてみてください。セルフサインド証明書のためにエラーが表示されますが、進むには詳細 をクリックしてください。



それでは、これで終わりです!すべてのウェブアプリケーションには独自の要件があります。ITインフラストラクチャとアプリケーションの要件に合わせてロードバランシングを設計および構成する必要があります。
このガイドで使用されているいくつかの構成オプションや一般的なHAProxyの使用方法について詳細を知りたい場合は、公式のHAProxyコミュニティエディションのドキュメントまたはHAProxyエンタープライズ版のドキュメントを参照してください。以下のフィードバックフォームから質問や考えを投稿できます。
Source:
https://www.tecmint.com/setup-nginx-haproxy-load-balancer-in-centos-8/