HAProxyでNginxのロードバランサーを構築する方法【CentOS対応】
本記事では、2台のNginx Webサーバー(Apacheに置き換えることも可能)に対して、HAProxyをロードバランサーとして構成する方法を解説します。すべての例では、ホストOSとしてCentOSを使用しています。
HAProxyは、複数のバックエンドサーバー間で受信リクエストを分散させることで、TCPおよびHTTPアプリケーションに高可用性とロードバランシングを提供するサーバーソフトウェアです。HAProxyは、Twitter、Instagram、GitHub、Amazonなど、数多くの有名サービスで採用されている実績ある技術です。
HAProxyは、クライアントからのリクエストを受け付け、それらをNginx Webサーバーへ転送する専用サーバーにインストールします。システム全体の構成は以下の図のとおりです。

バックエンドサーバーのNginx設定
まず、ロードバランシングの対象となるWebサーバーにNginxをインストールし、設定を行います。EPELリポジトリとnginxをyumでインストールします(RHEL/CentOS 8ではdnfを使用してください)。
#yum install epel-release -y
#yum install nginx -y
次に、nginx.confファイルを編集し、HAProxyサーバーとバックエンドサーバーのみがリクエストを処理できるよう設定します。
バックエンドサーバー1:
server {
listen current_server_IP_address:80 default_server;
allow second_backend_server_IP_address;
allow IP_haproxy;
deny all;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}バックエンドサーバー2:
server {
listen current_server_IP_address:80 default_server;
allow first_backend_server_IP_address;
allow IP_haproxy;
deny all;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}Nginxの設定ファイルは基本的にデフォルトのままで、listenディレクティブでIPアドレスを指定し、allowおよびdenyディレクティブを使って、自サーバー以外からのアクセスを拒否しただけです。
Webサーバーを動作させるには、firewalldまたはiptablesでHTTPポートを開放する必要があります。
#firewall-cmd --permanent –add-service=http
#firewall-cmd –reload
いずれかのバックエンドサーバーでテストを実行してみましょう。
# curl IP_of_the_second_server
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "https://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> HTMLファイルが返されます
サーバーからは標準のNginxインデックスファイルが返されました。動作確認をしやすくするため、各バックエンドサーバーのインデックスファイルの内容を変更しておくと、ブラウザでどちらのサーバーがリクエストを処理したのかを簡単に判別できます。
Nginxのインデックスファイルは/usr/share/nginx/html/に配置されています。
HAProxyロードバランサーの設定
続いて、ロードバランサーとして使用するサーバーにHAProxyをインストールし、設定を行います。
HAProxyのインストール:
#yum install epel-release -y
#yum install haproxy -y
Running transaction Installing : haproxy-1.5.18-9.el7.x86_64 1/1 Verifying : haproxy-1.5.18-9.el7.x86_64 1/1 Installed: haproxy.x86_64 0:1.5.18-9.el7 Complete!
HAProxyを有効にするには、/etc/default/haproxyファイルにEnabled=1を追加します。
#nano /etc/default/haproxy

次にHAProxyの本体設定に移ります。この最もシンプルな構成では、ロードバランサーサーバーがすべてのHTTPリクエストを処理し、順番にバックエンドサーバーへ振り分けます。
#nano /etc/haproxy/haproxy.cfg
log /dev/log local0
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode http
log global
option httplog
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend www
bind balancer_IP_address:80
default_backend nginx_pool
backend nginx_pool
balance roundrobin
mode http
server web1 IP_of_the_first_backend_server:80 check
server web2 IP_of_the_second_backend_server:80 check設定を保存したら、haproxy.cfgの構文をチェックします。
#haproxy -f /etc/haproxy/haproxy.cfg -c
問題がなければ、次のようなメッセージが表示されます。
Configuration file is valid
その後、HAProxyを再起動し、Linux起動時の自動起動を有効にします。さらに、ファイアウォールでHTTPポートを開放してください。
#systemctl restart haproxy
#systemctl enable haproxy
#firewall-cmd —permanent –add-service=http
#firewall-cmd –reload
これでロードバランサーの設定は完了です。ブラウザでHAProxyサーバーのIPアドレスを開いて、動作を確認してみましょう。

