etcd クラスターをデプロイするための docker-compose の実装手順

etcd クラスターをデプロイするための docker-compose の実装手順

docker-compose.ymlを書く

バージョン: "3.0"

ネットワーク:
  etcd-net: # ネットワークドライバー: bridge # ブリッジモードボリューム:
  etcd1_data: # ローカルデータボリューム名にマウント ドライバー: local
  etcd2_データ:
    ドライバー: ローカル
  etcd3_データ:
    ドライバー: ローカル
###
### etcd その他の環境設定については、https://doczhcn.gitbook.io/etcd/index/index-1/configuration を参照してください。
###
サービス:
  etcd1:
    image: bitnami/etcd:latest # イメージ container_name: etcd1 # コンテナ名 --name
    restart: always # 常にネットワークを再起動します:
      - etcd-net # 使用されるネットワーク --network
    ポート: #ポートマッピング -p
      - 「20000:2379」
      - 「20001:2380」
    環境: # 環境変数 --env
      : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
      - etcd1_data:/bitnami/etcd # マウントされたデータボリューム etcd2:
    イメージ: bitnami/etcd:latest
    コンテナ名: etcd2
    再起動: 常に
    ネットワーク:
      - etcd-net
    ポート:
      - 「20002:2379」
      - 「20003:2380」
    環境:
      - ALLOW_NONE_AUTHENTICATION=はい
      -ETCD_NAME=etcd2
      -ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
      -ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      -ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      -ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
      -ETCD_INITIAL_CLUSTER_TOKEN=etcd クラスター
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380、etcd2=http://etcd2:2380、etcd3=http://etcd3:2380
      -ETCD_INITIAL_CLUSTER_STATE=新規
    ボリューム:
      - etcd2_data:/bitnami/etcd

  etcd3:
    イメージ: bitnami/etcd:latest
    コンテナ名: etcd3
    再起動: 常に
    ネットワーク:
      - etcd-net
    ポート:
      - 「20004:2379」
      - 「20005:2380」
    環境:
      - ALLOW_NONE_AUTHENTICATION=はい
      -ETCD_NAME=etcd3
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
      -ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      -ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      -ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
      -ETCD_INITIAL_CLUSTER_TOKEN=etcd クラスター
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380、etcd2=http://etcd2:2380、etcd3=http://etcd3:2380
      -ETCD_INITIAL_CLUSTER_STATE=新規
    ボリューム:
      - etcd3_data:/bitnami/etcd

docker-composeを実行する

[root@centos8 etcdtest]# ツリー
。
└── docker-compose.yml

ディレクトリ 0 個、ファイル 1 個
[root@centos8 etcdtest]# docker-compose up -d
[+] 4/4 実行中
 ⠿ ネットワーク etcdtest_etcd-net 作成時間 0.1 秒
 ⠿コンテナetcd3が0.6秒で開始されました
 ⠿コンテナetcd1が0.7秒で開始されました
 ⠿コンテナetcd2が0.7秒で開始されました
[root@centos8 etcdtest]# 

ビルドステータスを確認する

ノードの起動ステータスを確認する

[root@centos8 etcdtest]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
89469f98491f bitnami/etcd:latest "/opt/bitnami/script..." 54 秒前 53 秒前にアップ 0.0.0.0:20004->2379/tcp、:::20004->2379/tcp、0.0.0.0:20005->2380/tcp、:::20005->2380/tcp etcd3
5454f5a719a2 bitnami/etcd:latest "/opt/bitnami/script..." 54 秒前 53 秒前にアップ 0.0.0.0:20000->2379/tcp、:::20000->2379/tcp、0.0.0.0:20001->2380/tcp、:::20001->2380/tcp etcd1
bf989f9512b5 bitnami/etcd:latest "/opt/bitnami/script…" 54 秒前 53 秒前にアップ 0.0.0.0:20002->2379/tcp、:::20002->2379/tcp、0.0.0.0:20003->2380/tcp、:::20003->2380/tcp etcd2

マウントされたデータボリュームを表示する

[root@centos8 etcdtest]# docker ボリューム ls
ドライバーボリューム名
ローカル etcdtest_etcd1_data
ローカル etcdtest_etcd2_data
ローカル etcdtest_etcd3_data
[root@centos8 etcdtest]# docker で etcd1 を検査します 

「マウント」: [
    {
        「タイプ」:「ボリューム」、
        「名前」: 「etcdtest_etcd1_data」、
        「ソース」: 「/var/lib/docker/volumes/etcdtest_etcd1_data/_data」、
        「宛先」: 「/bitnami/etcd」、
        "ドライバー": "ローカル",
        "モード": "z",
        「RW」:真、
        「伝播」: 「」
    }
]

テストノード

etcd1からキーを書き込む

[root@centos8 etcdtest]# docker exec -it etcd1 bash
名前がありません!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "i am wxf"
わかりました

etcd2から値を読み取る

[wxf@centos8 ~]$ docker exec -it etcd2 bash
名前がありません!@bf989f9512b5:/opt/bitnami/etcd$ etcdctl get name
名前
私はwxfです

ビルド成功!

Golangとetcd間のシンプルな相互作用

パッケージメイン

輸入 (
 "コンテクスト"
 「fmt」
 「go.etcd.io/etcd/クライアント/v3」
 "時間"
)

