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 の自動増分 ID に関するいくつかの小さな問題の要約

以下の質問はすべて InnoDB ストレージ エンジンに基づいています。 1. 最も大きな ID を...

Windows サーバー管理におけるセキュリティの考慮事項

ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...

Nodejs のグローバル変数とグローバルオブジェクトの知識ポイントと使用方法の詳細

1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...

Vueカスケードドロップダウンボックスの設計と実装

目次1. データベース設計2. フロントエンドページ3. 完全なデモフロントエンド開発では、カスケー...

Vueライフサイクルの違いの詳細な説明

ライフサイクル分類vue の各コンポーネントは独立しており、各コンポーネントには独自のライフサイクル...

CentOS システムでの JDK のインストールと設定の概要

目次序文OpenJDKの確認とアンインストールダウンロードした圧縮パッケージを使用してJDKをインス...

MySQL インデックス データ構造の詳細な分析

目次概要インデックスデータ構造バイナリツリー赤黒木BツリーB+ツリーハッシュ索引InnoDB インデ...

Alibaba Cloud ServerにMySQLデータベースをインストールする方法の詳細な説明

序文学習中に Zookeeper をインストールする必要があったため、仮想マシンに常に問題が発生した...

AngularJSループオブジェクトプロパティで動的列を実装するアイデアの詳細な説明

動的な列を実現するための Angularjs ループ オブジェクト プロパティ利点: オブジェクトを...

::before/:before と ::after/:after の使用に関する深い理解

パート1: 基礎1. :active や :hover などの疑似クラスとは異なり、これらはすべて疑...

最新の人気スクリプトAutojsソースコード共有

今日は、最新の人気スクリプト 50 個を含むソース コードを共有します。現在、Mine Guard ...

MySQL 5.7.21 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.21のインストールに関する注意事項をまとめ、皆さんと共有します。 ...

nginxワーカープロセスループの実装

ワーカープロセスは、起動されると、まず自身の動作に必要な環境を初期化し、次に実行する必要があるイベン...

CSSでフォントアイコンを使用する方法をお教えします

まず、フォントアイコンとは何でしょうか?表面的にはアイコンですが、実際はテキストです。テキストの設定...

JavaScript - Vue でのスロットの使用: スロット

目次Vue でのスロットの使用: slotスコープ付きスロット: テンプレートタグで囲む要約するVu...