Docker Consul コンテナ サービスの更新と見つかった問題の概要

Docker Consul コンテナ サービスの更新と見つかった問題の概要

docker run -d \
--name=レジストラ \
--net=ホスト\
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=常に\
gliderlabs/registrator:最新\
-ip=192.168.80.20 \
領事://192.168.80.10:8500

1. コンテナサービスの更新とDockerコンサルの検出

1. サービス登録と検出とは何ですか?

サービスの登録と検出は、マイクロサービス アーキテクチャに欠かせない重要なコンポーネントです。当初、すべてのサービスは単一ノードであり、高可用性は保証されておらず、サービス負荷も考慮されていませんでした。サービス呼び出しは、単にインターフェース アクセスを通じて行われていました。複数のノードを持つ分散アーキテクチャが登場して初めて、サービス フロントエンドの負荷を分散するという最初のソリューションが生まれました。この方法では、フロントエンドはすべてのバックエンド サービスのネットワークの場所を認識し、構成ファイルでそれらを構成する必要があります。ここではいくつかの問題があります:

  • バックエンド サービス AN を呼び出す必要がある場合は、N 個のサービスのネットワークの場所を構成する必要があり、非常に面倒です。
  • バックエンドサービスのネットワークロケーションの変更には、各呼び出し元の構成の変更が必要です。

このような問題があるため、サービス登録と検出がこれらの問題の解決策となります。バックエンド サービス A ~ N は、現在のネットワークの場所をサービス検出モジュールに登録できます。サービス検出は Kv の形式で記録されます。ここで、K は通常サービス名、v は IP:PORT です。サービス検出モジュールは定期的にヘルスチェックを実行し、これらのバックエンド サービスにアクセスできるかどうかをポーリングして確認します。フロントエンドがバックエンド サービス AN を呼び出すと、サービス検出モジュールにアクセスしてネットワークの場所を問い合わせ、サービスを呼び出します。このアプローチは上記の問題を解決できます。フロントエンドはこれらのバックエンド サービスのネットワークの場所をまったく記録する必要がなく、フロントエンドとバックエンドは完全に分離されます。

ここに画像の説明を挿入

2. 領事とは何ですか?

ここに画像の説明を挿入

  • Consul は、Google が Go 言語を使用して開発したオープンソースのサービス管理ソフトウェアです。複数のデータ センター、分散型高可用性、サービス検出、構成共有をサポートします。サービスの高可用性を確保するため、Raft アルゴリズムが使用されます。サービス登録および検出フレームワーク、分散一貫性プロトコル実装、ヘルスチェック、キー/値ストレージ、マルチデータセンターソリューションが組み込まれているため、他のツール (ZooKeeper など) に依存する必要がなくなりました。このサービスは、実行可能なバイナリ パッケージが 1 つだけなので簡単に展開できます。各ノードはエージェントを実行する必要があります。エージェントには、サーバーとクライアントの 2 つの動作モードがあります。データのセキュリティを確保し、サーバーリーダーの選出が正しく実行されるようにするために、データセンターごとに 3 つまたは 5 つのサーバーノードを用意することが公式に推奨されています。
  • クライアント モードでは、現在のノードに登録されているすべてのサービスがサーバー ノードに転送され、この情報は保持されません。
  • サーバー モードの機能はクライアント モードの機能と似ています。唯一の違いは、障害が発生した場合でも情報を保持できるように、すべての情報をローカルに保持することです。
  • サーバー リーダーは、すべてのサーバー ノードのリーダーです。他のサーバー ノードとは異なり、サーバー リーダーは登録情報を他のサーバー ノードと同期する役割を担い、各ノードのヘルス モニタリングも担当します。

ここに画像の説明を挿入

3. Consulが提供する主な機能

サービスの登録と検出

  • Consul では、DNS または HTTP インターフェースを通じてサービス登録とサービス検出が簡単に行えます。SaaS によって提供されるサービスなど、一部の外部サービスも同様の方法で登録できます。

健康チェック:

  • ヘルスチェックにより、Consul はクラスター内の操作について迅速に警告することができます。サービス検出との統合により、障害が発生したサービスにサービスが転送されるのを防ぐことができます。

