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

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

推薦する

Dockerコマンドの自動補完の実装

序文この友人がどれくらいDockerを使っていなかったのかは分かりませんが、突然Dockerコマンド...

ウェブページで CSS スタイルを適用するさまざまな形式の概要

1. インライン スタイル (<body></body> 内に配置されます)...

Debian Dockerコンテナにcrontabスケジュールタスクを追加する

現在、DockerイメージのほとんどはDebianベースです # cat /etc/issue De...

MySQLパスワードを忘れた場合のいくつかの解決策

解決策1完全にアンインストールしてすべてのデータを削除します。まず、MySQLに関連するすべてのプロ...

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

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

MySQL水平および垂直テーブル変換操作の実装方法

この記事では、例を使用して、MySQL の水平テーブルと垂直テーブル間の変換操作を実装する方法を説明...

Vue 学習 - VueRouter ルーティングの基礎

目次1. Vueルーター1. 説明2. 選択したルートのレンダリング: 3. 基本的な動作原理2. ...

MySQL 5.7.21 のインストールと設定のチュートリアル

mysql5.7.21の簡単なインストール構成は次のとおりです。 1. MySQLのインストール1....

ウェブページの HTML コード: スクロールテキストの作成

このセクションでは、Web ページ内のテキストをスクロールしたり、スクロール プロパティを制御できる...

ウェブデザインの発展と西洋建築の類似点は何でしょうか?

歴史は常に驚くほどうまく繰り返される。西洋建築とウェブデザインは、どちらも工学と芸術の組み合わせです...

docker compose を使用して consul クラスタ環境を構築する例

領事の基本概念サーバーモードとクライアントモードサーバー モードとクライアント モードは、consu...

WeChatミニプログラムのすべてのページがログインされていることを確認する方法

目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...

MySQL での mysqladmin 日常管理コマンドの概要 (必読)

mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...

mysql5.7.18 のインストール時にエントリが見つからない問題の解決方法

mysql5.7.18のインストール時に次の問題が発生しました: プログラム入力ポイントfesetr...

幅と高さが可変の要素を中央に配置するための CSS ソリューション

1. 水平中央公開コード: html: <div class="parent&quo...