MongodB分区分片搭建(docker)

MongodB分区分片搭建(docker)

搭建方案:

路由服务器 1台

配置服务器 1个副本集,每个副本集1主2从

分片服务器 2个副本集,每个副本集1主2从

前置:创建三个数据目录

mkdir -p /root/sharddata1/{dbm,dbs1,dbs2}
mkdir -p /root/sharddata2/{dbm,dbs1,dbs2}
mkdir -p /root/dataconfig/{dbm,dbs2,dbs2}

第一步:搭建2个副本集分片服务器

docker network create mongodbnet

docker run   --name shardMaster1 --network mongodbnet -v /root/sharddata1/dbm:/data/db -d mongo  --replSet shard1 --shardsvr  --port  27017
docker run   --name shardSlave11 --network mongodbnet -v /root/sharddata1/dbs1:/data/db -d mongo  --replSet shard1 --shardsvr  --port 27017
docker run   --name shardSlave12 --network mongodbnet -v /root/sharddata1/dbs2:/data/db -d mongo  --replSet shard1 --shardsvr  --port 27017
# 进入指定容器
docker exec -it shardMaster1 /bin/bash
# 连接mongo shell
mongo --host shardMaster1 --port 27017
# 配置副本集
rs.initiate(
  {
    "_id" : "shard1",
    "members": [
      { "_id" : 0, "host" : "shardMaster1:27017" },
      { "_id" : 1, "host" : "shardSlave11:27017" },
      { "_id" : 2, "host" : "shardSlave12:27017" }
    ]
  }
)
#查看
rs.config()
Ctrl+D 退出mongo shell
Ctrl+D 退出容器

docker run   --name shardMaster2 --network mongodbnet -v /root/sharddata2/dbm:/data/db -d mongo  --replSet shard2 --shardsvr  --port  27017
docker run   --name shardSlave21 --network mongodbnet -v /root/sharddata2/dbs1:/data/db -d mongo  --replSet shard2 --shardsvr  --port 27017
docker run   --name shardSlave22 --network mongodbnet -v /root/sharddata2/dbs2:/data/db -d mongo  --replSet shard2 --shardsvr  --port 27017
# 进入指定容器
docker exec -it shardMaster2 /bin/bash
# 连接mongo shell
mongo --host shardMaster2 --port 27017
# 配置副本集
rs.initiate(
  {
    "_id" : "shard2",
    "members": [
      { "_id" : 0, "host" : "shardMaster2:27017" },
      { "_id" : 1, "host" : "shardSlave21:27017" },
      { "_id" : 2, "host" : "shardSlave22:27017" }
    ]
  }
)
#查看
rs.config()

Ctrl+D 退出mongo shell
Ctrl+D 退出容器


第二步:搭建配置服务器

docker run --name configMaster --network mongodbnet -v /root/dataconfig/dbm:/data/db  -v /root/config/configm:/data/configdb -d mongo  --replSet rsconfig --configsvr   --port 27017
docker run --name configSlave1 --network mongodbnet -v /root/dataconfig/dbs1:/data/db  -v /root/config/configs1:/data/configdb -d mongo  --replSet rsconfig  --configsvr   --port 27017
docker run --name configSlave2 --network mongodbnet -v /root/dataconfig/dbs2:/data/db  -v /root/config/configs2:/data/configdb -d mongo  --replSet rsconfig  --configsvr   --port 27017

docker exec -it configMaster /bin/bash
mongo --host configMaster --port 27017
rs.initiate(
  {
    "_id" : "rsconfig",
    "members": [
      { "_id" : 0, "host" : "configMaster:27017" },
      { "_id" : 1, "host" : "configSlave1:27017" },
      { "_id" : 2, "host" : "configSlave2:27017" }
    ]
  }
)
rs.config()
Ctrl+D
Ctrl+D

第三步:搭建路由服务器

docker run  -p 27020:27018  --name routerServer1 --network mongodbnet  -d  mongo   --bind_ip 0.0.0.0
docker exec -it routerServer1 /bin/bash
创建mongos指定config服务
mongos --configdb rsconfig/configMaster:27017,rsconfig/configSlave1:27017,rsconfig/configSlave2:27017 --port 27018

# 在开一个终端
docker exec -it routerServer1 /bin/bash
mongo  --port 27018
#添加分片
sh.addShard("shard1/shardMaster1:27017,shardSlave11:27017,shardSlave12:27017")
sh.addShard("shard2/shardMaster2:27017,shardSlave21:27017,shardSlave22:27017")
#查看分片状态
sh.status()

# 终端查看所有ip (好像不太需要直接用hostname代替了ip)
sudo docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

sh.addShard("shard1/172.18.0.2:27017,172.18.0.3:27017,172.18.0.4:27017")
sh.addShard("shard2/172.18.0.5:27017,172.18.0.6:27017,172.18.0.7:27017")
sh.status()


集群测试操作

routerServer1 容器中  
docker exec -it routerServer1 /bin/bash
mongo  --port 27018 
#启用分片
sh.enableSharding("test")

#设置分片规则,按照_id的hash进行区分
sh.shardCollection("test.order", {"_id": "hashed"})

#插入数据测试
use test

for (i = 1; i <= 1000; i=i+1){
    db.order.insert({'id':i , 'price': 100+i})
}
WriteResult({ "nInserted" : 1 })

mongos> db.order.count()
1000
mongos> db.order.find()

#分别在两个shard集群中查询数据进行测试
#先进入其中一个容器在进入mongoshell
root@591de2dfcfe5:/# mongo 192.168.100.100:37000/test
rs_shardsvr1:PRIMARY> db.order.count()
502

root@591de2dfcfe5:/# mongo 192.168.100.100:37003/test
rs_shardsvr2:PRIMARY> db.order.count()
498

#集群操作(在Mongos中执行)
mongos> use config            #需要进入config库
mongos> db.databases.find()   #列出所有数据库分片情况
mongos> db.collections.find() #查看分片的片键
mongos> sh.status()           #查询分片集群的状态信息

Docker安装(apt-get方式)

1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
3: 写入软件源信息
sudo add-apt-repository “deb [arch=amd64]https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs)stable”
4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

2、拉取镜像

docker pull mongo

3、查看镜像

docker images

4、启动容器

docker run -p 27017:27017 --name mongo -v /data/db:/data/db -d mongo
-p 27017:27017 宿主机端口:容器端口

5、查看容器

Docker ps

其他参考

Docker——基于Docker搭建MongoDB分片集群

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值