Nginx ロードバランシング クラスタの実装

Nginx ロードバランシング クラスタの実装

(1)実験環境

youxi1 192.168.5.101 ロードバランサー

youxi2 192.168.5.102 ホスト1

youxi3 192.168.5.103 ホスト2

(2)Nginxの負荷分散戦略

Nginx ロード バランシングは、アップストリーム テンプレートで定義されたバックエンド サーバー リストからサーバーを選択して、ユーザー リクエストを受信するために使用されます。基本的なアップストリーム モジュールは次のとおりです。

アップストリーム [サーバーグループ名]{
  server [IPアドレス]:[ポート番号];
  server [IPアドレス]:[ポート番号];
  ....
}

アップストリーム モジュールを構成した後、次の形式でサーバー リストへのアクセス リバース プロキシを指定する必要があります。

場所 ~ .*$ {
  インデックス index.jsp index.html;
  proxy_pass http://[サーバーグループ名];
}

拡張機能: nginx ロケーション構成ルール: https://www.jb51.net/article/182472.htm

これにより、最も基本的な負荷分散は完了しますが、実際のニーズを満たすことはできません。現在、Nginx のアップストリーム モジュールは、ポーリング (デフォルトの方法)、重み付け (重み付け方法)、ip_hash (IP 割り当て方法に基づく)、least_conn (最小接続方法)、fair (サードパーティが提供する応答時間方法)、url_hash (サードパーティによって渡された URL 割り当て方法に基づく) の 6 つの負荷分散戦略 (アルゴリズム) をサポートしています。

1) 投票

最も基本的な構成方法は、アップストリーム モジュールのデフォルトの負荷分散戦略です。各リクエストは時系列順に異なるバックエンド サーバーに均等に分散されます。パラメータは次のとおりです。

失敗タイムアウトmax_failsと組み合わせて使用​​する
最大失敗回数fail_timeout パラメータで設定された時間内の失敗の最大数。この時間内にサーバーへのすべてのリクエストが失敗した場合、サーバーはダウンしていると見なされます。
失敗時間サーバーがダウンしていると見なされる時間の長さ。デフォルトは 10 秒です (サーバーがダウンしていると見なされる間隔)
バックアップサーバーをスタンバイ サーバーとしてマークします。プライマリサーバーが停止すると、リクエストはプライマリサーバーに送信されます
サーバーを永久にダウン状態にする

注: 1. ダウンとマークされたサーバーは自動的に削除されます。2. ポーリングがデフォルトです。3. この戦略は、ステートレスサーバー構成と短いフラットブロックを持つサービスに適しています。

2) 重量

加重方式では、ポーリング戦略に基づいてポーリングの確率を指定します。投票に基づいて重みパラメータが追加されることも考えられます。このパラメータは投票の確率を指定し、その値は数値です。アップストリーム モジュール構成テンプレートは次のとおりです。

アップストリーム [サーバーグループ名]{
  server [IPアドレス]:[ポート番号] weight=2;
  server [IPアドレス]:[ポート番号];
  ....
}

この例では、重みパラメータのないサーバーのデフォルト値は 1 です。重み値はアクセス率に比例します。すべての重み値の合計がサイクル単位となり、サーバー自身の重み値はサイクル単位内のポーリング回数となります。

注: 1. 重みが高いほど、割り当てられるリクエストの数が多くなります。2. この戦略は、least_conn 戦略および iphash 戦略と組み合わせて使用​​できます。3. この戦略は、サーバーのハードウェア構成に大きな違いがある場合に適しています。

3) ip_ハッシュ

IP 割り当て方法に応じて、ロード バランサーはクライアント IP に基づいて割り当てられるように指定されます。この方法により、同じクライアント要求が常に同じサーバーに送信され、セッションが確保されます。この方法では、各訪問者が固定のバックエンド サーバーにアクセスするため、セッションがサーバーを越えられないという問題を解決できます。アップストリーム モジュール構成テンプレートは次のとおりです。

アップストリーム [サーバーグループ名]{
  ip_ハッシュ;
  server [IPアドレス]:[ポート番号] weight=2;
  server [IPアドレス]:[ポート番号];
  ....
}

注意: 1. nginx 1.3.1 より前のバージョンでは、ip_hash の重みを使用できません。2. ip_hash はバックアップと同時に使用できません。3. この戦略は、セッションなどのステートフル サービス プログラムに適しています。4. サーバーを削除する必要がある場合は、手動でシャットダウンする必要があります。

4) 最小接続

最小接続モードでは、接続数が最も少ないバックエンド サーバーにリクエストが送信されます。ポーリングは、各バックエンドにリクエストを均等に分散し、負荷がほぼ同じになるようにします。ただし、一部のリクエストは時間がかかり、リクエストが配置されているバックエンドに大きな負荷がかかります。この場合、least_conn はより優れた負荷分散効果を実現できます。アップストリーム モジュール構成テンプレートは次のとおりです。