キー/値ストレージ:

  • 動的構成を保存するためのシステム。どこからでも操作できるシンプルな HTTP インターフェースを提供します。複雑な構成なしで任意の数のリージョンをサポートするマルチデータセンター。
  • consul をインストールすると、サービス登録に使用されます。つまり、コンテナ自体の一部の情報が consul に登録され、他のプログラムは consul を通じて関連する登録済みサービス情報を取得できます。これがサービス登録と検出です。

ここに画像の説明を挿入

2. 領事の派遣

ここに画像の説明を挿入

環境の準備

サーバータイプシステムIPアドレスインストールするコンポーネント
領事サーバーCentOS 7.4 (64 ビット) 192.168.80.10 consul サービス、nginx サービス、consul-template デーモンを実行します。
登録サーバーCentOS7.4(64ビット) 192.168.80.20レジストレータコンテナとnginxサービスを実行する

すべてのサーバーでファイアウォールとSELinuxを無効にする

systemctl 停止 ファイアウォール
強制0を設定する

ステップ1: Consulサーバーでの操作は次のとおりです。

1. 領事サービスを確立する

mkdir /opt/consul/
cd /opt/consul/
rz -E #次の圧縮パッケージconsul_0.9.2_linux_amd64.zipをインポートします
consul_0.9.2_linux_amd64.zip を解凍します。 
mv コンソール /usr/local/bin/ 

ここに画像の説明を挿入

2. プロキシを設定し、バックグラウンドでconsulサーバーを起動します。

領事代理\
-サーバー\
-ブートストラップ\
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.80.10 \
-クライアント=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

netstat -napt | grep コンソール
領事メンバー
領事情報 | grep リーダー

ここに画像の説明を挿入

関連するオプションは次のように説明されます。

オプション例示する
- サーバーとして起動デフォルトはクライアントです。
-ブートストラップサーバーがブートストラップ モードであるかどうかを制御するために使用されます。データ センターでは、ブートストラップ モードのサーバーは 1 つだけ存在できます。サーバーがブートストラップ モードの場合、サーバーは自身をサーバー リーダーとして選出できます。
-ブートストラップ期待値=2クラスターに必要なサーバーの最小数。この数より少ない場合、クラスターは失敗します。
-ウイUI インターフェイスを開くように指定し、http://localhost:8500/ui などのアドレスを通じて consul の Web UI インターフェイスにアクセスできるようにします。
-データディレクトリデータ保存ジャーナルを指定します。
-バインドクラスター内で使用される通信アドレスを指定します。クラスター内のすべてのノードがこのアドレスに到達可能である必要があります。デフォルトは 0.0.0.0 です。
-クライアントconsul がバインドされるクライアント アドレスを指定します。このアドレスは、HTTP、DNS、RPC およびその他のサービスを提供します。デフォルトは 127.0.0.1 です。
-ノードクラスター内のノードの名前は、クラスター内で一意である必要があります。デフォルトはノードのホスト名です。
-データセンターデータセンター名を指定します。デフォルトは dc1 です。

1) メンバーステータスとクラスターステータスを確認する

クラスターサーバーのメンバーを表示する curl 127.0.0.1:8500/v1/status/peers
クラスター Raf リーダー curl 127.0.0.1:8500/v1/status/leader
登録されているすべてのサービス curl 127.0.0.1:8500/v1/catalog/services
nginx サービス情報を表示する curl 127.0.0.1:8500/v1/catalog/nginx
クラスターノードの詳細 curl 127.0.0.1:8500/v1/catalog/nodes 

ここに画像の説明を挿入

ステップ 2: レジストラの展開 192.168.80.20 操作は次のとおりです。

4. コンテナサービスが自動的にNginxクラスタに参加する

  • Gliderlabs/Registrator はコンテナの実行状態を確認し、自動的に登録したり、サービス構成センターに Docker コンテナ サービスを登録解除したりすることができます。
  • 現在、Consul、Etcd、SkyDNS2 をサポートしています。

–net=ホスト実行中の Docker コンテナをホスト ネットワーク モードに設定します。
-v /var/run/docker.sock:/tmp/docker.sockホストの Docker デーモンがデフォルトでリッスンする Unix ドメイン ソケットをコンテナーにマウントします。
--restart=常にコンテナが終了するときに常に再起動するように設定します。
–ipネットワークをホスト モードに指定したので、IP をホスト マシンの IP として指定します。
領事Consul サーバーの IP とポートを指定します。

