Nginx + consul + upsync を使用して動的負荷分散を実現する方法の詳細な説明

Nginx + consul + upsync を使用して動的負荷分散を実現する方法の詳細な説明

前提条件

DNSドメイン名解決プロセス

  • ブラウザにドメイン名を入力してアクセスしてください
  • ブラウザのキャッシュで対応するIPとポートを確認します。対応するIPとポートに直接アクセスした場合
  • ブラウザのキャッシュに対応するものがない場合は、ローカル ホスト ファイルをチェックして、存在するかどうかを確認します。
  • ローカル ホスト ファイルがない場合、DSN サーバーで検索します。

外部ネットワークマッピング

名前が示すように、ローカルIPアドレスをパブリックIPアドレスにマッピングし、すべてのホスト(インターネットに接続されたコンピュータ)からアクセスできるようにします。

  • 質問: 外部ネットワーク マッピングを使用する必要があるのはなぜですか?

たとえば、WeChat 支払い用のサードパーティ インターフェイス コールバックを作成する場合、WeChat がコールバックするインターフェイスはパブリック IP アドレスである必要があります。そうでない場合、コールバックがまったくできず、ローカルでテストできなくなります。この時点で、IPアドレスをパブリックネットワーク(ホストがアクセス可能なネットワーク)にマッピングするための外部ネットワークマッピングが必要です。

  • 質問: 外部ネットワーク マッピングを実現するにはどうすればよいですか?

natapp、ngrok などのサードパーティ ツールを使用して外部ネットワーク マッピングを完了します。具体的な手順については、公式 Web サイトをご覧ください。
ngrok公式サイト。
natapp公式サイト。(推奨)

nginxコア知識

nginxとは

nginx は、小型で非常に高い同時実行性をサポートする軽量の Web サーバー/リバース プロキシ サーバーです。

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

http サーバー: 静的サーバーおよびイメージ サーバーとして使用されます。仮想ホスト構成: サーバーを複数の Web サイト展開に分割します。 (異なるドメイン名マッピングまたは異なるポートを構成することで、仮想ホストの構成を完了できます)
リバース プロキシ: リバース プロキシを使用して実際の IP アドレスを非表示にします<br /> リバース プロキシの適用シナリオ:
異なるサービスを提供する 3 つのサーバーがあります。この時点で、nginx を使用してドメイン名のマッピングを構成し、3 つの異なるサーバーへのアクセス、またはポート経由のアクセスを完了できます。 3 つのサーバーの実際の IP アドレスは隠すことができます。Nginx はパケットを内部的に異なるサーバーに転送し、パケット キャプチャ ツールは Nginx サーバーの IP アドレス (ベース ポイントなし) のみを取得できます。
負荷分散<br /> セキュリティ構成では、Nginx を使用して API インターフェイス ゲートウェイを構築し、Web サイトのクロスドメイン問題を解決し、Web サイトの静的リソースと動的リソースを分離して DDOS (トラフィック攻撃) を防止します。

用語集

レイヤー4負荷分散

トランスポート層で実行され、多くの場合TCPプロトコルを使用する

レイヤー7負荷分散

アプリケーション層で実行され、多くの場合Httpプロトコルを使用する

負荷分散

機能:単一サーバーの負荷を軽減し、フェイルオーバー(再試行メカニズム)サーバーがダウンした場合、次のサーバーを直接ポーリングし、ヘルスチェックを行い、アップストリームを使用してnginxでアップストリームサーバーを構成します。

フェイルオーバー

いずれかのサーバーにアクセスしたときにサービスが停止しているか遅延が発生している場合は、フェイルオーバーを構成して別のサーバーに直接切り替えることができます。

### アップストリーム サーバーに接続する時間 proxy_connect_timeout 1s;
		### 送信リクエストのタイムアウト proxy_send_timeout 1s;
		### 対応するタイムアウトを受け入れます proxy_read_timeout 1s;

動的負荷分散

