LinuxでHTTPロードバランサーとしてNginxを使用する方法

複数のアプリケーションサーバーを冗長性のために設定する場合、負荷分散は、受信サービスリクエストやネットワークトラフィックを効率的にバックエンドサーバーのグループ全体に分散するために一般的に使用されるメカニズムです。

負荷分散には、冗長性によるアプリケーションの可用性の向上、信頼性と拡張性の向上(トラフィックが増加するときにはより多くのサーバーを追加できます)など、いくつかの利点があります。また、改善されたアプリケーションパフォーマンスやその他多くの利点ももたらします。

おすすめの読み物Nginx Webサーバーのセキュリティ強化とパフォーマンス向上の究極のガイド

Nginxは、受信ネットワークトラフィックとワークロードをアプリケーションサーバーのグループ全体に分散し、選択されたサーバーから適切なクライアントに応答を返す効率的なHTTP負荷分散装置として展開することができます。

Nginxでサポートされている負荷分散メソッドは次のとおりです:

  • ラウンドロビン – リクエストをアプリケーションサーバーにラウンドロビン方式で分配します。メソッドが指定されていない場合、デフォルトで使用されます。
  • 最も接続数の少ないサーバー – 次のリクエストをより忙しいサーバー(アクティブな接続数が最も少ないサーバー)に割り当てます。
  • ip-hash – ハッシュ関数を使用して、次のリクエストに対してどのサーバーを選択するかをクライアントのIPアドレスに基づいて決定します。この方法では、セッションの永続性(クライアントを特定のアプリケーションサーバーに紐づける)が可能です。

さらに、より高度なレベルでNginxロードバランシングアルゴリズムを影響するためにサーバーウェイトを使用することもできます。 Nginxは、健全性チェックもサポートしており、応答がエラーで失敗した場合にサーバーを失敗したとマークし、その後の一定の時間(デフォルトは10秒)の間、そのサーバーを選択しないようにします。

この実践的なガイドでは、NginxHTTPロードバランサーとして使用して、同じアプリケーションのインスタンスを持つ2つのサーバー間の着信クライアントリクエストを分散させる方法を示しています。

テスト目的のために、各アプリケーションインスタンスは(ユーザーインターフェース上で)それが実行されているサーバーを示すようにラベル付けされています。

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

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

各アプリケーションサーバーでは、各アプリケーションインスタンスがドメインtecmintapp.lanを使用してアクセスできるように構成されています。これが完全に登録されたドメインであると仮定すると、DNS設定に次のものを追加します。

A Record   		@   		192.168.58.7

このレコードは、クライアントリクエストがドメインをどこに向けるかを示し、この場合はロードバランサー192.168.58.7)に向けます。 DNSAレコードはIPv4値のみを受け入れます。代替として、テスト目的でクライアントマシンの/etc/hostsファイルも使用でき、次のエントリを使用します。

192.168.58.7  	tecmintapp.lan

LinuxでのNginxロードバランシングの設定

Nginxのロードバランシングを設定する前に、ディストリビューションのデフォルトパッケージマネージャーを使用してサーバーにNginxをインストールする必要があります。

$ sudo apt install nginx   [On Debian/Ubuntu]
$ sudo yum install nginx   [On CentOS/RHEL]   

次に、/etc/nginx/conf.d/loadbalancer.confという名前のサーバーブロックファイルを作成します(お好きな名前を付けてください)。

$ sudo vi /etc/nginx/conf.d/loadbalancer.conf

その後、以下の構成をコピーして貼り付けます。この構成は、ロードバランシング方法が定義されていないため、ラウンドロビンがデフォルトです。

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

上記の構成では、リクエストをHTTPプロキシサーバーに渡すためにproxy_passディレクティブ(この場合はlocation内に指定する必要があります、/)が使用され、upstreamディレクティブ(サーバーグループを定義するために使用される)で参照されるバックエンドとして言及されます。また、リクエストはウェイト付きラウンドロビンバランシングメカニズムを使用してサーバー間で分散されます。

最少接続メカニズムを使用するには、次の構成を使用してください。

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

そして、ip_hashセッション永続性メカニズムを有効にするには、次のようにしてください:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

また、サーバーウェイトを使用してロードバランシングの決定に影響を与えることもできます。次の構成を使用すると、クライアントからの6つのリクエストがある場合、アプリケーションサーバー192.168.58.5には4つのリクエストが割り当てられ、2つは192.168.58.8に移動します。

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

ファイルを保存して終了します。その後、最近の変更を追加した後にNginx構成構造が正しいことを確認するために、次のコマンドを実行してください。

$ sudo nginx -t

構成が正常であれば、変更を適用するためにNginxサービスを再起動して有効にしてください。

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

LinuxでNginxロードバランシングをテスト

Nginxの負荷分散をテストするには、ウェブブラウザを開いて次のアドレスに移動してください。

http://tecmintapp.lan

ウェブサイトのインターフェースが読み込まれたら、読み込まれたアプリケーションインスタンスに注意してください。その後、ページを継続的にリフレッシュしてください。ある時点で、アプリは負荷分散を示すために2番目のサーバーから読み込まれるはずです。

Check Nginx Load Balancing in Linux

あなたはLinuxでHTTP負荷分散器としてNginxを設定する方法を学びました。このガイドについて、特にNginxを負荷分散器として使用することについてのご意見を、以下のフィードバックフォームからお知らせください。詳細については、NginxをHTTP負荷分散器として使用するに関するNginxのドキュメントをご覧ください。

Source:
https://www.tecmint.com/use-nginx-as-http-load-balancer-in-linux/