ここに画像の説明を挿入

5. Nginxとhttpdのテストイメージをインストールする

docker run -itd -p:81:80 --name test-01 -h test01 nginx
docker run -itd -p:82:80 --name test-02 -h test02 nginx
docker run -itd -p:83:80 --name test-03 -h test03 httpd
docker run -itd -p:84:80 --name test-04 -h test04 httpd 

ここに画像の説明を挿入

6.イメージがconsulサーバーに登録されているか確認する

ここに画像の説明を挿入

7. Web ブラウザーで、レジストリがこれらのサービスを検出したかどうかを確認します。

ここに画像の説明を挿入

ここに画像の説明を挿入

3. テンプレートを自動的に更新するように設定する

  • Consul-Template は、設定ファイルを自動的に置き換える Consul ベースのアプリケーションです。 Consul-Template は、Consul クラスター情報をリアルタイムで照会し、ファイル システム上の指定された任意の数のテンプレートを更新して構成ファイルを生成するデーモン プロセスです。更新が完了したら、シェル コマンドを実行して更新操作を実行し、Nginx をリロードすることを選択できます。
  • Consul-Template は、Consul 内のサービス カタログ、キー、キー値などを照会できます。この強力な抽象化とクエリ言語テンプレートにより、Consul-Template は構成ファイルを動的に作成するのに特に適しています。たとえば、Apache/Nginx プロキシ バランサー、Haproxy バックエンドなどを作成します。

1. テンプレートnginxテンプレートファイルを準備する

Consulサーバーで操作を実行する
1) nginx.ctmpl設定ファイルを追加する

[root@consul consul]# pwd #現在 /opt/consul ディレクトリ /opt/consul
[root@consul consul]# vim nginx.ctmpl

アップストリーム nginx_slb {
 {{範囲サービス "nginx"}}
  サーバー {{.Address}}:{{.Port}};
  {{終わり}}
}

サーバー{
 8000を聴く;
 サーバー名 ローカルホスト 192.168.80.10;
 アクセスログ /var/log/nginx/clj.com-access.log;
 インデックス index.html index.php;
 位置 / {
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header クライアント IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://nginx_slb;
  }     
} 

ここに画像の説明を挿入

2) nginxインストールパッケージをインポートして解凍します

CD ..
rz -E # 次のように nginx 圧縮パッケージをアップロードします。
nginx-1.12.0.tar.gz
tar zxvf nginx-1.12.0.tar.gz #解凍

ここに画像の説明を挿入

3) nginxプログラムユーザーを作成し、依存パッケージをインストールする

ユーザー追加 -M -s /sbin/nologin nginx
yum -y インストール gcc pcre-devel zlib-devel gcc-c++ make 

ここに画像の説明を挿入

4) コンパイルとインストール後にパスを最適化する

nginx-1.12.0をインストールします
 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 

ここに画像の説明を挿入

ここに画像の説明を挿入

5) nginx設定ファイルを変更する

