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 スタイルの導入方法とその長所と短所の紹介

推薦する

スクロールバーがスペースを占有することで発生するバグを修正しました

背景このバグは滾動條占據空間ことで発生していました。いくつかの情報を確認して、ようやく解決しました。...

CSSでサウンドを再生するいくつかのテクニック

CSS は、スタイル、レイアウト、プレゼンテーションの領域です。色彩、サイズ、アニメーションが溢れて...

MySQLトランザクションとSpring分離レベルの実装原理の詳細な説明

1. トランザクションはACID特性を持つ原子性: トランザクションは、トランザクションによって分割...

Windows での MySQL 8.0.13 解凍バージョンのインストール グラフィック チュートリアル

この記事では、参考までにMySQL 8.0.13のインストールグラフィックチュートリアルを紹介します...

Tomcat が https アクセスをサポートするための手順の説明

tomcat を https アクセスに対応させる方法ステップ: (1)キーストアファイルを生成する...

自動的にフォーカスを取得する要素入力ボックスの実装

最近のプロジェクトでフォームを作成するときに、コメント ボックスまで自動的にスクロールし、コメント ...

CSSのtranslate(-50%,-50%)は水平および垂直の中央揃え効果を実現します。

translate(-50%,-50%) 属性:中央に配置するには、長さと幅の 50% だけ上と左...

ページのスクロールバーを無効にするには、overflow: hiddenを使用します。

コードをコピーコードは次のとおりです。 html {オーバーフロー: 非表示; }体{オーバーフロー...

JavaScript配列の一般的なメソッドの概要

目次1. はじめに2. フィルター() 3. マップ() 4. ソート() 5. 減らす() 6. ...

ページングクリックコントロールを実装するネイティブJS

これは、ネイティブJSを使用してページングクリックコントロールを実装する必要がある面接の質問です。参...

ウェブサイトの高速化における CDN、SCDN、DCDN の違いは何ですか?どうやって選ぶ?

1. CDNこれは、Web サイト上で最もよく使用される加速機能です。分散サーバー レイアウトによ...

html5 の新しいメソッドを使用して JavaScript で要素クラス名を操作する方法の詳細な説明

目次1. classList属性2. 実用化以前の JavaScript では、最初にクラス属性を取...

CSS を解析して画像のテーマカラー機能を抽出する (ヒント)

背景すべては、WeChat 技術グループのクラスメートが「写真の主な色を取得する方法はあるか」と尋ね...

MySQL でローカル ユーザーを作成し、データベース権限を付与する方法の例

序文MySQL をインストールすると、通常はスーパーユーザー root を作成します。多くの人がこの...

MySql の忘れたパスワードの変更方法はバージョン 5.7 以上に適しています

1. まずmysqld.exeプロセスを停止します2. cmd を開き、mysql の bin ディ...