2017-10-14 5 views
0

Ich habe zwei Server mit Replikatsatzes Config erstellt Name rs0 in Docker-compose.yml Datei als sudo eingesetzt Docker Stapel deploy --with-Registry-Auth - komponieren-Datei docker-compose.yml Test.Initiieren MongoDB Replik in Docker Schwarm gesetzt

version: "3.3" 
services: 
    cfg1-r1: 
     image: mongo:3.2 
     deploy: 
      placement: 
       constraints: [node.hostname == ram-ThinkPad-E470] 
      restart_policy: 
       condition: on-failure 
     volumes: 
      - /opt/mongoshard/tmp:/var/lib/mongodb 
      - /opt/mongoshard/mongod.conf:/etc/mongod.conf 
     networks: 
      - mongoshard 
     command: ["mongod", "--configsvr", "--replSet", "rs0", "--dbpath", "/var/lib/mongodb", "--port", "27017"] 

    cfg2-r1: 
     image: mongo:3.2 
     deploy: 
      placement: 
       constraints: [node.hostname == prasanna-ThinkPad-E470] 
      restart_policy: 
       condition: on-failure 
     volumes: 
      - /opt/mongoshard/tmp:/var/lib/mongodb 
      - /opt/mongoshard/mongod.conf:/etc/mongod.conf 
     networks: 
      - mongoshard 
     command: ["mongod", "--configsvr", "--replSet", "rs0", "--dbpath", "/var/lib/mongodb", "--port", "27017"] 
networks: 
    mongoshard: 

Inhalt in mongod.conf Datei

storage: 
    dbPath: /var/lib/mongodb 
    journal: 
    enabled: true 

systemLog: 
    destination: file 
    logAppend: true 
    path: /var/log/mongodb/mongod.log 
net: 
    port: 27017 

Wenn ich versuche, mit Service-Namen zu initiieren als

sudo Docker exec $ (sudo Docker ps -qf Label-it = com.docker.swarm.service.name = test_cfg1-r1) mongo --eval 'rs.initiate ({_id: "rs0", Mitglieder: [{_id: 1, host: "cfg1-r1: 27017"}, { _id: 2, Host: "cfg2-r1: 27017"}], Einstellungen: {getLastErrorDefaults: {w: "Mehrheit", wtimeout: 30000}}) '

Bearbeiten Ich habe vergessen, während der Initialisierung cfg2-r1 zu erwähnen. Jetzt habe ich es hinzugefügt.

Es Fehler

MongoDB shell version v3.4.9 
connecting to: mongodb://127.0.0.1:27017 
MongoDB server version: 3.4.9 
{ 
     "ok" : 0, 
     "errmsg" : "No host described in new configuration 1 for replica set rs0 maps to this node", 
     "code" : 93, 
     "codeName" : "InvalidReplicaSetConfig" 
} 

EDIT geben: ich glaube, das Problem CFG1-r1 und CFG2-r2-Dienste sind nicht in demselben Netzwerk ist. Wenn ich eine Stack-Datei bereitstelle, wird ein Netzwerk namens mongo_mongoshard (overlay) erstellt und wenn ich es inspiziere, zeigt es nur cfg1-r1 als Container in seiner Container-Liste an.

Antwort

0

Ihr Netzwerk auf Overlay-Modus sein, privates Netzwerk-Sharing zwischen mehreren Hosts zu ermöglichen:

docker network create --driver overlay --attachable mongoshard 

Dann in Ihrem compose:

networks: 
    mongoshard: 
    external: true 

Damit Replik Werke, müssen Sie Fügen Sie mindestens zwei Mitglieder hinzu:

rs.initiate({ _id: "rs0", members: [{ _id: 1, host: "cfg1-r1:27017" }, { _id: 2, host: "cfg1-r2:27017" }], settings: { getLastErrorDefaults: { w: "majority", wtimeout: 30000 }}}); 
+0

Vielen Dank Mathieu Lescaudron. –