アップストリームの構成は静的ではなくなり、動的な負荷分散を実現するために登録センターから動的に取得されます。

Nginx + consul + upsync で動的負荷分散が完了

1. Centos7の基本環境をインストールする

# 基本コマンド # netstatコマンドをインストールする yum install netstat
 # すべてのTCPポートの使用状況を表示する netstat -ntlp
 # 現在のサービスプロセスを表示します ps -ef オプション: [ | grep nginx]
 # ポートに対応するプログラムを強制終了します kill -9 pid プロセス番号 # yum を設定します source yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yumアップデート
yum インストール -y yum-utils デバイスマッパー永続データ lvm2
# 基本環境をインストールする yum install gcc-c++
yum インストール -y pcre pcre-devel
yum インストール -y zlib zlib-devel
yum インストール -y openssl openssl-devel
yum インストール wget
yum インストール 解凍

2. Consul をインストールする (サービスの登録と検出)

# インストール パッケージをダウンロードします。wget -c の -c はブレークポイントの継続を意味します。wget -c https://releases.hashicorp.com/consul/1.8.5/consul_1.8.5_linux_amd64.zip
# 圧縮パッケージを解凍します upzip unzip consul_1.8.5_linux_amd64.zip
# ./consul コマンドを実行します。Usage: consul [--version] [--help] <command> [<args>] という行と次のパラメータが表示された場合、この consul に問題がないことを意味します。/consul
# ファイアウォールをオフにする systemctl stop firewalld
# Consul を起動し、コンピュータの IP アドレスを入力します。仮想マシンの場合は、仮想マシンの IP アドレスを入力します。CentOS では、ip addr を使用して IP アドレスを表示できます。ipconfig を使用して IP アドレスを表示するウィンドウです。
./consul エージェント -dev -ui -node=consul-dev -client=192.168.254.134
# もちろん、バックグラウンド実行方式を使用して、出力ログが同じレベルの nohup.out ファイルに戻るようにすることもできます。nohup ./consul agent -dev -ui -node=consul-dev -client=192.168.254.134 &
# 領事のウェブページ 192.168.254.134:8500 にアクセス

# consul のバックグラウンド プロセスをチェックして閉じます。ここで記述した 19854 は、jobs -l によって照会されたプロセス pid です。
ジョブ -l
キル -9 19854

3. nginxをインストールし、upsyncモジュールを追加します。

# upsync モジュールをダウンロードして解凍します wget -c https://github.com/weibocom/nginx-upsync-module/archive/master.zip
nginx-upsync-module-master.zip を解凍します。
# nginxをダウンロード
http://nginx.org/download/nginx-1.9.9.tar.gz を実行します。
# 現在のディレクトリに解凍します tar -zxvf nginx-1.9.9.tar.gz
# nginx ユーザーとユーザー グループを設定します。 -s /sbin/nologin nginx は、ユーザーがホストにログインできないことを意味します。 groupadd nginx
ユーザー追加 -g nginx -s /sbin/nologin nginx
# これら 2 つのフォルダは、nginx mkdir -p /var/tmp/nginx/client/ をコンパイルするときに指定されます。
mkdir -p /usr/local/nginx
# nginxの解凍されたフォルダのディレクトリに入る cd nginx-1.9.9 
# nginx をコンパイルします。--prefix は nginx がインストールされているディレクトリを表します。 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
作成 && インストール
## nginx がインストールされたディレクトリ、つまり /usr/local/nginx ディレクトリに移動し、conf ディレクトリに移動して、conf ディレクトリのファイルの内容を編集します。upstream myserver {
 server 127.0.0.1:11111;# これは修正済みなので無視してください# springbootserver: key value、upsync_timeout timeout 3 seconds、upsync_interval interval、upsync_type type consul、strong_dependency advanced dependency upsync 192.168.254.134:8500/v1/kv/upstreams/springbootserver upsync_timeout=3000ms upsync_interval=500ms upsync_type=consul strong_dependency=off;
 # 取得した設定ファイルを、次の設定済みディレクトリ upsync_dump_path /usr/local/nginx-1.9.9/conf/upsync_dump.conf に配置します。

 }
 #作成したアップストリームサーバーをサーバー内の場所として指定します
 位置 / {
 proxy_pass http://myserver;
 インデックス index.html index.htm;
 }