/usr/local/nginx/conf/ をコピーします。
vim nginx.conf
http {
    include vhost/*.conf; #この設定を19行目に追加します

ここに画像の説明を挿入

6) nginxサービス用のvhostとログディレクトリを作成する

mkdir 仮想ホスト
mkdir /var/log/nginx
nginx #nginxを起動する
netstat -natp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 59892/nginx: マスター

ここに画像の説明を挿入

7) consul-template_0.19.3_linux_amd64.zip圧縮パッケージを渡して解凍します。

cd /opt/
rz -E # 次のようにテンプレートファイルを渡します consul-template_0.19.3_linux_amd64.zip
consul-template_0.19.3_linux_amd64.zip を解凍します。
mv consul-template /usr/local/bin/ 

ここに画像の説明を挿入

8) フォアグラウンド(またはバックグラウンド)でconsul-templateを起動します。

コンスルテンプレート --consul-addr 192.168.80.10:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/clj.conf:/usr/local/nginx/sbin/nginx -s 再ロード" \
--log-level=情報

ここに画像の説明を挿入

9) 新しいターミナルを開いて、設定ファイルが生成されたかどうかを確認します。

/usr/local/nginx/conf/vhost/ をコピーします。
vim clj.conf 

ここに画像の説明を挿入

10) レジストラサーバにポート85のnginxコンテナを追加する

docker run -itd -p:85:80 --name test-05 -h test05 nginx 

ここに画像の説明を挿入

11) Consulサーバーのテンプレートサービスページが変更されたことを確認します。

ここに画像の説明を挿入

12) 設定ファイルを再度確認します (ポート 85 が追加されていることがわかります。docker stop を使用してコンテナを停止すると、設定ファイルもそれに応じて変更されます)

ここに画像の説明を挿入

13) コンテナのnginxサイトディレクトリにあるデフォルトのhtml.indexファイルを変更する

ここに画像の説明を挿入

14) ブラウザでのアクセステスト

ここに画像の説明を挿入

2. Consul マルチノード構成

1) まず領事サービスを確立する

rz -y #consul 圧縮パッケージ consul_0.9.2_linux_amd64.zip をインポートします             
mv コンソール /usr/local/bin/ 

ここに画像の説明を挿入

2) 既存のDocker環境を持つサーバーを既存のクラスターに追加する

領事代理\
-サーバー\
--ブートストラップ\
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.80.30 \
-クライアント=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-データセンター=dc1 \
- 192.168.80.10 に参加 &> /var/log/consul.log &

--enable-script-ckecks=trueチェックサービスが利用可能になるように設定する
-データセンターデータセンター名
-参加する既存のクラスターに参加する

--enable-script-ckecks=trueチェックサービスを利用可能に設定 -datacenter データセンター名 -join 既存のクラスターに参加します

ここに画像の説明を挿入

3) Consulサーバーで表示

ここに画像の説明を挿入

Docker Consul コンテナ サービスの更新と発見に関するこの記事はこれで終わりです。Docker Consul コンテナに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker compose を使用して consul クラスタ環境を構築する例
  • Docker デプロイメント Consul 構成プロセスの分析

<<:  MySQL接続クエリにおけるととwhereの違いの簡単な分析

>>:  CSS スタイルの導入方法とその長所と短所の紹介

推薦する

MySQL 8.0.17 をインストールしてリモート アクセスを構成する方法

1. インストール前の準備データベースのバージョンを確認するコマンド: mysql --versio...

MySQLの左結合を内部結合に素早く変換するプロセス

日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プラ...

mysql8.0.18 で winx64 をインストールするための詳細なチュートリアル (画像とテキスト付き)

MySQLデータベースをダウンロードするには、https://dev.mysql.com/down...

フォーム送信時に追加のパラメータを渡すためのいくつかの一般的な方法

フォームを送信するときに、送信前に追加のパラメータが追加される状況が発生する場合があります。この問題...

yum インストールエラーの問題を解決する 保護されたマルチライブラリバージョン

現在、クラウドサーバーに nginx をインストールする際、最初に zlib などの依存ライブラリを...

Tomcat コアコンポーネントとアプリケーションアーキテクチャの詳細な説明

目次Web コンテナとは何ですか? HTTP の性質HTTP リクエスト応答の例クッキーとセッション...

js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

この記事は、JS レッドブックの第 8 章に記載されているオブジェクトに関する 2 番目の記事です。...

docker-compose で Jenkins をインストールする際の実践的なメモ

ディレクトリを作成する cd /usr/local/docker/ jenkins-docker を...

CSS で QR コードスキャンボックスを実装するためのサンプルコード

カメラを開くと通常はスキャンボックスが表示されますが、静的なQRコードではフォーカスを合わせたりスキ...

MySQL における Decimal 型と Float Double 型の違い (詳細説明)

MySQL には、10 進数などの標準データ型だけでなく、float や double などの非標...

Centos8 で yum を使用して mongodb 4.2 をインストールする方法

1. リポジトリファイルを作成するmongodb の公式インストール ドキュメントを参照し、次のスク...

mysqlサーバーは--skip-grant-tablesオプションで実行されています

MySQLサーバーは--skip-grant-tablesオプションで実行されているため、このステー...

JavaScript の基本変数

目次1. 変数の概要1.1 変数のメモリへの保存1.2 変数の使用1. 変数を宣言する2. 譲渡3....

Alipay の Java 決済インターフェースを開発するための詳細な手順

目次最初のステップステップ2ステップ3ステップ4 Alipay 決済インターフェースへの接続に関する...

読み取り専用と無効の違い

要約すると: Readonly は入力 (テキスト/パスワード) とテキスト領域に対してのみ有効です...