Docker + MongoDB分片
2019-04-03 本文已影响0人
GongZH丶
分片https://docs.mongodb.com/manual/sharding/
image.png总共运行的容器:16个
- 1个配置服务(Config Servers)复制集(replica set ),有三个节点 3*1 = 3个
- 3个分片(Shard)复制集 (replica set),每个复制集有三个data节点,一个Arbiter节点。 4*3 =12个
-
一个路由服务(mongos) (也可以是复制集) 1*1 =1个
image.png
开始搭建
mongodb默认端口
image.png
注意:在用mongo image 运行的容器中 , 数据节点的目录是 /data/db 而configsvr 的 data 目录是 /data/configdb
Shard 1(replica set):
//配置文件:mongo1.conf
replSet = replSetOne
shardsvr = true //分片服务
//mongo2.conf mongo3.conf mongo4.conf 内容与mongo1一样
//分片服务
docker run -p 28001:27018 --name test-mongo1 -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo1:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo1:/data/db -d mongo:4.0 --config /etc/mongo/mongo1.conf
docker run -p 28002:27018 --name test-mongo2 -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo2:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo2:/data/db -d mongo:4.0 --config /etc/mongo/mongo2.conf
docker run -p 28003:27018 --name test-mongo3 -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo3:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo3:/data/db -d mongo:4.0 --config /etc/mongo/mongo3.conf
docker run -p 28004:27018 --name test-mongo4 -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo4:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test/mongo4:/data/db -d mongo:4.0 --config /etc/mongo/mongo4.conf
//初始化复制集
rs.initiate( {
_id : "replSetOne",
members: [
{ _id: 0, host: "172.17.0.3:27018" },
{ _id: 1, host: "172.17.0.4:27018" },
{ _id: 2, host: "172.17.0.5:27018" }
]
})
//Arbiter节点
rs.addArb("172.17.0.6:27018")
//查看复制集信息
rs.status()
Shard 2(replica set):
//配置文件:mongo1.conf
replSet = replSetTwo
shardsvr = true //分片服务
//mongo2.conf mongo3.conf mongo4.conf 内容与mongo1一样
docker run -p 28011:27018 --name test2-mongo1 -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo1:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo1:/data/db -d mongo:4.0 --config /etc/mongo/mongo1.conf
docker run -p 28012:27018 --name test2-mongo2 -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo2:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo2:/data/db -d mongo:4.0 --config /etc/mongo/mongo2.conf
docker run -p 28013:27018 --name test2-mongo3 -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo3:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo3:/data/db -d mongo:4.0 --config /etc/mongo/mongo3.conf
docker run -p 28014:27018 --name test2-mongo4 -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo4:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test2/mongo4:/data/db -d mongo:4.0 --config /etc/mongo/mongo4.conf
rs.initiate({
_id : "replSetTwo",
members: [
{ _id: 0, host: "172.17.0.7:27018" },
{ _id: 1, host: "172.17.0.8:27018" },
{ _id: 2, host: "172.17.0.9:27018" }
]
})
rs.addArb("172.17.0.10:27018")
Shard 3(replica set):
//配置文件:mongo1.conf
replSet = replSetThree
shardsvr = true //分片服务
//mongo2.conf mongo3.conf mongo4.conf 内容与mongo1一样
docker run -p 28021:27018 --name test3-mongo1 -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo1:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo1:/data/db -d mongo:4.0 --config /etc/mongo/mongo1.conf
docker run -p 28022:27018 --name test3-mongo2 -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo2:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo2:/data/db -d mongo:4.0 --config /etc/mongo/mongo2.conf
docker run -p 28023:27018 --name test3-mongo3 -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo3:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo3:/data/db -d mongo:4.0 --config /etc/mongo/mongo3.conf
docker run -p 28024:27018 --name test3-mongo4 -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo4:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_test3/mongo4:/data/db -d mongo:4.0 --config /etc/mongo/mongo4.conf
rs.initiate({
_id : "replSetThree",
members: [
{ _id: 0, host: "172.17.0.11:27018" },
{ _id: 1, host: "172.17.0.12:27018" },
{ _id: 2, host: "172.17.0.13:27018" }
]
})
rs.addArb("172.17.0.14:27018")
Config Servers (replica set)
//mongod.conf
replSet = cfg // 复制集名称
configsvr=true // 配置服务
docker run -p 28031:27019 --name mongo-cfg1 -v /Users/gzh/Desktop/测试项目/mongodb_config/mongo1:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_config/mongo1:/data/configdb -d mongo:4.0 --config /etc/mongo/mongod.conf
docker run -p 28032:27019 --name mongo-cfg2 -v /Users/gzh/Desktop/测试项目/mongodb_config/mongo2:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_config/mongo2:/data/configdb -d mongo:4.0 --config /etc/mongo/mongod.conf
docker run -p 28033:27019 --name mongo-cfg3 -v /Users/gzh/Desktop/测试项目/mongodb_config/mongo3:/etc/mongo -v /Users/gzh/Desktop/测试项目/mongodb_config/mongo3:/data/configdb -d mongo:4.0 --config /etc/mongo/mongod.conf
mongo --port 27019
rs.initiate({
_id : "cfg",
members: [
{ _id: 0, host: "172.17.0.15:27019" },
{ _id: 1, host: "172.17.0.16:27019" },
{ _id: 2, host: "172.17.0.17:27019" },
]
})
Router (mongos):
docker run -p 28041:27017 --name mongos1 -v /Users/gzh/Desktop/测试项目/mongodb_mongos/mongos:/etc/mongo -d mongo:4.0 mongos --config /etc/mongo/mongos.conf --bind_ip 0.0.0.0
//--bind_ip 0.0.0.0 很重要
//docker run -p 40001:27017 --name mongos3 -v /Users/gzh/Desktop/测试项目/mongodb_mongos/mongos:/etc/mongo -d mongo:4.0 mongos --config /etc/mongo/mongos.conf --bind_ip 0.0.0.0
//通过mongos添加分片关系到configsvr
docker exec -it mongos1 bash
mongo //mongo --port 27017
//添加分片复制集1
sh.addShard("replSetOne/172.17.0.3:27018,172.17.0.4:27018,172.17.0.5:27018")
//添加分片复制集2
sh.addShard("replSetTwo/172.17.0.7:27018,172.17.0.8:27018,172.17.0.9:27018")
//添加分片复制集3
sh.addShard("replSetThree/172.17.0.11:27018,172.17.0.12:27018,172.17.0.13:27018")
sh.enableSharding("test_db")
sh.shardCollection("test_db.test_collection", {"tag": 1})
sh.status()