Implementierungsschritte für Docker-Compose zum Bereitstellen eines etcd-Clusters

Implementierungsschritte für Docker-Compose zum Bereitstellen eines etcd-Clusters

Schreiben Sie docker-compose.yml

Version: "3.0"

Netzwerke:
  etcd-net: # Netzwerktreiber: bridge # Bridge-Modus-Volumes:
  etcd1_data: # Auf dem lokalen Datenträger mit dem Namen Treiber bereitgestellt: local
  etcd2_Daten:
    Treiber: lokal
  etcd3_Daten:
    Treiber: lokal
###
### etcd Weitere Umgebungskonfigurationen finden Sie unter: https://doczhcn.gitbook.io/etcd/index/index-1/configuration
###
Leistungen:
  etcd1:
    Bild: bitnami/etcd:latest # Bildcontainername: etcd1 # Containername --name
    restart: always # Netzwerke immer neu starten:
      - etcd-net # verwendetes Netzwerk --network
    Ports: #Portzuordnung -p
      - "20000:2379"
      - "20001:2380"
    Umgebung: # Umgebungsvariablen --env
      :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::
      - etcd1_data:/bitnami/etcd # Eingebundenes Datenvolumen etcd2:
    Bild: bitnami/etcd:latest
    Containername: etcd2
    Neustart: immer
    Netzwerke:
      - etcd-Netz
    Häfen:
      - „20002:2379“
      - „20003:2380“
    Umfeld:
      - ALLOW_NONE_AUTHENTICATION=ja
      -ETCD_NAME=usw.2
      -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=usw.-Cluster
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      -ETCD_INITIAL_CLUSTER_STATE=neu
    Bände:
      - etcd2_data:/bitnami/etcd

  etcd3:
    Bild: bitnami/etcd:latest
    Containername: etcd3
    Neustart: immer
    Netzwerke:
      - etcd-Netz
    Häfen:
      - „20004:2379“
      - „20005:2380“
    Umfeld:
      - ALLOW_NONE_AUTHENTICATION=ja
      -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=usw.-Cluster
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      -ETCD_INITIAL_CLUSTER_STATE=neu
    Bände:
      - etcd3_data:/bitnami/etcd

Führen Sie docker-compose aus

[root@centos8 etcdtest]# Baum
.
└── docker-compose.yml

0 Verzeichnisse, 1 Datei
[root@centos8 etcdtest]# docker-compose up -d
[+] Laufen 4/4
 ⠿ Netzwerk etcdtest_etcd-net Erstellt 0,1 s
 ⠿ Container etcd3 gestartet 0,6 s
 ⠿ Container etcd1 gestartet 0,7 s
 ⠿ Container etcd2 gestartet 0,7 s
[root@centos8 etcdtest]# 

Überprüfen des Build-Status

Überprüfen des Startstatus des Knotens

[root@centos8 etcdtest]# docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
89469f98491f bitnami/etcd:latest "/opt/bitnami/script..." vor 54 Sekunden Vor 53 Sekunden aktiv 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..." vor 54 Sekunden Vor 53 Sekunden aktiv 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…" vor 54 Sekunden Vor 53 Sekunden aktiv 0.0.0.0:20002->2379/tcp, :::20002->2379/tcp, 0.0.0.0:20003->2380/tcp, :::20003->2380/tcp etcd2

Anzeigen der bereitgestellten Datenträger

[root@centos8 etcdtest]# Docker-Volume ls
TREIBERVOLUMENNAME
lokale etcdtest_etcd1_data
lokale etcdtest_etcd2_data
lokale etcdtest_etcd3_data
[root@centos8 etcdtest]# Docker inspizieren etcd1 

"Reittiere": [
    {
        "Typ": "Volumen",
        "Name": "etcdtest_etcd1_data",
        "Quelle": "/var/lib/docker/volumes/etcdtest_etcd1_data/_data",
        "Ziel": "/bitnami/etcd",
        "Treiber": "lokal",
        "Modus": "z",
        "RW": wahr,
        "Ausbreitung": ""
    }
]

Testknoten

Schreiben Sie einen Schlüssel von etcd1

[root@centos8 etcdtest]# docker exec -it etcd1 bash
Ich habe keinen Namen!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "ich bin wxf"
OK

Lesen Sie einen Wert von etcd2

[wxf@centos8 ~]$ docker exec -it etcd2 bash
Ich habe keinen Namen!@bf989f9512b5:/opt/bitnami/etcd$ etcdctl get name
Name
ich bin wxf

Bau erfolgreich!

Einfache Interaktion zwischen Golang und etcd

Paket Haupt

importieren (
 "Kontext"
 "fmt"
 „go.etcd.io/etcd/client/v3“
 "Zeit"
)

Funktion main() {
 cli, err := clientv3.Neu(clientv3.Config{
  Endpunkte: []string{"http://192.168.135.10:20000", "http://192.168.135.10:20002", "http://192.168.135.10:20004"},
  DialTimeout: 5 * Zeit.Sekunde,
 })
 wenn err != nil {
  fmt.Printf("Verbindung zu etcd fehlgeschlagen, Fehler: %v\n", Fehler)
  zurückkehren
 }
 cli.Close() verschieben
 fmt.Println("Verbindung zu etcd erfolgreich hergestellt")
 cli.Close() verschieben

 gehe zu Watch (cli)

 Erstellen (cli)
 Lesen (cli)
 Löschen (CLI)
 Aktualisieren (CLI)
 wählen {}
}

