Mongodb Docker swarm
Aug 9, 2017 · 3 min read
Initiate master
sudo docker swarm init join workers
sudo docker swarm join — token <token>after that list your nodes
sudo docker node lsInspect your nodes
sudo docker node inspect <node_id>Assign labels to ur nodes
docker node update --label-add mongo.replica=1 $(docker node ls -q -f name=manager1)Create volumes
Volumes should be created on individual nodes by logging into them
manager1$ sudo docker volume create — name mongodata1
manager1$ sudo docker volume create — name mongoconfig1worker1$ sudo docker volume create — name mongodata2
worker1$ sudo docker volume create — name mongoconfig2worker2$ sudo docker volume create — name mongodata3
worker2$ sudo docker volume create — name mongoconfig3
Create mongo service
docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata1,target=/data/db --mount type=volume,source=mongoconfig1,target=/data/configdb --constraint 'node.labels.mongo.replica == 1' --name mongo1 mongo:3.4 mongod --replSet mysetdocker service create --replicas 1 --network mongo --mount type=volume,source=mongodata2,target=/data/db --mount type=volume,source=mongoconfig2,target=/data/configdb --constraint 'node.labels.mongo.replica == 2' --name mongo2 mongo:3.4 mongod --replSet "myset"docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata3,target=/data/db --mount type=volume,source=mongoconfig3,target=/data/configdb --constraint 'node.labels.mongo.replica == 3' --name mongo3 mongo:3.4 mongod --replSet "myset"
Initiate the replica set
docker@manager1:~$ sudo docker exec -it $(sudo docker ps -qf label=com.docker.swarm.service.name=mongo1) mongo --eval 'rs.initiate({ _id: "myset", members: [{ _id: 1, host: "mongo1:27017" }, { _id: 2, host: "mongo2:27017" }, { _id: 3, host: "mongo3:27017" }], settings: { getLastErrorDefaults: { w: "majority", wtimeout: 30000 }}})'
MongoDB shell version: 3.2.10
connecting to: test
{ "ok" : 1 }
docker@manager1:~$ docker exec -it $(docker ps -qf label=com.docker.swarm.service.name=mongo1) mongo --eval 'rs.status()'
MongoDB shell version: 3.2.10
connecting to: test
{
"set" : "example",
"date" : ISODate("2016-11-07T03:36:44.510Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 1,
"name" : "mongo1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 777,
"optime" : {
"ts" : Timestamp(1478489792, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-11-07T03:36:32Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1478489792, 1),
"electionDate" : ISODate("2016-11-07T03:36:32Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 2,
"name" : "mongo2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 22,
"optime" : {
"ts" : Timestamp(1478489792, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-11-07T03:36:32Z"),
"lastHeartbeat" : ISODate("2016-11-07T03:36:44.448Z"),
"lastHeartbeatRecv" : ISODate("2016-11-07T03:36:43.872Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "mongo1:27017",
"configVersion" : 1
},
{
"_id" : 3,
"name" : "mongo3:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 22,
"optime" : {
"ts" : Timestamp(1478489792, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-11-07T03:36:32Z"),
"lastHeartbeat" : ISODate("2016-11-07T03:36:44.448Z"),
"lastHeartbeatRecv" : ISODate("2016-11-07T03:36:43.874Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "mongo1:27017",
"configVersion" : 1
}
],
"ok" : 1
}
docker@manager1:~$ docker exec -it $(docker ps -qf label=com.docker.swarm.service.name=mongo1) mongo --eval 'rs.config()'
MongoDB shell version: 3.2.10
connecting to: test
{
"_id" : "example",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 1,
"host" : "mongo1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongo2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "mongo3:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {},
"getLastErrorDefaults" : {
"w" : "majority",
"wtimeout" : 30000
},
"replicaSetId" : ObjectId("581ff6b54865b4277baf414d")
}
}
