複数サーバーの負荷分散を実現するためのNginx構成

複数サーバーの負荷分散を実現するためのNginx構成

Nginx ロード バランシング サーバー: IP: 192.168.0.4 (Nginx-Server)

Web サーバー リスト:

Web1: 192.168.0.5 (Nginx-Node1/Nginx-Web1)

Web2:192.168.0.7 (Nginx-Node2/Nginx-Web2)

目的: ユーザーが Nginx サーバーにアクセスすると、Nginx を介して Web1 サーバーと Web2 サーバーに負荷分散されます。

Nginx ロードバランシングサーバー nginx.conf

構成コメントは次のとおりです。

イベント
{
epoll を使用します。
ワーカー接続 65535;
}
http
{
##アップストリーム負荷分散、4 つのスケジューリング アルゴリズム##
#スケジューリング アルゴリズム 1: ポーリング。各リクエストは、時系列順に 1 つずつ異なるバックエンド サーバーに割り当てられます。
#バックエンドサーバーがダウンした場合、障害のあるシステムは自動的に削除され、ユーザーアクセスに影響が及ばなくなります
アップストリームウェブホスト {
サーバー 192.168.0.5:6666 ;
サーバー 192.168.0.7:6666 ;
}
#スケジューリング アルゴリズム 2: 重み。マシン構成に基づいて重みを定義できます。重みが高いほど、割り当てられる可能性が高くなります。
アップストリームウェブホスト {
サーバー 192.168.0.5:6666 重み=2;
サーバー 192.168.0.7:6666 重み=3;
}
#スケジューリング アルゴリズム 3: ip_hash。各リクエストはアクセス IP のハッシュ結果に従って割り当てられるため、同じ IP アドレスからの訪問者は固定のバックエンド サーバーにアクセスします。
#動的ウェブページのセッション共有問題を効果的に解決します
アップストリームウェブホスト {
ip_ハッシュ;
サーバー 192.168.0.5:6666 ;
サーバー 192.168.0.7:6666 ;
}
#スケジューリングアルゴリズム 4: url_hash (サードパーティのプラグインをインストールする必要があります)。このメソッドは、アクセス URL のハッシュ結果に従ってリクエストを割り当てます。
#各 URL を同じバックエンド サーバーに誘導すると、バックエンド キャッシュ サーバーの効率がさらに向上します。
#Nginx自体はurl_hashをサポートしていません。このスケジューリングアルゴリズムを使用する必要がある場合は、Nginxハッシュパッケージをインストールする必要があります。
アップストリームウェブホスト {
サーバー 192.168.0.5:6666 ;
サーバー 192.168.0.7:6666 ;
$request_uri をハッシュします。
}
#スケジューリング アルゴリズム 5: 公平 (サードパーティのプラグインをインストールする必要があります)。これは、上記の 2 つよりもスマートな負荷分散アルゴリズムです。
#このアルゴリズムは、ページ サイズと読み込み時間に基づいて負荷をインテリジェントに分散します。つまり、バックエンド サーバーの応答時間に基づいてリクエストを分散します。
# 応答時間が短いことを優先します。Nginx 自体はフェアをサポートしていません。このスケジューリングアルゴリズムを使用する必要がある場合は、Nginx のupstream_fair モジュールをダウンロードする必要があります。

#仮想ホストの設定(スケジューリングアルゴリズム3: ip_hashを使用)
サーバ
{
聞く 80;
サーバー名 mongo.demo.com;
# 「/」のリバースプロキシを有効にする
位置 / {
proxy_pass http://webhost;
proxy_redirect オフ;
proxy_set_header X-Real-IP $remote_addr;
#バックエンドWebサーバーはX-Forwarded-Forを通じてユーザーの実際のIPを取得できる
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下はオプションのリバース プロキシ構成です。
proxy_set_header ホスト $host;
client_max_body_size 10m; #クライアントが要求できる単一ファイルの最大バイト数
client_body_buffer_size 128k; #バッファプロキシがクライアントのリクエストをバッファリングする最大バイト数。
proxy_connect_timeout 90; #バックエンドサーバーとのNginx接続タイムアウト(プロキシ接続タイムアウト)
proxy_send_timeout 90; #バックエンドサーバーのデータ返信時間(プロキシ送信タイムアウト)
proxy_read_timeout 90; #接続が成功した後のバックエンドサーバーの応答時間(プロキシ受信タイムアウト)
proxy_buffer_size 4k; #ユーザーヘッダー情報を保存するためのプロキシサーバー(nginx)のバッファサイズを設定します
proxy_buffers 4 32k; #proxy_buffers バッファ、平均ウェブページサイズは 32k 未満に設定されます
proxy_busy_buffers_size 64k; #高負荷時のバッファサイズ (proxy_buffers*2)
proxy_temp_file_write_size 64k;
#キャッシュフォルダのサイズを設定します。この値より大きい場合は、上流サーバーから転送されます。
}
}
}
192.168.0.4 (Nginx サーバー) を構成する

