ウェブサイト検索

CentOS 8 で HAProxy を Nginx のロード バランサーとして設定する方法


Web アプリケーションの可用性、スケーラビリティ、および高いパフォーマンスを最大限に確保するために、サーバー クラスタリングや負荷分散などの冗長性を導入するテクノロジを実装することが現在では一般的です。たとえば、すべてが同じアプリケーションを実行するサーバーのクラスターをセットアップし、その前にロード バランサーをデプロイしてトラフィックを分散します。

HAProxy は、オープンソース、強力、高性能、信頼性、安全性が高く、広く使用されている高可用性の TCP/HTTP ロード バランサ、プロキシ サーバー、および SSL/TLS ターミネータです。非常にトラフィックの多い Web サイト。 AIX オペレーティング システムだけでなく、LinuxSolarisFreeBSDOpenBSDでも確実に動作します。

このガイドでは、CentOS 8 上の HAProxy を使用して専用の高可用性ロード バランサーをセットアップし、NGINX Web サーバーのクラスター内のトラフィックを制御する方法を説明します。また、HAProxySSL/TLS 終端を構成する方法も示します。

前提条件:

合計 4 台のサーバーに最小限の CentOS 8 がインストールされています。

テスト環境のセットアップ

----------- 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 クライアント マシンにログインし、図のように dnf パッケージ マネージャーを使用して Nginx Web サーバーをインストールします。

dnf install Nginx

2. 次に、Nginx サービスを開始します。ここでは、システム起動時に自動的に開始するように有効にし、systemctl を使用してステータスを確認して、サービスが稼働していることを確認します。コマンド (すべてのクライアント マシンでこれを実行します)。

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. また、すべてのクライアント マシンで firewalld サービスが実行されている場合 (systemctl start firewalld を実行することで確認できます)、HTTPファイアウォール構成内の HTTPS サービスにより、ロード バランサーからのリクエストがファイアウォールを通過してNginx Web サーバーに送信されるようになります。次に、firewalld サービスを再ロードして、新しい変更を有効にします (これをすべてのクライアント マシンで実行します)。

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. 次に、ローカル マシンで Web ブラウザを開き、Nginx インストールが正常に動作しているかどうかをテストします。クライアント IP を使用して移動します。Nginx テスト ページが表示されたら、クライアント マシンにインストールされている Web サーバーが正常に動作していることを意味します。

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 つの主要なセクションに分かれています。

  • グローバル設定 – プロセス全体のパラメータを設定します。
  • デフォルト – このセクションは、宣言に続く他のすべてのセクションのデフォルト パラメータを設定します。
  • フロントエンド – このセクションでは、クライアント接続を受け入れる一連の待機ソケットについて説明します。
  • バックエンド – このセクションでは、プロキシが受信接続を転送するために接続する一連のサーバーについて説明します。

グローバル設定デフォルトのオプションを理解するには、HAProxy のドキュメント (リンクは記事の最後にあります) を参照してください。このガイドでは、デフォルトを使用します。

HAProxy ログのセットアップ

9. HAProxy は、導入されると IT インフラストラクチャで重要な役割を果たすため、ログの構成は基本的な要件になります。これにより、バックエンド Web サーバーへの各接続に関する洞察を得ることができます。

log パラメータ (次のスクリーンショットで強調表示されている) は、ログ メッセージを受信するグローバルSyslog サーバー (CentOS のデフォルトの rsyslog など) を宣言します。ここでは複数のサーバーを宣言できます。

デフォルト設定は localhost (127.0.0.1) を指し、local2 で HAProxy ログ メッセージを識別するために使用されるデフォルトの機能コードです。 rsys ログ

10. 次に、rsyslog サーバーにHAProxy ログ メッセージを受信して処理する方法を指示する必要があります。 rsyslog 設定ファイルを /etc/rsyslog.conf に開くか、/etc/rsyslog.d ディレクトリ内に新しいファイルを作成します (例: /etc/rsyslog) .d/haproxy.conf

vi /etc/rsyslog.d/haproxy.conf

次の設定をコピーして貼り付け、デフォルト ポート 514UDP を使用してログを収集します。

$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 構成ファイルに戻り、デフォルトのフロントエンドとバックエンドのセクションを次のように変更します。各パラメータの詳細な説明は省略します。いつでも公式ドキュメントを参照してください。

次の設定は、HAProxy 統計ページを提供するために使用されるリッスンセクションを定義します。 bind パラメータは、リスナーを特定の IP アドレス (この場合はすべて *) とポート (9000) に割り当てます。 >)。

統計を有効に設定すると、URI /stats (つまり、http://server_ip:9000/stats) を使用してアクセスされる統計ページが有効になります。 。

統計情報の auth 設定は、ページにアクセスするときに基本認証を追加するために使用されます (haproxyLostp@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 (アクセス制御リスト) パラメータは、リクエストから抽出されたコンテンツに基づいて決定を行うために使用されます。この例では、リクエストがSSL経由で行われていない場合、リクエストはプレーンなHTTPとみなされます。

次に、http-request set-header 設定を使用して、HTTP ヘッダーをリクエストに追加します。これは、最初のリクエストが HTTP 経由 (またはポート 80 経由) で行われたことを Nginx に通知するのに役立ちます。

default_backend または use_backend ディレクティブは、バックエンド サーバーを定義します。この場合は、TL_web_servers によって参照されます。

リクエストが use_backend または default_backend によってルーティングされない場合、HAProxy は「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. 次に、バックエンド セクションを定義する必要があります。ここでは、バランス 設定によって、HAProxy がリクエストを処理するバックエンド サーバーを選択する方法を定義します。永続化メソッドはその選択をオーバーライドします。

cookie ディレクティブはcookie ベースの永続性を有効にし、HAProxySERVERID という名前の cookie をクライアントに送信するように指示します。最初の応答を返したサーバーのIDに関連付けます。

server ディレクティブは、server_name (websrv1 など)、server_IP:port の形式でアップストリーム サーバーを定義するために使用されます。そしてオプションです。

重要なオプションの 1 つは チェック で、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. この最後のセクションでは、HAProxy サーバーとクライアント間のすべての通信を保護するためにSSL/TLS を構成する方法を説明します。 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. 次に、Web ブラウザを開いてサイトにもう一度アクセスしてみます。自己署名証明書が原因でブラウザにエラーが表示されます。[詳細] をクリックして続行します。

それは今のところすべてです!すべての Web アプリケーションには独自の要件があり、IT インフラストラクチャとアプリケーションの要件に合わせて負荷分散を設計および構成する必要があります。

このガイドで使用されている構成オプションの一部、および一般的なHAProxyの使用方法について詳しくは、HAProxy コミュニティ エディションの公式ドキュメントまたは HAProxy エンタープライズ バージョンのドキュメントを参照してください。ご質問やご意見がございましたら、以下のフィードバック フォームから投稿していただけます。