Bereitstellen von mongodb replicaset-Server mit Docker auf verschiedenen physikalischen Servern
Ich versuche zum bereitstellen einer mongodb replicaset mit docker.
Ich habe es geschafft, an ein und demselben server durch ausführen dieser :
docker run -d --expose 27017 --name mongodbmycompany1 dockerfile/mongodb mongod --replSet rsmycompa
docker run -d --expose 27017 --name mongodbmycompany2 dockerfile/mongodb mongod --replSet rsacommeassure
docker run -d --expose 27017 --name mongodbmycompany3 dockerfile/mongodb mongod --replSet rsacommeassure
MONGODB1=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany1)
MONGODB2=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany2)
MONGODB3=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany3)
echo $MONGODB1
echo $MONGODB2
echo $MONGODB3
echo "Mongodb Replicaset init"
docker exec mongodbmycompany1 mongo 127.0.0.1:27017/mycompany --eval 'if(!rs.conf()) { rs.initiate(); cfg = rs.conf(); cfg.members[0].host = "'$MONGODB1':27017"; rs.reconfig(cfg); rs.add("'$MONGODB2':27017"); rs.add("'$MONGODB3':27017"); } rs.status();'
Funktioniert es wie erwartet. Meine replicaset initialisiert wird und meine mongodb resultset-config enthält meine 3 Server identifiziert durch Ihre interne IP-Adresse.
Es ist nicht perfekt, da würde ich es vorziehen, verwenden Sie Server-Namen, aber ich schaffte es nicht, es zu tun.
Andockfenster nur Auffüllen jeder /etc/hosts-Datei mit dem Server-Namen übergeben, im Bild Start mit --link-parameter. Wenn ich einen neuen server hinzuzufügen, während die anderen ausgeführt werden. Dieser Server nicht pingen Sie den neuen server.
Nun habe ich noch eine Frage. In der Produktion, mit einer Menge von Mongodb docker-image läuft auf dem gleichen physischen server ist möglich, aber es ist nicht sicher :
- wenn meine physischen server herunter fällt, verliere ich alle meine Mongodb-Replikate und mein service ist down
- wenn meine physischen server verwendet den internen Speicher, alle meine docker-images verwenden Sie die gleiche Festplatte... und ich bin zu haben, IO-Probleme.
Also meine Frage ist : Wie kann ich bereitstellen viele mongodb Replikate auf mehreren physischen Servern ? Wie diese mongodb Repliken kommunizieren kann mit jeder anderen (primäre und sekundäre Server ändern kann), während Sie auf anderen Servern oder sogar auf verschiedenen Datencentern ?
- Was ist genau dein problem dabei? Was usign OpenStack zu planen, der Docker-container auf Ihrem mehrere physikalische Knoten?
- Ich werde haben Sie einen Blick auf OpenStack um das problem zu lösen. Haben Sie ein Dokument, in dem OpenStack wird für die Verwaltung von mongodb-Andockfenster-Dateien, um ein replicaset verteilt auf viele Server ?
- Nein, ich habe gerade verwendet OpenStack zu instatiate Andockfenster für Zwecke anders aus, erstellen einer MongoDB replica set.
- Sie benötigen ein virtuelles LAN, das wirkt wie eine einzige sichtbar-Netzwerk-bridge, die für Ihre docker-container. Haben Sie einen Blick auf coreos/Flanell. Diese lösen Ihre Vernetzung mit geringstem Aufwand.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angenommen:
10.1.1.101
,10.1.1.102
,10.1.1.103
rsacommeassure
Dockerfile
s für mongodb setzen port 27017Zuerst beginnen wir mongodb Container auf jedem server (
10.1.1.101 ~$
verwendet wird für die Eingabeaufforderung):-p 27017:27017
macht port 27017 auf dem host-IP, so dass "mongo" ist zugänglich auf dem Server-host-IP-Adresse.Dann müssen Sie initiieren die Replikatgruppe, so führen Sie einfach diese gegen eine mongodb-container (ich Hole server1 hier):
Die IPs sind lokale, sondern es arbeitet mit globalen, solange die Server können miteinander reden (VPN, firewall, DMZ, was auch immer). Btw sollten Sie überlegen, Sicherheit gezielt.
Ich habe eine Replik auf verschiedenen physischen Servern mithilfe von docker-Maschine und die virtual box als Fahrer:
Öffnen 3 verschiedenen Klemmen, in jedem
In jedem terminal:
Gehen Sie in VirtualBox -> auf jede Umgebung(server1,server2,server3) -> Einstellung -> Netzwerk -> Adapter 1 -> Port Forwarding. Erstellen Sie eine neue Regel aus Protokoll TCP, Host-Port - 27017, Gast-Port - 27017, verlassen die Host-Ip und die Gast-Ip leer
Nun starten Sie die Umgebungen, Sie können dies tun, aus dem VirtualBox oder vom terminal, vom terminal ausgeführt werden:
Starten Sie den Container:
Nun der Container ausgeführt werden sollten, können Sie überprüfen Sie durch ausführen
$ docker ps in jedem terminal
Bekommen in den ersten Behälter(oder ein anderer) Mongo Shell
Verbindung zu einem Sekundären, können Sie entweder:
Nun sind wir in der Mongo Shell eine Sekundäre
Könnten Sie "Weben - Andockfenster-Netzwerk" um Ihr problem zu lösen einfach.
Gewebe schafft ein overlay-Netzwerk, das verbindet Containern auf verschiedenen hosts, sogar bei unterschiedlichen cloud-Anbietern. Webart versorgt auch einen DNS-Dienst, können Sie sich die Container um den Namen innerhalb der Weave-Netzwerk.
Ich gescriptet ein docker-image, das setzt eine mongodb replicaSet für eine beliebige Anzahl von Containern und automatisiert Skalierung, wie Sie weitere Container hinzufügen. überprüfen Sie auf der github github repo oder docker registry
Verwenden Docker Compose
einrichten von docker-Komponieren.yml
führen Sie in der Befehlszeile
Skala bis zu mehr Container
Andockfenster Cloud
Zum bereitstellen von mongo-db replicaSet mit docker-cloud legen Sie einen Stapel
Datei
stack.yml: Stapel-Datei, die nicht erfordern, shared volumes
stack.yml: stack Datei erfordert shared volume
mithilfe von docker-cloud-cli führen Sie in der Befehlszeile (Falls Stapel-Datei existiert nicht in der cloud)
mithilfe von docker-cloud-cli führen Sie in der Befehlszeile (Falls Stapel-Datei bereits in der cloud)