設定ファイルを保存するフォルダを作成する

$ mkdir -p /opt/confs
$ vim /opt/confs/nginx.conf
イベント
{
epoll を使用します。
ワーカー接続 65535;
}
http
{
アップストリームウェブホスト {
ip_ハッシュ;
サーバー 192.168.0.5:6666 ;
サーバー 192.168.0.7:6666 ;
}
サーバ
{
聞く 80;
サーバー名 mongo.demo.com;
位置 / {
proxy_pass http://webhost;
proxy_redirect オフ;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header ホスト $host;
クライアントの最大ボディサイズは10mです。
クライアントボディバッファサイズ 128k;
プロキシ接続タイムアウト 90;
プロキシ送信タイムアウト 90;
プロキシ読み取りタイムアウト 90;
プロキシバッファサイズ 4k;
プロキシバッファ 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
}
負荷分散サーバー 192.168.0.4 (Nginx-Server) を起動します。

192.168.0.5 (Nginx-Node1/Nginx-Web1) を構成する

Webページを保存するフォルダを作成する

$ mkdir -p /opt/html
$ vim /opt/html/index.html
編集された内容は次のとおりです。

ホストは192.168.0.5 - ノード1です

192.168.0.5 (Nginx-Node1/Nginx-Web1) を起動します。

192.168.0.7 (Nginx-Node2/Nginx-Web2) を構成する

Webページを保存するフォルダを作成する

$ mkdir -p /opt/html
$ vim /opt/html/index.html
編集された内容は次のとおりです。

ホストは192.168.0.7 - ノード2

192.168.0.7 (Nginx-Node2/Nginx-Web2) を起動します

複数サーバーの負荷分散を実現するための Nginx 構成に関するこの記事はこれで終わりです。より関連性の高い Nginx 構成負荷分散コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx の負荷分散と動的および静的分離の原理と構成
  • Nginx レイヤー 4 負荷分散構成ガイド
  • Nginx ロードバランシングの設定方法
  • 負荷分散と動的・静的分離を実現するNginx+Tomcatの原理の分析
  • Nginx ロードバランシングとは何か、そしてそれをどのように設定するか
  • Nginx+tomcat ロードバランシングクラスタの実装方法
  • 負荷分散と動的および静的分離操作を実現するDocker NginxコンテナとTomcatコンテナ
  • Nginx + consul + upsync を使用して動的負荷分散を実現する方法の詳細な説明

<<:  枠線や境界線のない iframe を使用するための完全ガイド (実践経験のまとめ)

>>:  MySQLでホワイトリストアクセスを設定する方法

推薦する

JavaScript インタビュー: 配列の平坦化メソッドを実装する方法

目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...

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

この記事では、MacOSでのMySQL 8.0.18のインストールと成功したコマンドライン操作を記録...

携帯電話番号が合法かどうかを判断するWeChatアプレットのサンプルコード

目次シナリオ効果コード要約するシナリオ登録ページに携帯電話番号を入力し、登録インターフェイスを要求す...

MySQL クエリ キャッシュとバッファ プール

1. キャッシュ - クエリキャッシュ次の図は、MySQL 公式サイトから提供されています: MyS...

床スクロール効果を実現する js

この記事ではjQueryを使用して、階段のスライド効果を実装し、フロアをスクロールし、フロアボタンを...

CSSは親要素の下の最初の子要素を選択します(:first-child)

序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...

MySQL で最大接続数を正しく変更する 3 つの方法

MySQL データベースをインストールすると、デフォルトの MySQL データベースの最大接続数が ...

ドラッグ効果を実現するための純粋なCSSコード

目次1. ドラッグ効果の例2. CSS実装の原則3. CSS実装の詳細4. CSSレイアウト1. 固...

MySQL のマスタースレーブレプリケーションと読み取り書き込み分離の原理と使用法の詳細な説明

この記事では、例を使用して、MySQL マスター/スレーブ レプリケーションと読み取り/書き込み分離...

ウェブサイトに最も必要なのは、ターゲットユーザーグループのエクスペリエンスを向上させることです。

「大河は東に流れ、波は歴代の英雄たちを洗い流した。古城の西側は三国時代の周朗の赤壁だと言われている...

JavaScript関数の詳細な紹介

任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...

jsネイティブウォーターフォールフロープラグイン制作

この記事では、jsネイティブウォーターフォールフロープラグインの具体的なコードを参考までに共有します...

Docker で SVN サーバーを構築するチュートリアル

SVN は Subversion の略称で、ブランチ管理システムを使用して効率的に管理するオープンソ...

CSS3はNESゲームコンソールのサンプルコードを実装します

成果を達成する実装コードhtml <input type="radio" ...