Docker ベースの Etcd 分散デプロイメントの方法と手順

Docker ベースの Etcd 分散デプロイメントの方法と手順

1. 環境整備

1.1 基本環境

NTP設定: 省略 #時間の一貫性を確保するためにNTPサービスを設定することをお勧めします

etcd バージョン: v3.3.9

ファイアウォールとSELinux: ファイアウォールとSELinuxを無効にする

名前
住所
ホスト名
述べる
等d1
172.24.8.71
等d1.example.com
関連するIP情報を保存するために使用されます
ドッカー01
172.24.8.72
docker01.example.com
ドッカー02
172.24.8.73
docker02.example.com

# ホスト名ctl set-hostname etcd1.example.com
# ホスト名ctl set-hostname docker01.example.com
# ホスト名ctl set-hostname docker02.example.com

ヒント: ホスト名は必須ではありません。

1.2 Docker環境

上記のすべてのノードには Docker がインストールされています。詳細については、002.Docker のバージョンとインストールを参照してください。

2. etcdノードのデプロイメント

ヒント: この環境はすべて Docker 化されています。つまり、etcd サービスも Docker 形式で存在します。

2.1 etcdの基本設定

# mkdir -p /var/log/etcd/ #etcd ログを保存するためのディレクトリを作成することをお勧めします# mkdir -p /data/etcd #別の etcd データ ディレクトリを作成することをお勧めします# export HOST_1=172.24.8.71 #etcd ノードの IP アドレスを設定します
# export DATA_DIR=/data/etcd #クラスターのetcdデータノードを設定します # REGISTRY=quay.io/coreos/etcd #このウェアハウスを使用することをお勧めします # ETCD_VERSION=latest #etcdのバージョンを設定します # export NAME_1=etcd1 #etcdノードの名前を設定します
# docker ボリューム作成 --name etcd-data

ヒント: 上記のすべての操作はすべてのノードで実行する必要があります。

2.3 docker etcdクラスターを起動する

[root@etcd1 ~]# docker run \
 -p 2379:2379 \
 -p 2380:2380 \
 --volume=${DATA_DIR}:/etcd-data \
 --name etcd ${REGISTRY}:${ETCD_VERSION} \
 /usr/local/bin/etcd \
 --data-dir=/etcd-data --name ${NAME_1} \
 --initial-advertise-peer-urls http://${HOST_1}:2380 --listen-peer-urls http://0.0.0.0:2380 \
 --advertise-client-urls http://${HOST_1}:2379 --listen-client-urls http://0.0.0.0:2379 \
 --initial-cluster ${NAME_1}=http://${HOST_1}:2380

ヒント: quay.io/coreos/etcd イメージは中国ではプルできない可能性がありますが、外部ノードからプルしてクラスター ノードに scp することはできます。

2.4 確認と検証

 [root@etcd1 ~]# docker ps 

 

 [root@etcd1 ~]# docker exec -it bcb96fb0f987 /usr/local/bin/etcdctl cluster-health 

[root@etcd1 ~]# docker exec -it bcb96fb0f987 /usr/local/bin/etcdctl --endpoints=http://${HOST_1}:2379 メンバーリスト

3つのDockerホストノード構成

3.1 docker01の設定

[root@docker01 ~]# vi /etc/sysconfig/docker
オプション = '--cluster-store=etcd://172.24.8.71:2379 --cluster-advertise=172.24.8.72:2379'
[root@docker01 ~]# systemctl dockerを再起動します

3.2 docker02の設定

[root@docker02 ~]# vi /etc/sysconfig/docker
オプション = '--cluster-store=etcd://172.24.8.71:2379 --cluster-advertise=172.24.8.73:2379'
[root@docker02 ~]# systemctl dockerを再起動します

3.3 オーバーレイネットワークの作成

[root@docker01 ~]# docker ネットワーク作成 -d オーバーレイ overlaynet1
418654e0092f5d1c3e4bf2b9ee73cdd22932dd60fecf12d7a3b024818118244b
[root@docker01 ~]# docker ネットワーク検査 overlaynet1 

[root@docker02 ~]# docker ネットワーク検査 overlaynet1 

ヒント: docker01 と docker02 の両方のホストで、docker01 に作成されたオーバーレイ ネットワークを確認します。両方が存在する場合、ネットワーク データは etcd を介してローカルではなく分散されていることを意味します。

3.4 テストネットワーク

[root@docker01 ~]# docker run -d --name Container01 --network overlaynet1 training/webapp python app.py
[root@docker02 ~]# docker run -d --name Container02 --network overlaynet1 training/webapp python app.py
[root@docker01 ~]# docker exec -it 73e984a5528a /bin/bash
root@73e984a5528a:/opt/webapp# ifconfig 

root@73e984a5528a:/opt/webapp# ルート -n 


