Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

1. Dockerコンサルの概要

コンテナサービスの更新と検出: 最初に検出してから更新します。検出されるのはバックエンドノード (レジストラ) 上のコンテナの変更であり、更新されるのは nginx 構成ファイル (エージェント) です。

レジストラ: Consul によって Docker コンテナにインストールされるスパイです。監視ノード上のコンテナの変更 (増加、減少、またはダウンタイム) を監視するために使用されます。変更があると、この情報を通知し、Consul サーバーに登録します (コールバックとコルーチンを使用するため、遅延とリソースの消費は非常に小さくなります)。登録リストが変更されると、Consul サーバーはエージェントに登録情報を伝えます。

エージェント: consul テンプレートを制御するために使用され、テンプレート コンポーネントを使用して nginx.conf に接続します。テンプレートには変数が満載で、consul サーバーに登録した後、変数を使用してバックエンドをロードします。サーバーはエージェントに情報を伝え、エージェントとテンプレートが接続され、テンプレートに書き込みます。テンプレートにはミラーがあり、更新後に、フロントエンド nginx によって nginx.conf のサブ構成ファイルとして認識されます。consul エージェントは、nginx.conf 構成ファイルの再ロードと変更の識別を制御します。これは、バックエンド ノードを識別することと同等であり、アドレス プール内の独自のバックエンド リソースを動的に調整できます。

マーク

Consulの特徴

  • ヘルスチェックをサポートし、キーと値のペアの保存を可能にする
  • Golong言語をベースにしており、移植性が高い
  • ACLアクセス制御をサポート

2. nginxとconsulをベースにした自動検出と高可用性のDockerサービスアーキテクチャを構築する

マーク

1. プロジェクト要件

  • Dockerを使用して、Consul、Consulテンプレート、Registrator、Nginxを組み合わせて、価値がありスケーラブルなサービスアーキテクチャを構築します。
  • このアーキテクチャからサービスを追加または削除する場合、構成を書き換えたり、サービスを再起動したりする必要はありません。すべてが正常に実行され、自動化された運用とメンテナンスが実現します。

2. 環境整備

ホストIPアドレスインストールが必要なソフトウェア
マスターノード192.168.126.11 docker-ce、consul、consul-template、nginx
nginx 192.168.126.12ドケルセ

3. 展開手順

#両方のノードにDocker-ceをインストールします。ファイアウォールをオフにすることを忘れないでください。systemctl stop firewalld && systemctl enable firewalld
setenforce 0 && sed -i "s/SELINUX=*/SELINUX=disabled/g" /etc/selinux/config

①マスターノードにconsulをデプロイする

[root@xjj ~]# mkdir /consul
[root@xjj ~]# cd /consul/
[root@xjj 領事]# rz 
[root@xjj 領事]# ls
コンスル_0.9.2_linux_amd64.zip
[root@xjj consul]# consul_0.9.2_linux_amd64.zip を解凍 -d /usr/bin/
アーカイブ: consul_0.9.2_linux_amd64.zip
  膨張中: /usr/bin/consul         
[root@xjj 領事]# 領事エージェント \
> -サーバー\
> -ブートストラップ\
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.126.11 \
> -クライアント=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
[1] 100683
[root@xjj 領事]# ジョブ -l
[1]+ 100683 consulエージェントを実行中 -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.126.11 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &
[root@xjj 領事]# 領事メンバー
ノード アドレス ステータス タイプ ビルド プロトコル DC
consul-server01 192.168.126.11:8301 稼働中のサーバー 0.9.2 2 dc1
[root@xjj consul]# consul info|grep リーダー
        リーダー = 真
        リーダーアドレス = 192.168.126.11:8300
[root@xjj 領事]# netstat -natp|grep 8500
tcp 0 0 127.0.0.1:34120 127.0.0.1:8500 TIME_WAIT -                   
tcp 0 0 127.0.0.1:34118 127.0.0.1:8500 TIME_WAIT -                   
tcp6 0 0 :::8500 :::* LISTEN 100683/consul 

パラメータ

[root@xjj consul]# consul agent \ #エージェントの設定> -server \ #サービス機能> -bootstrap \ #リーダー選挙に参加> -ui \ #Web アクセス インターフェイスを提供> -data-dir=/var/lib/consul-data \ #プロキシ ストレージ データ ディレクトリを提供> -bind=192.168.126.16 \ #ローカル アドレスをバインド> -client=0.0.0.0 \ #クライアント アドレス (すべて)
> -node=consul-server01 &> /var/log/consul.log & #ノード名を定義し、ログをログに出力し、バックグラウンドで実行します jobs -l #現在の端末によってバックグラウンドに投入された作業を表示し、プロセスの PID 番号を一覧表示します consul Members #クラスター情報を表示します consul info|grep leader #管理情報を表示します。leader はリーダーです #クラスター情報は HTTP API を通じて取得できます:

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

