美文网首页
Docker + MongoDB分片

Docker + MongoDB分片

作者: GongZH丶 | 来源:发表于2019-04-03 15:06 被阅读0次

分片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()


相关文章

网友评论

      本文标题:Docker + MongoDB分片

      本文链接:https://www.haomeiwen.com/subject/evkgbqtx.html