Da ich aus einer VMware-Umgebung komme, war mein Prozess folgender:
- Mehrere Docker-Maschinen (Schwarm) mounten dieselben NFS-Datenspeicher
- Ein Container (z.B. Maria dB) wird auf dem Docker Swarm deployt
- Wenn ein Knoten im Schwarm ausfällt, läuft der Dienst weiterhin auf den anderen Knoten
Also bestieg ich/var/lib/docker/volumesauf einer NFS-Freigabe, auf mehreren Docker-Maschinen und habe versucht, einen Schwarm zu erstellen. Aber schließlich habe ich herausgefunden, dass, wenn mehrere Docker-Maschinen denselben NFS-Datenspeicher mounten, der Docker-Dienst nur auf einem der Knoten gestartet werden kann.
Meine Frage lautet also: Wie erstelle ich einen Schwarm, bei dem derselbe Dienst auf mehreren Knoten ausgeführt wird und die Daten auf einer NFS-Freigabe gespeichert werden?
Natürlich besteht eine gute Chance, dass ich die Funktionsweise eines Docker-Schwarms noch nicht vollständig verstanden habe und die Sache aus einem falschen Blickwinkel betrachte.
Antwort1
Richtig, Sie möchten nichts in /var/lib/docker freigeben, also Daten und Konfigurationen fürdiese Engine auf einem einzigen Server.
In einem Schwarm fügen Sie dem Schwarm Knoten als Manager oder Arbeiter hinzu, und die Manager replizieren die Raft-Konsens-Datenbank, in der die Schwarmkonfiguration und der Schwarmstatus gespeichert sind.
Anschließend erstellen Sie Dienste, die über ein oder mehrere Replikate desselben Container-Images verfügen, die je nach Anforderungen und Verfügbarkeit auf verschiedenen Knoten gestartet werden.
Bei Datenbanken haben Sie mit persistenten Daten zu tun (den Datenbanken und Protokollen jeder Datenbankinstanz). Das hängt mit Docker-Volumes zusammen (wo Sie persistente Daten speichern) und insbesondere mit dem Volume-Treiber, den Sie auswählen. Standardmäßig wird das Volume für diese Dienstreplik (Container) einfach auf dem Knoten gespeichert, auf dem es gerade ausgeführt wird. Wenn Sie möchten, dass dieser Datenbankcontainer automatisch ausfällt und auf einem neuen Knoten hochfährt (eine der Funktionen eines Container-Orchestrators), müssen Sie einen anderen Volume-Treiber verwenden, der „schwarmfähig“ ist und sicherstellt, dass die NFS-Einbindung auf dem richtigen Knoten platziert wird, um für die richtige Dienstreplik bereit zu sein.
Sie können auscheckenREX-Strahldie als Zwischenschicht für die Verwaltung der Volumes auf externem Speicher fungiert (und über eigene Treiber für den Backend-Typ verfügt) oder schauen Sie sich dievollständige Liste im Docker Store.