Nginx レイヤー 4 負荷分散構成ガイド

Nginx レイヤー 4 負荷分散構成ガイド

1. レイヤー4負荷分散の概要

レイヤー 4 ロード バランシングとは何ですか?

いわゆる 4 層負荷分散では、主にメッセージ内のターゲット アドレスとポート、および負荷分散デバイスによって設定されたサーバー選択方法に基づいて、最終的に選択される内部サーバーを決定します。

一般的な TCP を例にとると、ロード バランシング デバイスはクライアントから最初の SYN 要求を受信すると、最適なサーバーを選択し、メッセージ内のターゲット IP アドレスを (バックエンド サーバーの IP に) 変更して、サーバーに直接転送します。 TCP 接続の確立、つまり 3 ウェイ ハンドシェイクはクライアントとサーバーの間で直接確立され、負荷分散デバイスはルーターと同様の転送の役割のみを果たします。一部の展開シナリオでは、サーバーの応答パケットがロード バランシング デバイスに正しく返されることを保証するために、メッセージの転送中にメッセージの元の送信元アドレスが変更されることがあります。

アプリケーションシナリオ

1. 負荷分散のためのレイヤー 4 + レイヤー 7。レイヤー 4 はレイヤー 7 負荷分散の高可用性を確保できます。

2. 負荷分散はポート転送を行うことができる

3. データベースの読み取りと書き込みの分離

レイヤー4負荷分散の機能

1. レイヤー 4 ロード バランシングは TCP/IP プロトコルと UDP プロトコルのみを転送でき、通常は tcp/22 や udp/53 などのポートを転送するために使用されます。

2. レイヤー 4 負荷分散は、レイヤー 7 負荷分散のポート制限問題を解決するために使用できます (レイヤー 7 負荷分散では最大 65535 個のポート番号を使用できます)。

3. レイヤー 4 負荷分散はレイヤー 7 負荷分散の高可用性の問題を解決できます (複数のバックエンド レイヤー 7 負荷分散を同時に使用できます)

4. レイヤー 4 の転送効率はレイヤー 7 よりもはるかに高いですが、TCP/IP プロトコルのみがサポートされ、HTTP および HTTPS プロトコルはサポートされません。

5. 通常、大規模な同時実行シナリオでは、7 層の負荷の前に 4 層の負荷分散を追加することが選択されます。

2.4 層負荷分散環境の構築

環境の準備

ホストIP身元
ポンド4 172.16.1.6, 10.0.0.6レイヤー4負荷分散
lb01 172.16.1.4, 10.0.0.4レイヤー7負荷分散
lb02 172.16.1.5, 10.0.0.5レイヤー7負荷分散

lb4とlb02でNginxをビルドする

# yum ソース [nginx-stable] を設定する
name=nginx 安定リポジトリ
ベースURL=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
有効=1
gpgkey=https://nginx.org/keys/nginx_signing.key
モジュール_hotfixes=true

# Nginx をインストールする
[root@lb02 ~]# yum install nginx -y
[root@lb4 ~]# yum install nginx -y

# ユーザーを作成 [root@lb02 ~]# groupadd www -g 666 && useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@lb4 ~]# groupadd www -g 666 && useradd www -u 666 -g 666 -s /sbin/nologin -M

# nginx を設定する
[root@lb02 ~]# vim /etc/nginx/nginx.conf 
ユーザー www;
[root@lb4 ~]# vim /etc/nginx/nginx.conf 
ユーザー www;

# Nginxを起動する
[root@lb4 ~]# systemctl start nginx && systemctl enable nginx && systemctl status nginx
[root@lb02 ~]# systemctl start nginx && systemctl enable nginx && systemctl status nginx

lb01 構成を lb02 に同期する

[root@lb01 ~]# scp /etc/nginx/conf.d/* 172.16.1.5:/etc/nginx/conf.d/
[root@lb01 ~]# scp /etc/nginx/proxy_params 172.16.1.5:/etc/nginx/

lb02 負荷分散をテストする

[root@lb02 ~]# nginx -t && systemctl nginxを再起動します

#ホストテスト 10.0.0.5 linux.wp.com を構成する

3. レイヤー4の負荷分散を構成する

レイヤー4の負荷分散構文

構文: stream { ... }
デフォルト: -
コンテキスト: メイン

#例: 4 層の負荷分散ストリーム モジュールは http モジュールと同じレベルにあり、http では構成できません。stream {
    アップストリームバックエンド{
        サーバー backend1.example.com:12345 重み=5;
        サーバー 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
    }

    サーバー{
        聞く 12345;
        proxy_connect_timeout 1秒;
        proxy_timeout 3秒;
        proxy_pass バックエンド;
    }
}

nginxのメイン設定ファイルを設定する

[root@lb4 ~]# vim /etc/nginx/nginx.conf
#http 層のすべてのコンテンツをコメント化します。user www;
ワーカープロセス 1;
error_log /var/log/nginx/error.log 警告;
pid /var/run/nginx.pid;
イベント {
    ワーカー接続 1024;
}
#インクルードファイルを追加します include /etc/nginx/conf.c/*.conf;
#http {
# /etc/nginx/mime.types を含めます。
# デフォルトタイプ application/octet-stream;
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# access_log /var/log/nginx/access.log メイン;
# ファイル送信オン;
# #tcp_nopush オン;
# キープアライブタイムアウト 65;
# #gzip オン;
# /etc/nginx/conf.d/*.conf を含めます。
#}

レイヤー4負荷分散の設定

#ディレクトリを作成 [root@lb4 ~]# mkdir /etc/nginx/conf.c

