1

设置network

docker network create my-mongo-cluster
docker network ls

构建副本集

docker run \
-p 30001:27017 \
--name mongo1 \
--net my-mongo-cluster \
daocloud.io/library/mongo mongod --replSet my-mongo-set

docker run \
-p 30002:27017 \
--name mongo2 \
--net my-mongo-cluster \
daocloud.io/library/mongo mongod --replSet my-mongo-set

docker run \
-p 30003:27017 \
--name mongo3 \
--net my-mongo-cluster \
daocloud.io/library/mongo mongod --replSet my-mongo-set

初始化配置

docker exec -it mongo1 mongo
db = (new Mongo('localhost:27017')).getDB('test')
config = {
      "_id" : "my-mongo-set",
      "members" : [
          {
              "_id" : 0,
              "host" : "mongo1:27017"
          },
          {
              "_id" : 1,
              "host" : "mongo2:27017"
          },
          {
              "_id" : 2,
              "host" : "mongo3:27017"
          }
      ]
  }

rs.initiate(config)

查看副本集状态

rs.status()

输出

my-mongo-set:PRIMARY> rs.status()
{
    "set" : "my-mongo-set",
    "date" : ISODate("2017-03-31T17:09:24.368Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1490980160, 1),
            "t" : NumberLong(1)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1490980160, 1),
            "t" : NumberLong(1)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1490980160, 1),
            "t" : NumberLong(1)
        }
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "mongo1:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 437,
            "optime" : {
                "ts" : Timestamp(1490980160, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2017-03-31T17:09:20Z"),
            "electionTime" : Timestamp(1490979879, 1),
            "electionDate" : ISODate("2017-03-31T17:04:39Z"),
            "configVersion" : 1,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "mongo2:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 296,
            "optime" : {
                "ts" : Timestamp(1490980160, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1490980160, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2017-03-31T17:09:20Z"),
            "optimeDurableDate" : ISODate("2017-03-31T17:09:20Z"),
            "lastHeartbeat" : ISODate("2017-03-31T17:09:23.936Z"),
            "lastHeartbeatRecv" : ISODate("2017-03-31T17:09:23.625Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "mongo1:27017",
            "configVersion" : 1
        },
        {
            "_id" : 2,
            "name" : "mongo3:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 296,
            "optime" : {
                "ts" : Timestamp(1490980160, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1490980160, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2017-03-31T17:09:20Z"),
            "optimeDurableDate" : ISODate("2017-03-31T17:09:20Z"),
            "lastHeartbeat" : ISODate("2017-03-31T17:09:23.936Z"),
            "lastHeartbeatRecv" : ISODate("2017-03-31T17:09:23.624Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "mongo1:27017",
            "configVersion" : 1
        }
    ],
    "ok" : 1
}

查看同步延迟

rs.printSlaveReplicationInfo()

备份

mongodump --dbpath /var/lib/mongodb --out /var/lib/mongodb.backup
mongorestore --dbpath /var/lib/tokumx /var/lib/mongodb.backup

关闭replica set

use admin
db.shutdownServer({timeoutSecs : 15})

doc


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...