②nginxサーバーがconsulに接続し、nginxコンテナサービスを作成します

[root@localhost ~]# docker run -d \
> --name=レジストラ \
> --net=ホスト\
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=常に\
> gliderlabs/registrator:最新\
> -ip=192.168.126.12 \
> 領事://192.168.126.11:8500
-----
ダイジェスト: sha256:6e708681dd52e28f4f39d048ac75376c9a762c44b3d75b2824173f8364e52c10
ステータス: gliderlabs/registrator:latest の新しいイメージをダウンロードしました
db4cb9d6a56ce8b9a2155b1113e48e6c974889cd4cca363b410c116b75be5d59
[root@localhost ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
db4cb9d6a56c gliderlabs/registrator:latest "/bin/registrator -i…" 5秒前 5秒前 registrator

#サービス検出機能が正常かどうかをテストするためのコンテナを作成します。

[root@localhost ~]# docker run -itd -p 81:80 --name xjj01 -h xcf01 nginx #-h オプションは指定されたホストのホスト名を示します [root@localhost ~]# docker run -itd -p 82:80 --name xjj02 -h xcf02 nginx
[root@localhost ~]# docker run -itd -p 83:80 --name xjj03 -h xcf03 httpd
[root@localhost ~]# docker run -itd -p 84:80 --name xjj0 -h xcf04 httpd
[root@localhost ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
8940a9b03dbb httpd "httpd-foreground" 4 秒前 3 秒前にアップ 0.0.0.0:84->80/tcp, :::84->80/tcp xjj0
9ac4d089eb14 httpd "httpd-foreground" 39 秒前 38 秒前にアップ 0.0.0.0:83->80/tcp, :::83->80/tcp xjj03
3d626fd61639 nginx "/docker-entrypoint.…" 25 分前 xjj02 作成
263aa9deb346 nginx "/docker-entrypoint.…" 26 分前 26 分前にアップ 0.0.0.0:81->80/tcp, :::81->80/tcp xjj01
db4cb9d6a56c gliderlabs/registrator:latest "/bin/registrator -i…" 29 分前 29 分前 registrator


ブラウザアクセステスト: `192.168.126.11:8500`

マーク

[root@xjj 領事]# curl 127.0.0.1:8500/v1/catalog/services
{"consul":[],"httpd":[],"nginx":[]}[root@xjj consul]# 

③Consulクラスタは、コンテナの自動参加を可能にするためにconsul-templateを追加します。

Consul-Template は、Consul クラスタ情報をリアルタイムで照会し、ファイルシステム上の指定されたテンプレートを任意の数更新し、構成ファイルを生成し、更新が完了したら、Consul 内のサービスディレクトリ、キー、キー値などを照会できるデーモンです。

cd領事/
vim nginx.ctmpl

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

サーバー{
 100を聞く;
 サーバー名 ローカルホスト 192.168.126.11;
 アクセスログ /var/log/nginx/lic.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://http_backend;
  }     
}
yum -y gcc pcre-devel zlib-devel をインストールします
nginx-1.12.2 をアンインストールします。
tar zxvf nginx-1.12.2.tar.gz -C /opt
/opt/nginx-1.12.10 をインストールします

./configure --prefix=/usr/local/nginx

作成 && インストール

--
vim /usr/local/nginx/conf/nginx.conf
No. 19 include vhost/*.conf; #19 行目を追加、仮想ホストディレクトリ [root@xjj nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost
'//仮想ホストディレクトリを作成する'
[root@xjj nginx-1.12.2]# mkdir /var/log/nginx
'//ログファイルディレクトリを作成する'
[root@xjj nginx-1.12.2]# /usr/local/nginx/sbin/nginx 
'// nginx を起動します'
[root@xjj nginx-1.12.2]# netstat -natp|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 104348/nginx: マスター

--

#テンプレートを開始し、テンプレート ファイルと生成パスを指定します。
[root@xjj consul]# consul-template -consul-addr 192.168.126.16:8500 -template "/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/xjj.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
# テンプレート パス /consul/nginx.ctmpl を指定し、それを /usr/locla/nginx/conf/vhost/xjj.conf に生成し、nginx -s reload をリロードして、ログ レベルを定義し、監視状態に入ります --
#マスターノードは新しいターミナルを開いて構成ファイルを表示します。
[root@xjj ~]# cat /usr/local/nginx/conf/vhost/xjj.conf
#このプールのウェブページにアクセスするには、192.168.126.11:8080 にアクセスする必要があり、これはポーリングメカニズムです。ここでアクセスできない場合は、nginx をリロードして再試行してください。upstream http_backend {
  
   サーバー 192.168.126.12:81;
  
   サーバー 192.168.126.12:82;
  
}

サーバー{
  8080を聴く;
  サーバー名 ローカルホスト 192.168.126.11;
  アクセスログ /var/log/nginx/xjj.cn-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://http_backend;
	}
}

④自動更新をテストするために新しいnginxコンテナノードを追加する

[root@localhost ~]# docker run -itd -p 85:80 --name xjj05 -h xcf05 nginx #サービス検出と構成更新機能をテストするために nginx コンテナ ノードを追加します [root@xjj ~]# cat /usr/local/nginx/conf/vhost/xcf.conf 
アップストリーム http_backend { 
        
        サーバー 192.168.126.12:81;
          
        サーバー 192.168.126.12:82;
          
        サーバー 192.168.126.12:85;
          
}

サーバー{
  8080を聴く;
  サーバー名 ローカルホスト 192.168.126.11;
  アクセスログ /var/log/nginx/xcf.cn-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; }       
}

⑤ プロキシサーバーへのアクセスがプロキシアクセスポーリングを完了できるかテストする

http://192.168.126.11:80/

docker ログ -f xjj01
docker ログ -f xjj02
docker ログ -f xjj05

マーク

⑥consulマルチノード構成

#既存の Docker 環境を持つサーバーを既存のクラスターに追加します。

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


 - 説明する - 
-enable-script-checks=true: チェックサービスを有効にする -datacenter: データセンター名 -join: 既存のクラスターに参加する

以上で、Docker-Consul の概要とクラスター環境の構築手順(画像とテキスト)についての説明は終了です。Docker-Consul クラスター環境の構築についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker compose を使用して consul クラスタ環境を構築する例

<<:  CentOS に MySQL 5.5 をインストールするための完全な手順

>>:  vue-amap のインストールと使用手順

推薦する

CSS コンテンツ属性を使用して、マウスホバープロンプト (ツールチップ) 効果を実現します。

なぜこのような効果を実現するのでしょうか。実は、この効果もタイトルプロンプトから派生したものですが、...

Node.js で Bash スクリプトを書くための究極のソリューション

目次序文zxライブラリ$`コマンド` CD()フェッチ()質問()寝る()スローしない()チョークフ...

Vue で円形プログレスバーを実装する例

データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...

MySQLがOracleのnvlと同様の機能を持つことができるかどうかについての簡単な議論

isnullの代わりにifnullを使用するisnull は、null かどうかを判断するために使用...

IDEA が MySQL ポート番号占有に接続できない問題の解決方法

コマンドラインでMYSQLに正常にログインでき、NavicatもMySQLに正常に接続できますが、I...

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

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

tdが空の場合に境界線を表示する方法

以前、CSS を使用してテーブルの border + bordercolordark + borde...

Ubuntu 18.04にmysql5.7をインストールする

Ubuntu 18.04では参考までにmysql 5.7をインストールします。具体的な内容は以下のと...

MySQLの権限とインデックスの詳細な説明

mysql の権限とインデックスmysql の最高権限ユーザーは root です。 CREATE U...

VueはWebSocketを使用してチャット機能をシミュレートします

この効果は、2つのブラウザが互いにシミュレートしていることを示しています 1. シミュレートされたノ...

WindowsでMysql5.7.17のインストールと起動に失敗する問題を解決する

マシンに初めて MySQL をインストールします。オペレーティングシステムはwin7ですmysqlの...

Vueのコンポーネント値の転送から始まるオブザーバーモードの詳細な説明

目次オブザーバーパターンVue パス値最初のステップは、main.jsにバスを登録することです。 2...

最新の仮想マシン VMware 14 インストール チュートリアル

まず、VMware 14のアクティベーションコードをお渡ししますFF31K-AHZD1-H8ETZ-...

49 個の JavaScript のヒントとコツ

目次1. js整数の演算2. ネイティブアラートを書き換えてポップアップボックスの数を記録する3. ...

Vuexの役割についての深い理解

目次概要コンポーネント間でデータを共有する方法Vuex の原則の紹介Vuexはコンポーネントのグロー...