Haproxyは、その効率、信頼性、およびメモリとCPUのフットプリントが低いため、ロードバランシングで人気があります。負荷分散は、ユーザーにサービスへの単一のアクセスポイントを提供しながら、ウェブアプリケーションを複数のホストに水平に分散するための一般的なソリューションです。
主要なLinuxディストリビューションにインストールできます。このガイドでは、Debian11にHAProxyロードバランサーをインストールして構成する方法を学習します。
また、チェックしてください:
- Rocky Linux / AlmaLinux8にHAProxyロードバランサーをインストールして構成する方法
- Ubuntu20.04にHAProxyロードバランサーをインストールして構成する方法
HAProxy負荷分散アルゴリズム
バランシングアルゴリズムは、各接続が転送されるバックエンドのサーバーを決定するために使用されます。便利なオプションには、次のものがあります。
- ラウンドロビン:各サーバーは、その重みに応じて順番に使用されます。これは、サーバーの処理時間が均等に分散されている場合に最もスムーズで公平なアルゴリズムです。このアルゴリズムは動的であるため、サーバーの重みをその場で調整できます。
- Leastconn:接続数が最も少ないサーバーが選択されます。ラウンドロビンは、同じ負荷のサーバー間で実行されます。このアルゴリズムの使用は、LDAP、SQL、TSEなどの長いセッションで推奨されますが、HTTPなどの短いセッションにはあまり適していません。
- 最初:接続スロットが利用可能な最初のサーバーが接続を受信します。サーバーは、最小の数値IDから最大の数値IDまで選択されます。これは、デフォルトでファーム上のサーバーの位置になります。サーバーがmaxconn値に達すると、次のサーバーが使用されます。
- ソース:ソースIPアドレスはハッシュ化され、実行中のサーバーの総重量で除算されて、リクエストを受信するサーバーを指定します。このように、サーバーが同じままである間、同じクライアントIPアドレスは常に同じサーバーに到達します。
目次
- サーバーが最新であることを確認する
- HAProxyのインストール
- ロードバランサーとしてのHAProxyの構成
- セットアップのテスト
- HAProxy統計ページを保護するパスワード
1。サーバーが最新であることを確認する
先に進む前に、サーバーが最新であることを確認しましょう。これを実現するには、次のコマンドを使用します。
sudo apt update
sudo apt upgrade -y
2。 Haproxyのインストール
haproxyを提供するパッケージは、デフォルトのDebianリポジトリで利用できます。次のコマンドを使用してインストールします:
sudo apt install -y haproxy
次のコマンドでインストールを確認します:
$ apt-cache policy haproxy
haproxy:
Installed: 2.2.9-2+deb11u2
Candidate: 2.2.9-2+deb11u2
Version table:
2.4.9-1~bpo11+1 100
100 http://cdn-aws.deb.debian.org/debian bullseye-backports/main amd64 Packages
*** 2.2.9-2+deb11u2 500
500 http://cdn-aws.deb.debian.org/debian bullseye/main amd64 Packages
500 http://security.debian.org/debian-security bullseye-security/main amd64 Packages
100 /var/lib/dpkg/status
3。ロードバランサーとしてのHAProxyの構成
HAProxyをロードバランサーとして構成するには、HAProxyがリッスンする必要のある接続の種類と、接続を中継する場所を指定する必要があります。これは、構成ファイル/etc/haproxy/haproxy.cfg
を作成することで実行されます。 設定を定義します。
レイヤー4での負荷分散
インストール時に、HAProxyにはロードバランサーを構成するためのテンプレートがすでに用意されています。テキストエディタを使用して設定ファイルを開きます。私はvimを使用しています:
sudo vim /etc/haproxy/haproxy.cfg
このコンテンツを追加して、トラフィックが負荷分散されるリスニングインターフェイスとバックエンドインターフェイスを構成します。
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server <server1 name> <private IP 1>:80 check
server <server2 name> <private IP 2>:80 check
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server web_server_1 10.70.5.41:80 check
server web_server_2 10.70.5.187:80 check
上記は、ポート番号80をリッスンするフロントエンド名http_frontを持つレイヤー4ロードバランサーを定義します。これにより、トラフィックはhttp_backという名前のデフォルトのバックエンドに転送されます。追加の統計URI/haproxy?stats
その指定されたアドレスで統計ページを有効にします。
レイヤー7での負荷分散
レイヤー7で動作するようにロードバランサーを構成することもできます。これは、Webアプリケーションの一部が異なるホストにある場合に役立ちます。これは、たとえばURLによって接続転送を調整することで実現できます。
テキストエディタを使用して設定ファイルを開きます。私はvimを使用しています:
sudo vim /etc/haproxy/haproxy.cfg
次に、これらの構成を追加します
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server <server name> <private IP>:80 check
server <server name> <private IP>:80 check
backend blog_back
server <server name> <private IP>:80 check
server <server name> <private IP>:80 check
フロントエンドは、/blogで始まるパスを持つすべての接続に適用されるurl_blogという名前のACLルールを宣言します。 Use_backendは、url_blog条件に一致する接続は、blog_backという名前のバックエンドによって処理され、他のすべてのリクエストはデフォルトのバックエンドによって処理されることを定義します。
バックエンド側では、構成により2つのサーバーグループが設定されます。以前と同様にhttp_backと、サーバーがexample.com/blogに接続するblog_backという新しいサーバーグループです。
設定が完了したら、ファイルを保存し、次のコマンドでHAProxyを再起動します。
sudo systemctl restart haproxy
起動時にエラーや警告が表示された場合は、構成に誤りがないか確認してから、再起動してみてください。
SSLの構成
HAProxyで使用する秘密鍵ファイルと証明書ファイルがある場合は、これらをこのコマンドと組み合わせます。
cat citizix.fullchain.pem citizix.key > citizix.pem
次に、フロントエンドでSSL証明書を使用するようにHAProxyを構成します。
frontend http_front
bind *:80
bind *:443 ssl crt /etc/letsencrypt/live/apps.citizix.com/citizix.pem
4。セットアップのテスト
HAProxyを構成して実行したら、ロードバランサーサーバーのパブリックIPをWebブラウザーで開き、バックエンドに正しく接続されていることを確認します。構成のパラメータstatsuriは、定義されたアドレスで統計ページを有効にします。
http://<Haproxy public IP>/haproxy?stats
統計ページを読み込んで、すべてのサーバーが緑色で表示されたら、構成は成功しました。
統計ページには、アップタイムとダウンタイム、セッション数など、ウェブホストを追跡するのに役立つ情報が含まれています。サーバーが赤で表示されている場合は、サーバーの電源がオンになっていて、ロードバランサーマシンからサーバーにpingできることを確認してください。
ロードバランサーが応答しない場合は、HTTP接続がファイアウォールによってブロックされていないことを確認してください。また、以下のコマンドでHAProxyが実行されていることを確認してください。
sudo systemctl status haproxy
5。 HaProxy統計ページを保護するパスワード
ただし、統計ページをフロントエンドに単純にリストすることは、誰でも閲覧できるように公開されているため、あまり良い考えではないかもしれません。代わりに、以下の例をhaproxy.cfg
の最後に追加することで、独自のポート番号に設定できます。 ファイル。ユーザー名とパスワードを安全なものに置き換えてください。
listen stats bind *:8181 stats enable stats uri / stats realm Haproxy\ Statistics stats auth username:password
新しいリッスングループを追加した後、統計URIへの古い参照をフロントエンドグループから削除します。完了したら、ファイルを保存してHAProxyを再起動します。
sudo systemctl restart haproxy
次に、新しいポート番号を使用してロードバランサーを再度開き、構成ファイルで設定したユーザー名とパスワードを使用してログインします。
http://<load balancer public IP>:8181
サーバーがまだすべて緑色で報告していることを確認してから、Webブラウザでポート番号なしでロードバランサーIPのみを開きます。
http://<load balancer public IP>/
バックエンドサーバーのランディングページが少なくともわずかに異なる場合は、ページをリロードするたびに、異なるホストから応答が返されることに気付くでしょう。
結論
それだ!このガイドでは、トラフィックを負荷分散するためにHAProxyをインストールおよび設定する方法を学習しました。これにより、Webアプリケーションのパフォーマンスと可用性が向上します。