関数main() {
 cli、エラー:= clientv3.New(clientv3.Config{
  エンドポイント: []文字列{"http://192.168.135.10:20000", "http://192.168.135.10:20002", "http://192.168.135.10:20004"},
  ダイヤルタイムアウト: 5 * 時間.秒、
 })
 err != nil の場合 {
  fmt.Printf("etcdへの接続に失敗しました、エラー:%v\n", err)
  戻る
 }
 cli.Close() を延期する
 fmt.Println("etcdへの接続成功")
 cli.Close() を延期する

 ウォッチ(cli)

 作成(cli)
 読む(cli)
 削除(cli)
 アップデート(cli)
 {} を選択
}

ウォッチ関数(cli *clientv3.Client) {
 rch := cli.Watch(context.Background(), "name") // 型 WatchChan <-chan WatchResponse
 wresp := range rch {の場合
  _ の場合、ev := 範囲 wresp.Events {
   fmt.Printf("タイプ: %s キー: %s 値: %s\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
  }
 }
 fmt.Println("出力")
}

関数Create(cli *clientv3.Client) {
 // 置く
 ctx、キャンセル:=context.WithTimeout(context.Background()、time.Second*5)
 _, err := cli.Put(ctx, "name", "wxf")
 キャンセル()
 err != nil の場合 {
  fmt.Printf("etcd への put に失敗しました、エラー:%v\n", err)
  戻る
 }
}

read(cli *clientv3.Client)関数{
 //得る
 ctx、キャンセル:=context.WithTimeout(context.Background()、time.Second*5)
 応答、エラー:= cli.Get(ctx, "name")
 キャンセル()
 err != nil の場合 {
  fmt.Printf("etcd からの取得に失敗しました、エラー:%v\n", err)
  戻る
 }
 _ の場合、ev := 範囲 resp.Kvs {
  fmt.Printf("タイプ: %s キー: %s 値: %s\n", "READ", ev.Key, ev.Value)
 }
}

関数Update(cli *clientv3.Client) {
 // 置く
 ctx、キャンセル:=context.WithTimeout(context.Background()、time.Second*5)
 _, err := cli.Put(ctx, "name", "xyy")
 キャンセル()
 err != nil の場合 {
  fmt.Printf("etcd への put に失敗しました、エラー:%v\n", err)
  戻る
 }
}

関数Delete(cli *clientv3.Client) {
 //削除
 ctx、キャンセル:=context.WithTimeout(context.Background()、time.Second*5)
 _, err := cli.Delete(ctx, "名前")
 キャンセル()
 err != nil の場合 {
  fmt.Printf("etcd からの削除に失敗しました、エラー:%v\n", err)
  戻る
 }
}

main.go を実行します

etcdへの接続成功
タイプ: PUT キー:name 値:wxf
タイプ: READ キー:name 値:wxf
タイプ: DELETE キー:name 値:
タイプ: PUT キー:name 値:xyy
タイプ: PUT キー:名前 値:ターミナルのテスト
タイプ: PUT キー:name 値:端末のテスト aabbccdd

名前がありません!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "test for terminator"
わかりました
名前がありません!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "test for terminator aabbccdd"
わかりました

etcd クラスターの docker-compose デプロイメントの実装手順に関するこの記事はこれで終わりです。etcd クラスターの docker-compose デプロイメントに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker Compose マルチコンテナデプロイメントの実装
  • docker-compose を使用して Clickhouse をすばやくデプロイする方法のチュートリアル
  • Docker Compose によるマルチコンテナ サービスの迅速な展開の詳細な例

<<:  UIエンジニアのキャリアについての私たちの考え

>>:  JavaScript関数の使い方の詳細な説明

推薦する

フロントエンドJavaScript ES6の詳細について

目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...

JavaScript でのモグラ叩きゲームの実装

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

JavaScript parseInt() と Number() の違いのケーススタディ

学習目標: parseInt() と Number() という 2 つの関数は、文字列をデータ型に変...

グループフィールドを 1 行に書き込むための mysql group_concat メソッドの例

この記事では、MySQL group_concat を使用してグループ化されたフィールドを 1 つの...

LinuxでifconfigとaddrがIPアドレスを表示できない問題を解決する

1. 仮想マシンにLinuxシステムをインストールし、仮想マシンを起動し、rootとパスワードを入力...

ApacheとTomcatによるクラスタ環境構築プロセスの分析

実際、Apacheクラスタを構築するのは難しくありません。私もインターネットで情報を見つけて自分で設...

Linux 環境に MySQL 8.0 をインストールするプロセスの紹介

目次序文1. Linux は yum ソースを変更します (MYSQL のインストールが遅い場合は試...

jsは動的にテーブルを生成します(ノード操作)

この記事の例では、テーブルを動的に生成するjsの具体的なコードを参考までに共有しています。具体的な内...

MySQL 正規表現 (regexp と rlike) の検索機能の例分析

この記事では、例を使用して MySQL 正規表現 (regexp および rlike) の検索機能を...

JSメモリ空間の詳細な説明

目次概要1. スタックとヒープ2. 変数オブジェクトと基本データ型3. 参照データ型とヒープメモリメ...

Vue3でelement-plusを使用する方法の詳細な説明

目次1. インストール2. main.jsにインポートする3. 使用Vue3がリリースされてからしば...

Linux の操作とメンテナンスの基本 httpd 静的 Web ページ チュートリアル

目次1. ウェアハウスを使用してhttpd lrzsz解凍ファイルを作成する2. ソースコードファイ...

HTMLは実際にはいくつかの重要なタグを学ぶアプリケーションです

「これは革命になるだろう」という記事が出たあと。業界の皆様に認知され、もちろん内外からの評価もいただ...

Windows Server 2016 リモート デスクトップ サービスを展開するためのクイック スタート ガイド

現在、2016サーバーは、win2008や2012よりも優れたマルチサイトhttpsサービスをサポー...