アップストリーム [サーバーグループ名]{
  最小接続数;
  server [IPアドレス]:[ポート番号] weight=2;
  server [IPアドレス]:[ポート番号];
  ....
}

注: この戦略は、処理時間が異なるリクエストに異なる時間がかかる、サーバーが過負荷になっている状況に適しています。

5) 公平

応答時間方式: リクエストはサーバーの応答時間に応じて割り当てられ、応答時間が短いリクエストが優先されます。アップストリーム モジュール構成テンプレートは次のとおりです。

アップストリーム [サーバーグループ名]{
  server [IPアドレス]:[ポート番号] weight=2;
  server [IPアドレス]:[ポート番号];
  ....
  公平;
}

注意: サードパーティのプラグインをインストールする必要があります。

6) url_ハッシュ

URL 分散方式は、アクセスされた URL のハッシュ結果に応じてリクエストを分散し、各 URL が同じバックエンド サーバーに送信されるようにします。キャッシュ ヒットと組み合わせて使用​​する必要があります。同じリソースに対する複数のリクエストが異なるサーバーに到着する可能性があり、その結果、不要な複数のダウンロード、低いキャッシュヒット率、およびリソース時間の浪費が発生します。 url_hash を使用すると、同じ URL (つまり、同じリソース要求) が同じサーバーに到達できます。リソースがキャッシュされると、要求を再度受信したときにキャッシュから読み取ることができます。アップストリーム モジュール構成テンプレートは次のとおりです。

アップストリーム [サーバーグループ名]{
  $request_uri をハッシュします。
  server [IPアドレス]:[ポート番号] weight=2;
  server [IPアドレス]:[ポート番号];
  ....
}

注意: 1. サードパーティのプラグインをインストールする必要があります。2. uri は小文字の L ではなく i です。

(3)実験

1) ロードバランサーyouxi1にnginxをコンパイルしてインストールする

nginxの依存関係をインストールする

[root@youxi1 ~]# yum -y インストール gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel

nginxソースパッケージnginx-1.14.1.tar.gzをアップロードし、解凍してインストールします。

[root@youxi1 ~]# tar xf nginx-1.14.1.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/nginx-1.14.1/
[root@youxi1 nginx-1.14.1]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module
[root@youxi1 nginx-1.14.1]# make && make install
[root@youxi1 nginx-1.14.1]# echo $?
0

パラメータの説明:

--with-http_dav_module は、ngx_http_dav_module サポートを有効にします (PUT、DELETE、MKCOL: コレクションの作成、COPY および MOVE メソッドを追加)。デフォルトでは無効になっており、コンパイル時に組み込む必要があります。

--with-http_stub_status_module、ngx_http_stub_status_module サポートを有効にします (前回の起動以降の nginx の動作ステータスを取得します)。

--with-http_addition_module、ngx_http_addition_module サポートを有効にします (出力フィルターとして、不完全なバッファリングと部分的な応答要求をサポートします)。

--with-http_sub_module、ngx_http_sub_module サポートを有効にします (nginx 応答内のテキストを他のテキストに置き換えることができます)。

--with-http_flv_module、ngx_http_flv_module サポートを有効にします (時間ベースのオフセット ファイルを使用してメモリへのシークを提供します)。

--with-http_mp4_module は、mp4 ファイルのサポートを有効にします (メモリ内の時間ベースのオフセットを使用してファイルへのシークを提供します)。

nginx ユーザーを生成する

[root@youxi1 nginx-1.14.1]# useradd -M -s /sbin/nologin nginx

起動して自動起動を追加する

[root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx
[root@youxi1 nginx-1.14.1]# echo /usr/local/nginx/sbin/nginx >> /etc/rc.local
[root@youxi1 nginx-1.14.1]# chmod +x /etc/rc.d/rc.local

ファイアウォールがオンになっている場合は、ポート番号を忘れずに追加してください

[root@youxi1 nginx-1.14.1]# ファイアウォール-cmd --permanent --zone=public --add-port=80/tcp && ファイアウォール-cmd --reload
成功
成功

インターフェースをチェックして、nginxが正常にインストールされているかどうかを確認します。

テストが完了したら、nginx設定ファイルを変更し、最後にnginxを再起動します。

[root@youxi1 nginx-1.14.1]# cp /usr/local/nginx/conf/nginx.conf{,.bak}
[root@youxi1 nginx-1.14.1]# vim /usr/local/nginx/conf/nginx.conf
user nginx; // 行 2 location / { // 行 43 以降 root html;
  インデックス index.html index.htm;
  $request_uri ~* \.html$ の場合{
    proxy_pass http://htmlservers;
  }
  $request_uri ~* \.php$ の場合{
    proxy_pass http://phpservers;
  }
  proxy_pass http://picservers;
}
アップストリーム htmlservers { //http モジュールの下に、server モジュールと同じレベルで server 192.168.5.102:80 を追加します。
  サーバー 192.168.5.103:80;
}
アップストリーム phpservers{
  サーバー 192.168.5.102:80;
  サーバー 192.168.5.103:80;
}
アップストリームpicservers {
  サーバー 192.168.5.102:80;
  サーバー 192.168.5.103:80;
}
[root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx -s リロード

2) youxi2とyouxi3にウェブページプログラムを展開する