ご覧のとおり、両方のサーバーが交互にコンテンツを返しているため、ロードバランサーが正常に機能していることがわかります。
haproxy.cfg設定ファイルの主なパラメータ
HAProxyで利用できる主なロードバランシングアルゴリズムを見ていきましょう。
roundrobin— デフォルトのアルゴリズムで、リクエストを各サーバーへ順番に振り分けます。本記事の例でもこの方式を採用しています。leastconn— アクティブな接続数が最も少ないサーバーを選択します。セッションが長時間維持されるプロジェクトに推奨される方式です。source— ユーザーのIPアドレスのハッシュに基づいてサーバーを選択します。このモードでは、ユーザーのIPアドレスが変わらない限り、常に同じWebサーバーに接続されます。
次に、設定ファイルの主なパラメータを解説します。
globalブロック:
log— /dev/logにログを書き込み、local0をオブジェクト値として保存しますchroot— セキュリティ設定。HAProxyを指定されたディレクトリ内に閉じ込めますmaxconn— プロセスあたりの最大同時接続数daemon— プロセスをデーモンとして実行します
defaultsブロックは、それに続くすべてのセクションに適用されるデフォルトパラメータを設定します。
log— ログの書き込み先を指定します(この場合のglobalは、globalセクションで設定されたパラメータを使用することを意味します)mode— 通信プロトコルを設定します。tcp、http、healthのいずれかの値を取りますretries— 接続に失敗した場合のサーバーへの再接続試行回数option httplog— HAProxyがHTTPリクエストをプロキシする際に使用されるログ形式option redispatch— サーバー障害発生時に、セッションを切断して別サーバーへ再割り当てすることを許可しますcontimeout— サーバーとの接続が確立されるまでの最大待機時間
このほかにも、さまざまなタイムアウトに関するパラメータが多数用意されています。
HAProxy統計情報の収集
設定ファイルにstatsブロックを追加すると、統計情報を確認できるようになります。
listen stats
bind :10001
stats enable
stats uri /haproxy_stats
stats auth admin:admin各パラメータの説明:
bind— 統計情報を表示するためのポートstats enable— 統計レポート機能を有効化しますstats uri— 統計ページのURLを設定しますstats auth— アクセス用のログイン名とパスワード
指定したポートが使用中の場合や都合が悪い場合は、任意のTCPポートを指定できます。
ファイアウォールで、上記ポートへの着信接続を許可します。
firewall-cmd --permanent –add-port=10001/tcp
firewall-cmd –reload
HAProxyのレポートを表示するには、次のURLにアクセスします。
https://hostname_haproxy:10001/haproxy_stats
ブラウザでロードバランサーのIPアドレスを開き、F5キーを連続で押してみてください。HAProxyの統計情報が変化していくのが確認できます。
本記事では、HAProxyの基本的な設定方法について解説しました。HAProxyモジュールには、ここで紹介した以外にもさまざまな活用方法があります。
なお、今回の構成では、ロードバランシングを担当するHAProxyサーバーが単一障害点(SPOF)となってしまう点に注意が必要です。Webサービスの耐障害性を高めたい場合は、HAProxyサーバーをもう1台追加し、Keepalivedを組み合わせて高可用性ロードバランサー構成を実装するのがおすすめです。その場合の構成は以下のようになります。

-
初心者必見!MacBook Proを使いこなすための10の便利ワザ
MacBook Proは非常にパワフルなノートパソコンで、使いこなせば作業効率を何倍にも高めることができます。しかし、特にWindows環境に慣れている方にとっては、少しとっつきにくい部分もあるかもしれません。この記事では、洗練されたアルミニウムボディの最新マシンに早く慣れるための、実用的な10のコツをご紹介します。 注意:本記事はmacOS High Sierraが動作する2018年モデルを使用して執筆しています。古いMacBook Proモデルや旧バージョンのmacOSをお使いの場合は、一部の機能が利用できない場合がありますのでご了承ください。 また、YouTubeチャンネルでは本記事の
-
Windows 10で使えるMagicDisc代替ソフトおすすめ10選(2021年版)
かつて多くのユーザーに愛用されてきたディスクイメージツール「MagicDisc(MagicISO)」は、開発・更新が終了してしまいました。CDやDVDに書き込まずにイメージファイルを手軽に扱いたいユーザーの間では、代替ソフトを探す動きが広がっています。本記事では、Windows 10で使えるMagicDiscの代替ソフトとして厳選した10本をご紹介します。 Windowsユーザー向けMagicDisc代替ソフト ベスト10(2021年版) MagicDiscは、ハードディスクやCDからISOファイルを作成できる便利なツールでしたが、更新が止まって以降は利用しづらくなっています。ここでは、BIN