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

创建docker网络

bash 复制代码
docker network create mongo_cluster_net
bash 复制代码
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 - -
bash 复制代码
su
bash 复制代码
mkdir -p /mnt/mongo/data/
mkdir -p /mnt/mongo/log/
bash 复制代码
ll /mnt/mongo

期间失败可能会用到

停止全部容器

bash 复制代码
docker stop $(docker ps -q)

删除全部容器

bash 复制代码
docker container prune
name port1 port2 port3
shard1 27001 28001 29001
bash 复制代码
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
bash 复制代码
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
bash 复制代码
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
bash 复制代码
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

bash 复制代码
docker exec -it shard11 mongo 192.168.142.130:27001
bash 复制代码
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

bash 复制代码
docker exec -it shard21 mongo 192.168.142.130:27002
bash 复制代码
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

bash 复制代码
docker exec -it shard31 mongo 192.168.142.130:27012
bash 复制代码
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

bash 复制代码
docker exec -it confsvr1 mongo 192.168.142.130:27003
bash 复制代码
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 - -
bash 复制代码
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
bash 复制代码
docker exec -it mongos1 mongo 192.168.142.130:27004
bash 复制代码
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})
bash 复制代码
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.kpl",key:{id:"hashed"}})
bash 复制代码
use test
bash 复制代码
show collections
bash 复制代码
db.stats()

kpl collection

bash 复制代码
{
	"_id": , 
	"id": , 
	"name": , 
	"age": , 
	"english": , 
	"math": , 
	"chinese": ,
	"geography": , 
	"music": , "love": 
}
bash 复制代码
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)
bash 复制代码
top



相关推荐
姜鱼问生10 小时前
网页一片白?Docker 跑 Nginx 读不到文件,403 Forbidden 排查实录
nginx·docker·容器
\光辉岁月/11 小时前
2.spring5-IOC
java·容器·ioc·注解
ms72wx12 小时前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker
java_logo12 小时前
Docker 部署 Excalidraw:轻松搭建手绘风格白板
运维·docker·容器·excalidraw·白板·轩辕镜像
海的透彻14 小时前
如何让docker容器启动时用自定义的用户
java·docker·dubbo
程序员清风15 小时前
LibreChat 实战:用 Docker 搭建可扩展的多模型对话平台
运维·docker·容器
Web3&Basketball16 小时前
从0到1落地AI Agent沙箱隔离Docker实战:踩坑全记录
运维·docker·容器·agent·容器安全·沙箱隔离
bluebonnet2717 小时前
【docker】使用regctl免安装docker下载镜像
运维·docker·容器
Java开发追求者1 天前
windows快速安装docker
windows·docker·安装·1024程序员节
骑着蜗牛撵大象3271 天前
飞牛fnOS部署Damselfly:Compose编排、照片目录与7100固定访问
java·docker·rpc·dubbo·fnos·照片管理·damselfly