【记录】使用 Docker 搭建 MongoDB 分布
创建docker网络
docker network create mongo_cluster_net
docker pull mongo:3.6
https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-enterprise-with-docker/
https://www.mongodb.com/zh-cn/docs/manual/reference/configuration-file-settings-command-line-options-mapping/#std-label-conf-file-command-line-mapping
name | port1 | port2 | port3 |
---|---|---|---|
shard1 | 27001 | 28001 | 29001 |
shard2 | 27002 | 28002 | 29002 |
shard3 | 27012 | 28012 | 29012 |
configserver | 27003 | 28003 | 29003 |
mongos | 27004 | - | - |
su
mkdir -p /mnt/mongo/data/
mkdir -p /mnt/mongo/log/
ll /mnt/mongo
期间失败可能会用到
停止全部容器
docker stop $(docker ps -q)
删除全部容器
docker container prune
name | port1 | port2 | port3 |
---|---|---|---|
shard1 | 27001 | 28001 | 29001 |
docker run -d -p 27001:27018 \
-v /mnt/mongo/data/shard10/:/data/db/ \
-v /mnt/mongo/log/shard10/:/data/configdb/ \
--network mongo_cluster_net \
--name shard10 mongo:3.6 \
mongod --shardsvr --replSet shard1 --logpath=/data/configdb/shard1.log
docker run -d -p 28001:27018 \
-v /mnt/mongo/data/shard11/:/data/db/ \
-v /mnt/mongo/log/shard11/:/data/configdb/ \
--network mongo_cluster_net \
--name shard11 mongo:3.6 \
mongod --shardsvr --replSet shard1 --logpath=/data/configdb/shard1.log
docker run -d -p 29001:27018 \
-v /mnt/mongo/data/shard12/:/data/db/ \
-v /mnt/mongo/log/shard12/:/data/configdb/ \
--network mongo_cluster_net \
--name shard12 mongo:3.6 \
mongod --shardsvr --replSet shard1 --logpath=/data/configdb/shard1.log
name | port1 | port2 | port3 |
---|---|---|---|
shard2 | 27002 | 28002 | 29002 |
docker run -d -p 27002:27018 \
-v /mnt/mongo/data/shard20/:/data/db/ \
-v /mnt/mongo/log/shard20/:/data/configdb/ \
--network mongo_cluster_net \
--name shard20 mongo:3.6 \
mongod --shardsvr --replSet shard2 --logpath=/data/configdb/shard2.log
docker run -d -p 28002:27018 \
-v /mnt/mongo/data/shard21/:/data/db/ \
-v /mnt/mongo/log/shard21/:/data/configdb/ \
--network mongo_cluster_net \
--name shard21 mongo:3.6 \
mongod --shardsvr --replSet shard2 --logpath=/data/configdb/shard2.log
docker run -d -p 29002:27018 \
-v /mnt/mongo/data/shard22/:/data/db/ \
-v /mnt/mongo/log/shard22/:/data/configdb/ \
--network mongo_cluster_net \
--name shard22 mongo:3.6 \
mongod --shardsvr --replSet shard2 --logpath=/data/configdb/shard2.log
name | port1 | port2 | port3 |
---|---|---|---|
shard3 | 27012 | 28012 | 29012 |
docker run -d -p 27012:27018 \
-v /mnt/mongo/data/shard30/:/data/db/ \
-v /mnt/mongo/log/shard30/:/data/configdb/ \
--network mongo_cluster_net \
--name shard30 mongo:3.6 \
mongod --shardsvr --replSet shard3 --logpath=/data/configdb/shard3.log
docker run -d -p 28012:27018 \
-v /mnt/mongo/data/shard31/:/data/db/ \
-v /mnt/mongo/log/shard31/:/data/configdb/ \
--network mongo_cluster_net \
--name shard31 mongo:3.6 \
mongod --shardsvr --replSet shard3 --logpath=/data/configdb/shard3.log
docker run -d -p 29012:27018 \
-v /mnt/mongo/data/shard32/:/data/db/ \
-v /mnt/mongo/log/shard32/:/data/configdb/ \
--network mongo_cluster_net \
--name shard32 mongo:3.6 \
mongod --shardsvr --replSet shard3 --logpath=/data/configdb/shard3.log
name | port1 | port2 | port3 |
---|---|---|---|
configserver | 27003 | 28003 | 29003 |
docker run -d -p 27003:27003 --name confsvr1 \
-v /mnt/mongo/data/cfgsvr1/:/data/db/ \
mongo:3.6 --configsvr --dbpath /data/db --replSet crs --port 27003
docker run -d -p 28003:27003 --name confsvr2 \
-v /mnt/mongo/data/cfgsvr2/:/data/db/ \
mongo:3.6 --configsvr --dbpath /data/db --replSet crs --port 27003
docker run -d -p 29003:27003 --name confsvr3 \
-v /mnt/mongo/data/cfgsvr3/:/data/db/ \
mongo:3.6 --configsvr --dbpath /data/db --replSet crs --port 27003
shard1
docker exec -it shard11 mongo 192.168.142.130:27001
rs.initiate({ _id:"shard1", members:[
{_id:0,host:"192.168.142.130:27001"},
{_id:1,host:"192.168.142.130:28001",arbiterOnly:true},
{_id:2,host:"192.168.142.130:29001"}
]
})
rs.conf()
exit
shard2
docker exec -it shard21 mongo 192.168.142.130:27002
rs.initiate({ _id:"shard2", members:[
{_id:0,host:"192.168.142.130:27002"},
{_id:1,host:"192.168.142.130:28002",arbiterOnly:true},
{_id:2,host:"192.168.142.130:29002"}
]
})
rs.conf()
exit
shard3
docker exec -it shard31 mongo 192.168.142.130:27012
rs.initiate({ _id:"shard3", members:[
{_id:0,host:"192.168.142.130:27012"},
{_id:1,host:"192.168.142.130:28012",arbiterOnly:true},
{_id:2,host:"192.168.142.130:29012"}
]
})
rs.conf()
exit
config-svr
docker exec -it confsvr1 mongo 192.168.142.130:27003
rs.initiate({ _id:"crs",configsvr:true, members:[
{_id:0,host:"192.168.142.130:27003"},
{_id:1,host:"192.168.142.130:28003"},
{_id:2,host:"192.168.142.130:29003"}
]
})
rs.conf()
exit
mongos
name | port1 | port2 | port3 |
---|---|---|---|
mongos | 27004 | - | - |
docker run -d -p 27004:27017 \
-v /mnt/mongo/log/mongos1/:/var/log/mongodb/ \
--network mongo_cluster_net \
--name mongos1 \
mongo:3.6 mongos --bind_ip_all --port 27017 --configdb crs/192.168.142.130:27003,192.168.142.130:28003,192.168.142.130:29003
docker exec -it mongos1 mongo 192.168.142.130:27004
use admin
db.runCommand({addshard:"shard1/192.168.142.130:27001,192.168.142.130:28001,192.168.142.130:29001"})
db.runCommand({addshard:"shard2/192.168.142.130:27002,192.168.142.130:28002,192.168.142.130:29002"})
db.runCommand({addshard:"shard3/192.168.142.130:27012,192.168.142.130:28012,192.168.142.130:29012"})
db.runCommand({listshards:1})
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.kpl",key:{id:"hashed"}})
use test
show collections
db.stats()
kpl collection
{
"_id": ,
"id": ,
"name": ,
"age": ,
"english": ,
"math": ,
"chinese": ,
"geography": ,
"music": , "love":
}
var before = new Date()
for(var i = 1; i <= 100000; i++){
db.kpl.insert({
id: i,
name: i,
english: Math.round(Math.random() * 100),
math: Math.round(Math.random() * 100),
chinese: Math.round(Math.random() * 100),
geography: Math.round(Math.random() * 100),
music: Math.round(Math.random() * 100),
love: Math.round(Math.random() * 100)
})
print(i)
}
var after = new Date()
execution_mills = after - before
print(execution_mills)
top