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関数の使い方の詳細な説明

推薦する

MySQL EXPLAIN ステートメントの使用例

目次1. 使用方法2. 出力結果1.id 2.選択タイプ3.表4.パーティション5.タイプ6.可能な...

Linuxサーバ侵入緊急対応記録(概要)

最近、お客様から支援の依頼を受けました。管理されている通信コンピュータ ルームから、サーバーの 1 ...

Vue の基本的な手順の例のグラフィック説明

目次1. v-on指令1. 基本的な使い方2. 糖衣構文3. イベントパラメータ4. イベント修飾子...

MySQLコマンドプロンプトで入力エラーが発生したときに前のコマンドを修正する方法

目次現在の問題解決プロセス具体的な手順解決した事件現在の問題MySQL コマンド プロンプトに複数行...

Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリと my-default.ini がなく、サービスが起動できない問題の簡単な解決方法 (問題概要)

私は SQL の初心者で、オープンソースのインストールは非常に簡単だと思っていましたが、その過程でい...

HTML Webページの例を使用してヘッドエリアコードの意味を説明する

例を使って、Webページのヘッダー情報の意味を理解しましょう。 <!DOCTYPE HTML ...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

海外でダウンロードできる25個の新鮮で便利なアイコンセット

1. Eコマースアイコン2. アイコンスイーツ2 3. 携帯電話アイコンパック4. 旗アイコンセット...

Vueリストデータを削除した後、ページを自動的に更新する方法と更新方法の詳細な説明

問題の説明:フロントエンドがデータの一部を削除したり、新しいデータを追加したりすると、バックエンドの...

WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。

1. OpenSSL公式サイト公式ダウンロードアドレス: https://www.openssl....

mysql5.6 マスタースレーブ設定と非同期の問題の詳細な説明

目次1. MySQL マスタースレーブレプリケーションの原理2. MySQLのコンパイルとインストー...

よくある HTML タグの記述エラー

HTML Police がコードを調べて意味のないタグをすべて見つけ出すので、注意を払う必要がありま...

Mysql-connector-java ドライバのバージョン問題の概要

Mysql-connector-java ドライバのバージョンの問題私のデータベースのバージョンは ...

mysql エラー 1033 を解決する方法: ファイル内の情報が正しくありません: 'xxx.frm'

問題の説明1. 収集ステーションのデータベース2. データが無い状態での移動は問題ありませんが、デー...

MySQL スライディング集計/年初来集計の原理と使用例の分析

この記事では、例を使用して、MySQL スライディング集計/年初来集計の原理と使用方法を説明します。...