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 コード

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

推薦する

MySQLデータベースバックアップのさまざまな実装方法の概要

この記事では、MySQL データベースのバックアップを実装するさまざまな方法について説明します。ご参...

TeamCenter12 にログインする際の 404/503 問題の解決方法

TeamCenter12はアカウントのパスワードを入力し、ログインをクリックすると、404または50...

Vue の el-table は自動天井効果を実現します (固定をサポート)

目次序文実装のアイデア効果:使用:メインソースコード:序文多くのケースを見た結果、単純な観点からは、...

Nginxの書き換えモジュールの詳細な説明

書き換えモジュールは ngx_http_rewrite_module モジュールです。その主な機能は...

CSS3 タブアニメーションの例 背景切り替えの動的効果

CSS 3 アニメーションの例 - タブの背景切り替えの動的効果、具体的なコードは次のとおりです。 ...

Centos7 構成 fastdfs および nginx 分散ファイル ストレージ システムの実装プロセス分析

1. libfastcommon-1.0.43 をインストールします。インストール パッケージは h...

Baota LinuxパネルにFTP接続できない問題の解決方法の詳細な説明

Alibaba Cloud Server を使用している場合は、セキュリティ グループ設定でポート ...

Nginx+ModSecurity セキュリティモジュールの導入

目次1. ダウンロード2. 展開1.Nginxのデプロイメント2. ModSecurityの展開3....

リモートログインとポート公開を防ぐためのLinuxサーバー構成IPホワイトリスト

序文ブロガーが使用しているサーバーは Alibaba Cloud から購入したものです。実際、Ali...

Win7 での mysql5.5 インストール グラフィック チュートリアル

MySQL のインストールは比較的簡単なので、通常は次のステップに直接進み、注意が必要な点に集中する...

js キャンバスは検証コードを実装し、検証コード機能を取得します

この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...

React Native JSIはRNとネイティブ通信のサンプルコードを実装します

目次JSIとはJSIの違いiOS で JSI を使用するiOS 設定RN側の構成jsはパラメータ付き...

Linux 環境変数の設定方法のまとめ (.bash_profile と .bashrc の違い)

Linux では、アプリケーションをダウンロードしてインストールすると、起動時にアプリケーション名...

Vue の vue.$set() メソッドのソースコード例の詳細な説明

Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオ...

JavaScriptはイベントリスナーをイベント委任にバッチで追加します。詳細なプロセス

1. イベント委任とは何ですか?イベント委譲: イベントバブリングの特性を利用して、子要素に登録すべ...