创建docker swarm 网络
docker network create -d overlay --attachable es
docker warm 由3个节点组成 分别是 master slaver-01 slaver-02
注意: 编辑conpose文件时请 修改绑定的node 名字
- node.hostname==master 修改为自己的node
vim mongo.yml
services:
cfg1:
image: mongo
command: mongod --storageEngine wiredTiger --profile=1 --port 27017 --bind_ip_all --slowms=50 --replSet mongo --dbpath /data/db
networks:
- es
volumes:
- /home/dockermongo:/data/db
deploy:
restart_policy:
condition: on-failure
replicas: 1
placement:
constraints:
- node.hostname==master
endpoint_mode: dnsrr
resources:
limits:
cpus: "2"
memory: 1200M
reservations:
cpus: "0.8"
memory: 800M
cfg2:
image: mongo
command: mongod --storageEngine wiredTiger --profile=1 --port 27017 --bind_ip_all --slowms=50 --replSet mongo --dbpath /data/db
networks:
- es
volumes:
- /home/dockermongo:/data/db
deploy:
restart_policy:
condition: on-failure
replicas: 1
placement:
constraints:
- node.hostname==slaver-01
endpoint_mode: dnsrr
resources:
limits:
cpus: "2"
memory: 1200M
reservations:
cpus: "0.8"
memory: 800M
cfg3:
image: mongo
command: mongod --storageEngine wiredTiger --profile=1 --port 27017 --bind_ip_all --slowms=50 --replSet mongo --dbpath /data/db
networks:
- es
volumes:
- /home/dockermongo:/data/db
deploy:
restart_policy:
condition: on-failure
replicas: 1
placement:
constraints:
- node.hostname==slaver-02
endpoint_mode: dnsrr
resources:
limits:
cpus: "2"
memory: 1200M
reservations:
cpus: "0.8"
memory: 800M
networks:
es:
external: true
构建完成可以看到3个容器已经启动
61m6okmo4y3q mongo_cfg1 replicated 1/1 mongo:latest
xqlxuwyzhu11 mongo_cfg2 replicated 1/1 mongo:latest
6cmh7ny7g9xg mongo_cfg3 replicated 1/1 mongo:latest
接下来进行集群搭建
执行命令
docker exec -it d001e5c09ebc mongo --port 27017
注意 d001e5c09ebc 为容器id
执行此命令进入容器 执行
config={_id:"mongo",members:[{_id:0,host:"cfg1:27017"},{_id:1,host:"cfg2:27017"},{_id:2,host:"cfg3:27017","arbiterOnly" : true}]}
{
"_id" : "mongo",
"members" : [
{
"_id" : 0,
"host" : "cfg1:27017"
},
{
"_id" : 1,
"host" : "cfg2:27017"
},
{
"_id" : 2,
"host" : "cfg3:27017",
"arbiterOnly" : true
}
]
}
rs.initiate(config) 初始化
mongo:SECONDARY> rs.status() 查看集群状态
{
"set" : "mongo",
"date" : ISODate("2019-04-10T07:19:33.761Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"appliedOpTime" : {
"ts" : Timestamp(1554880772, 4),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1554880772, 4),
"t" : NumberLong(1)
}
},
"lastStableCheckpointTimestamp" : Timestamp(0, 0),
"members" : [
{
"_id" : 0,
"name" : "cfg1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 751,
"optime" : {
"ts" : Timestamp(1554880772, 4),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2019-04-10T07:19:32Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1554880771, 1),
"electionDate" : ISODate("2019-04-10T07:19:31Z"),
"configVersion" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "cfg2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 14,
"optime" : {
"ts" : Timestamp(1554880759, 1),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(1554880759, 1),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("2019-04-10T07:19:19Z"),
"optimeDurableDate" : ISODate("2019-04-10T07:19:19Z"),
"lastHeartbeat" : ISODate("2019-04-10T07:19:33.095Z"),
"lastHeartbeatRecv" : ISODate("2019-04-10T07:19:33.292Z"),
"pingMs" : NumberLong(1),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "cfg3:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 14,
"lastHeartbeat" : ISODate("2019-04-10T07:19:33.099Z"),
"lastHeartbeatRecv" : ISODate("2019-04-10T07:19:33.583Z"),
"pingMs" : NumberLong(1),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 1
}
],
"ok" : 1,
"operationTime" : Timestamp(1554880772, 4),
"$clusterTime" : {
"clusterTime" : Timestamp(1554880772, 4),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
接下来修改mongodb 权重 因为不想集群重启之后主节点改变
mongo:PRIMARY> cfg=rs.config() config 重新赋值
mongo:PRIMARY> cfg.members[0].priority = 3 修改权重
3
mongo:PRIMARY> cfg.members[1].priority = 2 修改权重
2
mongo:PRIMARY> rs.reconfig(cfg) 重新加载权重信息
{
"ok" : 1,
"operationTime" : Timestamp(1554881116, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1554881116, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
mongo:PRIMARY> rs.config() c查看权重信息
{
"_id" : "mongo",
"version" : 2,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "cfg1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 3,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "cfg2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "cfg3:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5cad98f795626aebf25e19ca")
}
}
到这里docker swarm 的mongodb 集群就搭建完成了