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 8.0.11 のインストールと設定のチュートリアル

公式ウェブサイトアドレス: https://dev.mysql.com/downloads/mysq...

MySQL 8.0 バージョンで getTables がすべてのデータベース テーブルを返す問題の簡単な分析

序文この記事では、主にライブラリ内のすべてのテーブルを返すMysql8.0ドライバgetTables...

Linux 環境で crontab コマンドを使用して、スケジュールされた定期的な実行タスクを設定します (PHP 実行コードを含む)

この記事では、Linux 環境で crontab コマンドを使用して、タスクの定期的な実行をスケジュ...

JSを使用して画像を効果的に圧縮する方法

目次序文変換関係具体的な実装file2DataUrl(ファイル、コールバック) file2Image...

JS で CSS 変数を使用する方法

JS で CSS 変数を使用する方法:export キーワードを使用して、js オブジェクトを le...

Linux サーバーのステータスとパフォーマンスに関連するコマンドの詳細な説明

サーバーステータス分析Linux サーバーの CPU の詳細を表示する#CPU情報を表示[root@...

MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー

OS X 環境で MySQL を起動すると、エラー メッセージが表示されます。 016-03-03T...

Websocket に基づくシンプルなチャットルームダイアログの実装

この記事では、WebSocketを使用して簡単なチャットルームの会話を実装するための具体的なコードを...

フレックスレイアウトでコンテナ内のコンテンツを維持するためのソリューションの詳細な説明

モバイル側では、フレックスレイアウトが非常に便利です。デバイスの幅に応じてコンテナの幅を自動的に調整...

JavaScript が Jingdong の虫眼鏡効果を模倣

この記事では、Jingdongの虫眼鏡効果を実現するためのJavaScriptの具体的なコードを紹介...

Ubuntu 20.04でAliソースを変更する方法

なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...

Ubuntu 20.04 中国語入力方法のインストール手順

この記事では、Google 入力方法をインストールします。実は以前はSogou入力方式を使っていたの...

TypeScript の条件型に関する詳細な読書と実践記録

目次ジェネリック型での条件型の使用ツールタイプ脱出ポッド矢印関数で条件型を使用する型推論による条件型...

MySQLスレーブのメンテナンスに関する経験の共有

序文: MySQL マスター/スレーブ アーキテクチャは、最も一般的に使用されるアーキテクチャ セッ...

MySQL の nvl() 関数に似た ifnull() 関数についての簡単な説明

IFNULL(式1,式2) expr1 が NULL でない場合、IFNULL() は expr1 ...