[root@docker02 ~]# docker exec -it 89eac9521743 /bin/bash
root@89eac9521743:/opt/webapp# ifconfig 

例:

  • すべてのコンテナ ペアには eth0 と eth1 の 2 つのネットワーク カードがあります。
  • eth1 のネットワークは内部ネットワークセグメント、つまり通常の NAT モードです。
  • eth0 はオーバーレイ ネットワーク セグメント (オーバーレイ ネットワーク) に割り当てられた IP アドレスであり、MTU は 1500 ではなく 1450 です。
  • 同じオーバーレイ ネットワーク内のコンテナー間の通信のみが eth0 を経由し、その他のすべての通信は eth1 を経由します。
[root@docker01 ~]# brctl show 

[root@docker01 ~]# dockerネットワークls 


その他の参考資料:

  • Docker は各ノードに 2 つの Linux ブリッジを作成します。1 つはオーバーレイ ネットワーク用、もう 1 つは非オーバーレイ NAT ネットワーク用です (docker_gwbridge)。
  • コンテナからオーバーレイ ネットワーク内の他のコンテナへのネットワーク トラフィックはコンテナのオーバーレイ ネットワーク カード (eth0) を通過し、その他のネットワーク トラフィックはコンテナの NAT ネットワーク カード (eth1) を通過します。
  • 現在、Docker によって作成される vxlan トンネルの ID 範囲は 256 から 1000 であるため、最大 745 個のネットワークを作成できます。したがって、この例の vxlan トンネルに使用される ID は 256 です。
  • Docker vxlan ドライバーは UDP ポート 4789 を使用します。
  • オーバーレイ ネットワーク モデルの基盤となるレイヤーでは、メッセージの同期のために、consul や etcd に似た KV ストレージ システムが必要です。
  • Docker オーバーレイはマルチキャストを使用しません。
  • オーバーレイ ネットワーク内のコンテナーは、仮想の大規模なレイヤー 2 ネットワーク内にあります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker で Selenium グリッド分散環境を構築する実用的な方法
  • Selenium+testng を使用して Docker で Web 自動化を実現する方法
  • DockerでのinfluxDB分散時系列データベースのインストールと関連操作について簡単に説明します。
  • Docker Swarm を使用して分散クローラー クラスターを構築する例
  • Docker を使用して分散アプリケーション機能を実装する方法のチュートリアル
  • Docker ベースの急増する分散マイクロサービス エンジンのデプロイ方法の詳細説明
  • Docker を使用して Hadoop 分散クラスターを構築する方法の詳細な説明
  • Docker ベースの Selenium 分散環境の構築

<<:  Vue3 でモバイル ログインおよび登録モジュールをエレガントに実装する方法

>>:  MySQL でグループ化した後、各グループの最大値を取得する詳細な例

推薦する

require/import キーワードを使用して v-for ループでローカル画像をインポートするいくつかの方法

目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...

大規模な Vue.js プロジェクトの構築と維持のための 10 のベスト プラクティス

目次1. スロットを使用してコンポーネントを理解しやすくし、より強力にする2. Vuexストアを正し...

Mysqlデータテーブルでワームレプリケーションを使用する方法

簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...

CSS の境界線を通して三角形と矢印を実装するサンプルコード

1. CSS ボックスモデルボックスには、余白、境界線、パディング、コンテンツが含まれます境界線の接...

Linux での MySQL のインストールに関する詳細なチュートリアル

1. MySQLサービスをシャットダウンする# service mysqld stop 2. rpm...

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

docker-maven-pluginプラグインは対応するjarパッケージを取得できません

docker-maven-plugin プラグインを使用する場合、Maven は対応する jar パ...

モバイル開発におけるHTML5開発の現状を深く理解する

「私たちは次の一連のモバイル製品を HTML5 で作成しています。」 「ええ、最近は多くの人が Ap...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

LinuxにMySQLをインストールし、外部ネットワークアクセスを構成する例

設定手順1. DNSが設定されているかどうかを確認するDNSが設定されていない場合は、前の記事を参照...

Centos7のFirewalldファイアウォールの基本コマンドの詳細な説明

1. Linuxファイアウォールの基礎Linux ファイアウォール システムは主にネットワーク層で動...

SQL の左結合と右結合の原理と例の分析

テーブルが 2 つあり、テーブル A のレコードがテーブル B に存在しない可能性があります。左結合...

印刷広告を成功させるための「3I」基準

国内の多くの広告主にとって、印刷広告の制作と評価は、しばしばかなり主観的です。自分の感情や美的感覚に...

MySQL インデックス プッシュダウンの詳細

目次1. 左端接頭辞原則2. 表に戻る3. インデックスプッシュダウン序文:インデックス プッシュダ...

JavaScript における BOM と DOM の詳細な説明

目次BOM (ブラウザ オブジェクト モデル) 1. ウィンドウブラウザのウィンドウサイズを取得する...