Funktion Watch(cli *clientv3.Client) {
 rch := cli.Watch(context.Background(), "name") // Typ WatchChan <-chan WatchResponse
 für wresp := Bereich rch {
  für _, ev := Bereich wresp.Events {
   fmt.Printf("Typ: %s Schlüssel: %s Wert: %s\n", ev.Typ, ev.Kv.Schlüssel, ev.Kv.Wert)
  }
 }
 fmt.Println("aus")
}

Funktion Erstellen(cli *clientv3.Client) {
 // setzen
 ctx, Abbrechen := Kontext.MitTimeout(Kontext.Hintergrund(), Zeit.Sekunde*5)
 _, err := cli.Put(ctx, "Name", "wxf")
 stornieren()
 wenn err != nil {
  fmt.Printf("Einfügen in etcd fehlgeschlagen, Fehler: %v\n", Fehler)
  zurückkehren
 }
}

Funktion Lesen(cli *clientv3.Client) {
 //erhalten
 ctx, Abbrechen := Kontext.MitTimeout(Kontext.Hintergrund(), Zeit.Sekunde*5)
 bzw., err := cli.Get(ctx, "Name")
 stornieren()
 wenn err != nil {
  fmt.Printf("Abrufen von etcd fehlgeschlagen, Fehler: %v\n", Fehler)
  zurückkehren
 }
 für _, ev := Bereich bzw. Kvs {
  fmt.Printf("Typ: %s Schlüssel: %s Wert: %s\n", "LESEN", ev.Schlüssel, ev.Wert)
 }
}

Funktion Update(cli *clientv3.Client) {
 // setzen
 ctx, Abbrechen := Kontext.MitTimeout(Kontext.Hintergrund(), Zeit.Sekunde*5)
 _, err := cli.Put(ctx, "Name", "xyy")
 stornieren()
 wenn err != nil {
  fmt.Printf("Einfügen in etcd fehlgeschlagen, Fehler: %v\n", Fehler)
  zurückkehren
 }
}

Funktion Löschen(cli *clientv3.Client) {
 //entf
 ctx, Abbrechen := Kontext.MitTimeout(Kontext.Hintergrund(), Zeit.Sekunde*5)
 _, err := cli.Delete(ctx, "Name")
 stornieren()
 wenn err != nil {
  fmt.Printf("Löschen aus etcd fehlgeschlagen, Fehler: %v\n", Fehler)
  zurückkehren
 }
}

Führen Sie main.go aus.

Verbindung zu etcd erfolgreich hergestellt
Typ: PUT Schlüssel:Name Wert:wxf
Typ: READ Schlüssel:Name Wert:wxf
Typ: DELETE Schlüssel:Name Wert:
Typ: PUT Schlüssel:Name Wert:xyy
Typ: PUT Schlüssel: Name Wert: Test für Terminal
Typ: PUT Schlüssel: Name Wert: Test für Terminal aabbccdd

Ich habe keinen Namen!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl setze den Namen „Test für Terminal“
OK
Ich habe keinen Namen!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "test for terminal aabbccdd"
OK

Dies ist das Ende dieses Artikels über die Implementierungsschritte der Docker-Compose-Bereitstellung eines etcd-Clusters. Weitere relevante Inhalte zur Docker-Compose-Bereitstellung eines etcd-Clusters finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Implementierung der Docker Compose-Mehrcontainerbereitstellung
  • Tutorial zum schnellen Bereitstellen von Clickhouse mit Docker-Compose
  • Detailliertes Beispiel für die schnelle Bereitstellung von Multi-Container-Diensten mit Docker Compose

<<:  Unsere Gedanken zur Karriere als UI-Ingenieur

>>:  Detaillierte Erklärung zur Verwendung von JavaScript-Funktionen

Artikel empfehlen

Detaillierte Erklärung zur Verwendung des Arguments-Objekts in JavaScript

Inhaltsverzeichnis Vorwort Grundlegende Konzepte ...

MySQL bedingte Abfrage und/oder Verwendung und Priorität Beispielanalyse

Dieser Artikel veranschaulicht anhand von Beispie...

Allgemeine Betriebsbefehle von MySQL im Linux-System

Aufschlag: # chkconfig --list Alle Systemdienste ...

Detaillierte Erklärung gängiger Docker Compose-Befehle

1. Die Verwendung von Docker Compose ist der Verw...

Verwendung der MySQL SHOW STATUS-Anweisung

Um die Leistung von MySQL anzupassen und den Dien...

Detaillierte Erläuterung des Vue-Routing-Routers

Inhaltsverzeichnis Routing-Plugins modular nutzen...

Detaillierte Erklärung der regulären Ausdrücke von Nginx

Nginx (Engine x) ist ein leistungsstarker HTTP- u...

Ein Artikel zum Erlernen von CSS3-Bildrändern

Mit der CSS3-Eigenschaft „border-image“ können Si...

Grundlegende Hinweise zu HTML und CSS (unbedingt für das Frontend lesen)

Als ich zum ersten Mal mit HTML in Berührung kam,...

Angular Dependency Injection erklärt

Inhaltsverzeichnis Überblick 1. Abhängigkeitsinje...