【记录】使用 Docker 搭建 MongoDB 分布

发布于:2025-03-22 ⋅ 阅读:(38) ⋅ 点赞:(0)

创建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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述