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 サブクエリとグループ化されたクエリ

推薦する

JS 実用的なオブジェクト指向スネークゲームの例

目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....

Vue3のレスポンシブ原則の詳細な説明

目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

CSSのline-heightを継承する方法

Line-height はどのように継承されますか?30px などの特定の値を書き込むと、この値が継...

Mysqlリモート接続構成を実装する2つの方法

Mysqlリモート接続構成を実装する2つの方法会社で働いていると、誰かのコンピュータに保存されている...

Linux で MySQL 5.6 X64 バージョンをインストールする詳細な手順

環境: 1. CentOS6.5 X64 2.mysql-5.6.34-linux-glibc2.5...

MySQL Bツリーインデックスとインデックス最適化の概要についての簡単な説明

MySQL の MyISAM エンジンと InnoDB エンジンはどちらもデフォルトで B+ ツリー...

マウスオーバーボタンアニメーションを実現する純粋な CSS3 パート 2

前の 2 つの章を終えて、ボタンのフローティング アニメーションについて新たな理解が得られましたか?...

JavaScript で大きなファイルの並列ダウンロードを実装する方法

目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...

DockerはRedis5.0をビルドし、データをマウントします

目次1. 永続データの簡単なマウント2. DockerFileでイメージをビルドし、設定ファイルを指...

適応レイアウトの処理について(フロートとマージンネガティブマージンを使用)

適応型レイアウトは、実際のアプリケーションでますます一般的になっています。今日は、主にフローティング...

Mysql5.7でのスケジュールバックアップの実装

1. MySQL インストール パス D:\xxx\MYSQL\MySQL Workbench CE...

MySQL NULLがピットを引き起こした

比較演算子でNULLを使用する mysql> 1>NULLを選択します。 +------...

HTML+CSSを使用してマウスの動きを追跡する

ユーザーがプライバシーを意識するようになり、オンライン トラッキングに対する予防策を強化するにつれて...