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

MySQL-Optimierungslösung: Aktivieren Sie das Protokoll für langsame Abfragen

Inhaltsverzeichnis Vorwort Einrichten der Protoko...

Zusammenfassung der bei der Arbeit häufig verwendeten Linux-Befehle

Verwenden Sie bei der Arbeit mehr Open-Source-Too...

Die Reihenfolge der Ereignisausführung in der Knotenereignisschleife

Inhaltsverzeichnis Ereignisschleife Ereignisschle...

Zusammenfassung des CSS-Zählers und des Inhalts

Die Inhaltseigenschaft wurde bereits in CSS 2.1 e...

HTML + CSS + JS realisiert den Scroll-Gradienteneffekt der Navigationsleiste

Inhaltsverzeichnis Erster Blick auf die Wirkung: ...

Implementierung der Multisite-Konfiguration von Nginx auf Mac M1

Hinweis: nginx über brew installiert Stammverzeic...

Ideen und Codes zur Implementierung des Wasserfall-Flow-Layouts im UniApp-Applet

1. Einleitung Gilt es als Aufwärmen alter Themen,...

So erstellen Sie einen pptpd-Dienst in Alibaba Cloud Ubuntu 16.04

1. Um ein PPTP-VPN aufzubauen, müssen Sie Port 17...

So verwenden Sie die asynchrone Anforderungs-API von Axios in Vue

Inhaltsverzeichnis Einrichten einer einfachen HTT...

CSS-Syntax für Tabellenränder

<br /> CSS-Syntax für Tabellenränder Zu den ...