# [root@lb4 ~] を設定# vim /etc/nginx/conf.c/linux.lb4.com.conf
ストリーム {
    アップストリーム lbserver {
        サーバー 10.0.0.4:80;
        サーバー 10.0.0.5:80;
    }

    サーバー{
        聞く 80;
        proxy_pass lbserver;
        proxy_connect_timeout 1秒;
        proxy_timeout 3秒;
    }
}

# Nginxを起動する
[root@lb4 ~]# nginx -t && systemctl nginxを起動します

# 10.0.0.6 linux.lb4.com にアクセスするようにホストを構成する

レイヤー4負荷分散構成ログ

# 4 層ロード バランシングのアクセス ログはありません。nginx.conf の設定では、アクセス ログの形式が http の下に設定されていますが、4 層ロード バランシングの設定は http の外部にあるためです。

#ログが必要な場合は、ストリーム [root@lb4 ~] の下で設定する必要があります。# vim /etc/nginx/conf.c/linux.lb4.com.conf
ストリーム {
	log_format proxy '$remote_addr $remote_port - [$time_local] $status $protocol '
                  '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"';
    access_log /var/log/nginx/proxy.log プロキシ;

    アップストリーム lbserver {
        サーバー 10.0.0.4:80;
        サーバー 10.0.0.5:80;
    }

    サーバー{
        聞く 80;
        proxy_pass lbserver;
        proxy_connect_timeout 1秒;
        proxy_timeout 3秒;
    }
}

#すべてのWebサーバーのログを表示 [root@web01 ~]# tail -f /var/log/nginx/access.log
[root@web02 ~]# tail -f /var/log/nginx/access.log

レイヤー4ロードポート転送

負荷分散ポート5555を要求し、web01のポート22にジャンプします。

#シンプルなストリーム構成{
	サーバー{
        聞く 5555;
        プロキシパス 172.16.1.7:22;
	}
}

#一般的な設定ストリーム{
    アップストリーム ssh_7 {
        サーバー 10.0.0.7:22;
    }

    サーバー{
        聞く 5555;
        プロキシパスssh_7;
    }
}

# テスト [D:\~]$ ssh [email protected]:5555
ジャンプ成功

負荷分散ポート6666を要求し、172.16.1.51:3306にジャンプします。

ストリーム {
    アップストリームdb_51 {
        サーバー 172.16.1.51:3306;
    }
    
    サーバー{
        聞く 6666;
        プロキシパスdb_51;
    }
}

データベーススレーブの負荷分散

ストリーム {
    アップストリームDBサーバー{
        サーバー 172.16.1.51:3306;
        サーバー 172.16.1.52:3306;
        サーバー 172.16.1.53:3306;
        サーバー 172.16.1.54:3306;
        サーバー 172.16.1.55:3306;
        サーバー 172.16.1.56:3306;
    }
    
    サーバー{
        聞く 5555;
        proxy_pass dbserver;
    }
}

要約する

Nginx 4 層ロード バランシング構成に関するこの記事はこれで終わりです。Nginx 4 層ロード バランシングに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  複数人チャットルームを実現する js コード

>>:  ドロップダウンメニューとスライドメニューのデザイン例

推薦する

JavaScript でロジック判定コードを最適化する方法

序文日常生活で使用する論理的判断文には、if...else...、switch...case...、...

CSS 変数に基づくテーマ切り替えに最適なソリューション (推奨)

この要件を受け取ったとき、Baidu は、CSS リンクの置き換え、className の変更、le...

ネイティブ js はフォームの定期的な検証を実装します (検証後にのみ送信)

以下の機能が実装されています。 1. ユーザー名: onfouc は msg ルールを表示します。o...

フラッシュコンテンツの表示に使用される OBJECT タグと EMBED タグの違いの紹介

1. はじめに:ウェブページにフラッシュ コンテンツを正常に表示したい場合は、ページ上のフラッシュ ...

JS初心者が配列を処理するための実践的な方法のまとめ

join() メソッド: 指定された区切り文字を使用して配列内のすべての要素を文字列に接続します。例...

Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

目次1. コンポーネント切り替え方式方法1: v-ifとv-elseを使用する方法 2: 組み込みコ...

Node.js を使用して png 画像に透明なピクセルがあるかどうかを判断する方法

背景PNG 画像は jpg 画像よりも多くのストレージスペースを占有しますが、PNG 画像の品質は大...

Docker データ ストレージ tmpfs マウントの詳細な説明

この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...

Web フォームの入力要素の高度な使用例 11 選

1. ボタンが押されたときに点線のボックスをキャンセルする<br />入力に属性値hid...

MySQLはtruncateコマンドを使用してデータベース内のすべてのテーブルを素早くクリアします

1. まずSELECT文を実行して、すべての切り捨て文を生成します。ステートメント形式: selec...

VMware12 インストール centOS8 構成グラフィック チュートリアルの詳細説明 (vm 仮想マシン インストール centos8 チュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

jQueryカルーセル機能を実装する方法

この記事では、jQueryカルーセル機能の実装コードを参考までに共有します。具体的な内容は次のとおり...

jsを使用してサーバーに写真をアップロードする

この記事の例では、参考のために画像をサーバーにアップロードするためのjsの具体的なコードを共有してい...

MySQL の binlog ログと、binlog ログを使用してデータを回復する方法を説明します。

ご存知のとおり、binlog ログは MySQL データベースにとって非常に重要です。万が一、データ...

CentOS7 環境で gcc (バージョン 10.2.0) をアップグレードする詳細な手順

目次簡単な紹介1. 現在のgccバージョンを確認する2. gccインストールパッケージ(バージョン1...