Linux
 Computer >> コンピューター >  >> システム >> Linux

HAProxyでNginxのロードバランサーを構築する方法【CentOS対応】

本記事では、2台のNginx Webサーバー(Apacheに置き換えることも可能)に対して、HAProxyをロードバランサーとして構成する方法を解説します。すべての例では、ホストOSとしてCentOSを使用しています。

HAProxyは、複数のバックエンドサーバー間で受信リクエストを分散させることで、TCPおよびHTTPアプリケーションに高可用性とロードバランシングを提供するサーバーソフトウェアです。HAProxyは、Twitter、Instagram、GitHub、Amazonなど、数多くの有名サービスで採用されている実績ある技術です。

HAProxyは、クライアントからのリクエストを受け付け、それらをNginx Webサーバーへ転送する専用サーバーにインストールします。システム全体の構成は以下の図のとおりです。

HAProxyでNginxのロードバランサーを構築する方法【CentOS対応】

バックエンドサーバーの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でNginxのロードバランサーを構築する方法【CentOS対応】

次に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でNginxのロードバランサーを構築する方法【CentOS対応】

ご覧のとおり、両方のサーバーが交互にコンテンツを返しているため、ロードバランサーが正常に機能していることがわかります。

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

HAProxyでNginxのロードバランサーを構築する方法【CentOS対応】 ブラウザでロードバランサーのIPアドレスを開き、F5キーを連続で押してみてください。HAProxyの統計情報が変化していくのが確認できます。

本記事では、HAProxyの基本的な設定方法について解説しました。HAProxyモジュールには、ここで紹介した以外にもさまざまな活用方法があります。

なお、今回の構成では、ロードバランシングを担当するHAProxyサーバーが単一障害点(SPOF)となってしまう点に注意が必要です。Webサービスの耐障害性を高めたい場合は、HAProxyサーバーをもう1台追加し、Keepalivedを組み合わせて高可用性ロードバランサー構成を実装するのがおすすめです。その場合の構成は以下のようになります。

HAProxyでNginxのロードバランサーを構築する方法【CentOS対応】

  1. 初心者必見!MacBook Proを使いこなすための10の便利ワザ

    MacBook Proは非常にパワフルなノートパソコンで、使いこなせば作業効率を何倍にも高めることができます。しかし、特にWindows環境に慣れている方にとっては、少しとっつきにくい部分もあるかもしれません。この記事では、洗練されたアルミニウムボディの最新マシンに早く慣れるための、実用的な10のコツをご紹介します。 注意:本記事はmacOS High Sierraが動作する2018年モデルを使用して執筆しています。古いMacBook Proモデルや旧バージョンのmacOSをお使いの場合は、一部の機能が利用できない場合がありますのでご了承ください。 また、YouTubeチャンネルでは本記事の

  2. Windows 10で使えるMagicDisc代替ソフトおすすめ10選(2021年版)

    かつて多くのユーザーに愛用されてきたディスクイメージツール「MagicDisc(MagicISO)」は、開発・更新が終了してしまいました。CDやDVDに書き込まずにイメージファイルを手軽に扱いたいユーザーの間では、代替ソフトを探す動きが広がっています。本記事では、Windows 10で使えるMagicDiscの代替ソフトとして厳選した10本をご紹介します。 Windowsユーザー向けMagicDisc代替ソフト ベスト10(2021年版) MagicDiscは、ハードディスクやCDからISOファイルを作成できる便利なツールでしたが、更新が止まって以降は利用しづらくなっています。ここでは、BIN