Webアプリケーションの可用性、スケーラビリティ、および高性能を最大限に確保するために、サーバークラスタリングや負荷分散など、冗長性を導入するテクノロジを実装することが一般的になっています。たとえば、すべて同じアプリケーションを実行するサーバーのクラスターをセットアップし、それらの前にロードバランサーを配置して、トラフィックを分散します。
HAProxy は、オープンソースで、強力で、高性能で、信頼性が高く、安全で、広く使用されている高可用性 TCP / HTTP 非常にトラフィックの多いWebサイト用に構築されたロードバランサー、プロキシサーバー、SSL/TLSターミネーター。 Linuxで確実に動作します 、 Solaris 、 FreeBSD 、 OpenBSD また、AIXオペレーティングシステム。
このガイドでは、 HAProxyを使用して専用の高可用性ロードバランサーを設定する方法を示します。 CentOS 8 NGINXのクラスター内のトラフィックを制御する Webサーバー。また、 SSL / TLSを構成する方法も示します HAProxyでの終了 。
前提条件:
CentOS8のインストールが最小限の合計4台のサーバー。
テスト環境のセットアップ
-----------HAProxyサーバーのセットアップ----------- HAプロキシサーバー-ホスト名:haproxy-server.tecmint.lan; IP:10.42.0.247テストサイトドメイン:www.tecmint.lan-----------クライアントWebサーバーのセットアップ----------- Webサーバー#1-ホスト名:websrv1.tecmint.lan; IP:10.42.0.200Webサーバー#2-ホスト名:websrv2.tecmint.lan; IP:10.42.0.21Webサーバー#3-ホスト名:websrv3.tecmint.lan; IP:10.42.0.34
ステップ1:クライアントマシンでのNginxHTTPサーバーのセットアップ
1。 すべてのCentOS8にログインします クライアントマシンとNginxをインストールします 示されているように、dnfパッケージマネージャーを使用する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かどうかをテストします インストールは正常に機能しています。 Nginx が表示されたら、クライアントIPを使用してナビゲートします テストページは、クライアントマシンにインストールされているWebサーバーが正しく機能していることを意味します。
すべてのCentOS8クライアントマシンでのNginxインストールのテスト
5。 次に、後で HAProxyをテストするために使用するクライアントマシン上にテストページを作成する必要があります。 セットアップ。
----------- Webサーバー#1 ----------- #cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig# echo"websrv1.tecmint.lanからのサイトを表示しています">/ usr / share / nginx / html / index.html ----------- Webサーバー#2 ----------- #cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig# echo"Websrv2.tecmint.lanからのサイトを表示中">/ usr / share / nginx / html / index.html ----------- Webサーバー#3 ----------- #cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig# echo"websrv3.tecmint.lanからのサイトを表示しています">/ usr / share / nginx / html / index.html
ステップ2:CentOS8へのHAProxyサーバーのインストールと構成
6。 次に、 HAProxyをインストールします HAProxyのパッケージ 次のコマンドを実行してサーバーを作成します。
#dnf install haproxy
7。 次に、 HAProxyを起動します サービスを有効にして、システムの起動時に自動起動し、ステータスを確認します。
#systemctl start haproxy#systemctl enable haproxy#systemctl status haproxy
CentOS8でHAProxyステータスを確認する
8。 次に、次の構成ファイルを使用してHAProxyを構成します。
#vi /etc/haproxy/haproxy.cfg
構成ファイルは、4つの主要なセクションに分かれています。
- グローバル設定 –プロセス全体のパラメータを設定します。
- デフォルト –このセクションは、宣言に続く他のすべてのセクションのデフォルトパラメータを設定します。
- フロントエンド –このセクションでは、クライアント接続を受け入れる一連のリスニングソケットについて説明します。
- バックエンド –このセクションでは、着信接続を転送するためにプロキシが接続する一連のサーバーについて説明します。
グローバル設定のオプションを理解するには およびデフォルト 、HAProxyのドキュメント(記事の最後にあるリンク)をお読みください。このガイドでは、デフォルトを使用します。
HAProxyログの設定
9。 HAProxy 一度展開すると、ITインフラストラクチャで重要な役割を果たします。したがって、そのためのロギングを構成することが基本的な要件です。これにより、バックエンドWebサーバーへの各接続に関する洞察を得ることができます。
ログパラメータ (次のスクリーンショットで強調表示されています)グローバルな Syslogを宣言します ログメッセージを受信するサーバー(CentOSのデフォルトのrsyslogなど)。ここで複数のサーバーを宣言できます。
デフォルトの構成はlocalhostを指します ( 127.0.0.1 )および local2 rsyslogでHAProxyログメッセージを識別するために使用されるデフォルトのファシリティコードです。 。
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.loglocal2.notice /var/log/haproxy-admin.log
11。 ファイルを保存して閉じます。次に、 rsyslogを再起動します 最近の変更を適用するサービス。
#systemctl restart rsyslog
HAProxyフロントエンドとバックエンドの設定
12。 このセクションでは、フロントエンドプロキシとバックエンドプロキシを構成する方法を示します。 HAProxyに戻ります 構成ファイルを作成し、デフォルトのフロントエンドセクションとバックエンドセクションを次のように変更します。各パラメータの詳細な説明は行いません。いつでも公式ドキュメントを参照できます。
次の構成は、リッスンを定義します HAProxy統計を提供するために使用されるセクション ページ。 バインド パラメータは、リスナーを特定のIPアドレス(*
)に割り当てます この場合はすべて)およびポート ( 9000 。
統計有効 この設定により、 URI / statsを使用してアクセスされる統計ページが有効になります (つまり、http://server_ip:9000/stats
。
統計認証 設定は、ページにアクセスするときに基本認証を追加するために使用されます( haproxy を置き換えます) および[メール保護] 選択したユーザー名とパスワードを使用します。
listen stats bind *:9000 stats enable stats hidden-version stats uri / stats stats admin if LOCALHOST stats auth haproxy:[email protected]
13。 次の構成では、 TLというフロントエンドセクションを定義します (お好みの名前を付けることができます)。 モード パラメータは、HAProxyが動作するモードを定義します。
acl (アクセス制御リスト)パラメーターは、要求から抽出されたコンテンツに基づいて決定を行うために使用されます。この例では、リクエストはプレーンな HTTPと見なされます SSLで作成されていない場合 。
次に、 http-request set-header 設定は、リクエストにHTTPヘッダーを追加するために使用されます。これは、 Nginxに通知するのに役立ちます 最初のリクエストがHTTPを介して行われたこと (またはポート 80経由 。
default_backend またはuse_backend ディレクティブは、バックエンドサーバーを定義します。この場合、 TL_web_serversによって参照されます。 。
HAProxyに注意してください 「503ServiceUnavailableエラー」が返されます 」リクエストがuse_backendによってルーティングされていない場合 またはdefault_backend ディレクティブ。
フロントエンドTLバインド*:80モードhttp acl http ssl_fc、http-request set-header X-Forwarded-Protocol http if http default_backend TL_web_servers
14。 次に、バランスが存在するバックエンドセクションを定義する必要があります 設定は、 HAProxyの方法を定義します 永続化メソッドがその選択をオーバーライドしない場合に、要求を処理するバックエンドサーバーを選択します。
クッキー ディレクティブはCookieベースを有効にします 永続性、 HAProxyに指示します SERVERIDという名前のCookieを送信します クライアントに送信し、それを IDに関連付けます 最初の応答を出したサーバーの。
サーバー ディレクティブは、 server_nameの形式でアップストリームサーバーを定義するために使用されます (例: websrv1 )、 server_IP:port およびオプション 。
重要なオプションの1つは、チェックです。 これはHAProxyに通知します サーバーの可用性をチェックし続け、統計ページでレポートします。
バックエンドTL_web_serversモードhttpバランスラウンドロビンオプションhttpchkHEAD/ cookieSERVERUID挿入間接nocacheサーバーwebsrv110.42.0.200:80 cookiewebsrv1チェックサーバーwebsrv210.42.0.21:80cookiewebsrv2チェックサーバーwebsrv310.42.0.34:80cookiewebsrv3チェック
次のスクリーンショットに示すように、他のフロントエンドセクションとバックエンドセクションをコメントアウトします。ファイルを保存して閉じます。
HAProxyフロントエンドとバックエンドの設定
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/ORhttp://www.tecmint.lan/
HAProxyの設定を確認してください
19。 HAProxyにアクセスするには 統計ページでは、次のアドレスを使用してください。
http://10.42.0.247:9000/stats
次に、HAProxy構成ファイルで定義したユーザー名とパスワードを使用します(stats authパラメーターを参照してください)。
HAProxyStatsログインページ
ログインに成功すると、 HAProxyにアクセスします。 サーバーの状態、現在の要求率、応答時間などをカバーするメトリックを表示する統計ページ。
カラーコードが機能することに関してステータスレポートがどのように機能するかを示すために、バックエンドサーバーの1つを配置しました。
HAProxy統計レポート
ステップ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 </ pre>HAProxyのSSLを作成する
21。 次に、 HAProxyを開きます 構成ファイル( /etc/haproxy/haproxy.cfg )フロントエンドセクションを編集します。
フロントエンドTLバインド*:80バインド*:443 ssl crt/etc/ssl/tecmint.lan/tecmint.pemリダイレクトスキームhttpsif!{ssl_fc}モードhttp acl http ssl_fc、not acl https ssl_fc http-request set-ヘッダーX-Forwarded-Protocolhttpif http http-request set-header X-Forwarded-Protocol https if https default_backend TL_web_serversSSLを使用してHAProxyフロントエンドを構成する
ファイルを保存して閉じます。
22。 次に、HAProxyサービスを再起動して、新しい変更を適用します。
#systemctl restart haproxy.service23。 次に、Webブラウザを開いて、もう一度サイトにアクセスしてみてください。自己署名証明書が原因でブラウザにエラーが表示されます。詳細strong>をクリックしてください 続行します。
HAProxySSL接続エラー
接続を続行します
HTTPS経由でサイトにアクセス
それは今のところすべてです!すべてのWebアプリケーションには独自の要件があり、ITインフラストラクチャとアプリケーションの要件に合わせて負荷分散を設計および構成する必要があります。
このガイドで使用されているいくつかの構成オプション、および一般的な HAProxyの使用方法に関する詳細情報を入手するには 、公式のHAProxyコミュニティエディションのドキュメントまたはHAProxyエンタープライズバージョンのドキュメントを参照してください。以下のフィードバックフォームから質問や考えを投稿できます。
共有は思いやりがあります…
Facebookで共有するTwitterで共有するLinkedinで共有するRedditで共有する
Cent OS