[root@youxi2 ~]# yum -y httpdをインストールします
[root@youxi2 ~]# echo youxi2 > /var/www/html/index.html
[root@youxi2 ~]# echo youxi2.php > /var/www/html/index.php
[root@youxi2 ~]# echo youxi2.other > /var/www/html/index.jsp
[root@youxi2 ~]# systemctl で httpd.service を起動します
 
[root@youxi3 ~]# yum -y httpdをインストールします
[root@youxi3 ~]# echo youxi3 > /var/www/html/index.html
[root@youxi3 ~]# echo youxi3.php > /var/www/html/index.php
[root@youxi3 ~]# echo youxi3.other > /var/www/html/index.jsp
[root@youxi3 ~]# systemctl で httpd.service を起動します

ファイアウォールがオンになっている場合は、ポート番号を忘れずに追加してください。

[root@youxi2 ~]# ファイアウォール-cmd --permanent --zone=public --add-port=80/tcp && ファイアウォール-cmd --reload
成功
成功
 
[root@youxi3 ~]# ファイアウォール-cmd --permanent --zone=public --add-port=80/tcp && ファイアウォール-cmd --reload
成功
成功

3) テスト

まずHTMLページをテストする

次にPHPページをテストします

最後に他のページをテストする

参照: https://www.cnblogs.com/1214804270hacker/p/9325150.html

Nginx を使用した負荷分散クラスターの構築方法についてはこれで終わりです。Nginx 負荷分散クラスターの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Springboot+nginx+https+linux で負荷分散とドメイン名アクセスの簡単なテストを実現
  • Windows で負荷分散に Nginx+Tomcat を使用するための完全な手順
  • Nginx リバース プロキシと負荷分散を実装する方法 (Linux ベース)
  • Nginx の負荷分散構成、ダウンタイム発生時の自動切り替えモード
  • Keepalived は Nginx の負荷分散と高可用性のサンプル コードを実装します
  • WebApi を使用して複数のサーバーを展開し、Nginx ロード バランシングを構成するチュートリアル
  • 中国語でのNginx設定パラメータの詳細な説明(負荷分散とリバースプロキシ)
  • Nginx フォワード プロキシとリバース プロキシ、および負荷分散機能の構成コード例
  • Nginx 7層負荷分散のいくつかのスケジューリングアルゴリズムの簡単な理解
  • Nginx+SpringBoot による負荷分散の実装例

<<:  Vueはログイン認証コードを実装する

>>:  MySQLクエリステートメントの簡単な操作例

推薦する

MySQLデータベースが大きすぎる場合にバックアップと復元を行う方法

コマンド: mysqlhotcopyこのコマンドは、ファイルをコピーする前にテーブルをロックし、不完...

Alibaba Cloud Serverにプログラムをデプロイし、ドメイン名を使用して直接アクセスする方法の詳細な説明

何もすることがなかったので、学習用に最も安いAlibaba Cloudサーバーを購入しました。年間3...

フォームの「Enter」、「Submit」、「Enter != Submit」を削除する方法

「Enter != Submit」問題を実装するには、通常、「ボタンの種類」と「入力ボックスの数」か...

MySQLの詳細な説明Explain

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

MySQL 8の新機能ROLEの詳しい説明

MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...

MySQL5.7.21 解凍版インストール詳細チュートリアル図

私は頻繁にシステムをインストールするので、インストールのたびにいくつかのソフトウェアを再インストール...

MySQL インデックスの原理と使用例の分析

この記事では、例を使用して MySQL インデックスの原理と使用方法を説明します。ご参考までに、詳細...

vue router-view のネストされた表示実装

目次1. ルーティング構成2. Vueページのネスト3. ネストされた関係1. ルーティング構成 定...

docker と docker-compose による eureka の高可用性の実現の詳細な説明

最近、新しいプロジェクトでは springcloud と docker が使用されています。この 2...

Linuxネットワーク設定の基本操作コマンドを詳しく解説

目次ネットワーク構成を表示するネットワークインターフェース情報を表示する---ifconfigルーテ...

vue プロジェクトのデプロイと Nginx でのプロキシ設定の問題の分析

1. nginxをインストールして起動する # nginxをインストールする sudo apt-ge...

純粋な HTML+CSS でオリンピック リングを実装するためのサンプル コード

レンダリング コード - 青と黄色のリングを例に挙げます <div class="コ...

vscode を使用したリモート Linux 開発の実装

過去に別れを告げるvscode にリモート SSH が導入される前は、Linux サーバー開発者の多...

mysql 解凍パッケージの基本インストールチュートリアル

新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...

JSは5つ星の賞賛効果を達成

JS を使用してオブジェクト指向メソッドを実装し、JD.com の 5 つ星レビュー効果を実現します...