# sbinディレクトリに入り、nginxを起動します
./nginx

4. テストを実施する

  • マシンは、IPアドレス192.168.0.116で2つのサービス8080と8081を起動します。
  • Linuxコマンドを使用して、consulの2つのキー値を指定します。192.168.254.134はconsulのIPアドレスです。
# curl リクエストを使用します。これは put リクエストである必要があります。 curl -X PUT http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8080

curl -X PUT http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8081

#または、Postmanを使用して、Consulが提供するAPIを呼び出してキーと値を追加します
http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8081

# グラフィカル インターフェイスを使用してキー値を手動で追加することもできます。手動で追加する場合、フォルダーを作成する場合は最後にスラッシュを追加する必要があることに注意してください: /

5. Consulグラフィカルページでキーに対応する値を追加して、負荷分散アルゴリズムを指定します。

{"weight":1、"max_fails":2、"fail_timeout":10、"down":0} 

ここに画像の説明を挿入

そして、wgetのダウンロード速度が遅いことがあるので、ここでファイルをアップロードします

ファイルリンク

動的負荷分散を実現するための Nginx + consul + upsync に関するこの記事はこれで終わりです。Nginx + consul + upsync 動的負荷分散に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  チェックボックスの選択またはキャンセルを実装するJavaScript

>>:  MySQL サブクエリとグループ化されたクエリ

推薦する

MySQL への接続時に発生する 1449 および 1045 例外の解決方法

MySQL への接続時に発生する 1449 および 1045 例外の解決方法 mysql 1449:...

Linux Tensorflow2.0のインストール問題を解決する

conda アップデート conda pip で tf-nightly-gpu-2.0-previ...

nestjs からフロントエンドに返されるデータ形式のカプセル化実装

通常、開発プロセスでは、インターフェイス要求の成功または失敗は httpcode に基づいて決定され...

Nginx で Angular プロジェクトを展開する際の落とし穴

コンパイル後にAngularプロジェクトをNginxにデプロイする方法をオンラインで検索すると、ほと...

HTML およびプラグイン アプリケーションにおけるデータ カスタム属性の使用の概要

HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...

MySQLプリコンパイル機能の詳細な説明

この記事では、MySQLのプリコンパイル機能について紹介します。具体的な内容は以下のとおりです。 1...

Dockerイメージのインポートとエクスポートの実装

GitLabのDocker使用法gitlab ドッカー起動コマンド docker run -d -p...

開発にVscodeとdockerを組み合わせて使用​​する詳細なプロセス

序文Docker と VS Code を使用すると、ローカル開発環境全体を最適化し、プロジェクトの進...

JSプロトタイプとプロトタイプチェーンについての簡単な説明

目次1. プロトタイプ2. プロトタイプポインタ: __proto__要約する1. プロトタイプJa...

JS で配列の重複排除を実装する 7 つの方法

目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....

MySQL で中国語を入力するときに発生するエラー 1366 の解決方法

MySQL で中国語を入力すると、次のエラーが発生します。エラー 1366: 1366: 行 1 の...

JavaScript でのモグラ叩きゲームの実装

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

Linux userdel コマンドの使用法

1. コマンドの紹介userdel (ユーザー削除) コマンドは、ユーザー アカウントと関連ファイル...

Linux コマンドラインターミナルで画面を分割するための 2 つのツール

ターミナル分割画面ツールは2つあります: screen と tmux 1. 画面分割を使用する(上下...

Docker で MySQL 接続と設定ファイルの最大数を変更する

1. MySQLイメージを見つける ドッカーps 2. ミラーmysqlイメージを入力する dock...