docker 部署 mongodb 集群

目录

一、架构目标

二、部署配置服务器

1、10.0.0.1

2、10.0.0.2

3、10.0.0.3 

4、初始化配置服务复制集

三、创建分片副本集

1、分片副本集配置文件

2、10.0.0.1 分片

1、分片服务器部署

2、分片服务副本集部署

3、仲裁服务器

4、初始化分片服务器 

3、10.0.0.2分片

1、分片服务器部署

2、分片服务副本集部署

3、仲裁服务器

4、初始化分片服务器 

四,创建mongos,连接mongos到分片集群

1、10.0.0.1

1、分片路由部署

2、初始化mongos

2、10.0.0.2 

1、分片路由部署

2、初始化mongos


一、架构目标

搭建mongodb分布式集群(副本集 + 分片集群),测试mongodb分布式集群,我用三个服务器,10.0.0.1,10.0.0.2,10.0.0.3,这三个服务器不知道是否事实存在,我拿来做个例子),本次测试我使用mongo 4.0,基于mongo配置文件进行docker部署

图片来源(https://docs.mongodb.com/manual/core/sharded-cluster-components/

服务器部署
severportnamedescription
10.0.0.127017mongos路由1
10.0.0.227017mongos路由2
10.0.0.18000configsvr0配置服务
10.0.0.28000configsvr1配置服务副本
10.0.0.38000configsvr2配置服务副本
10.0.0.19005shardsvr00分片1
10.0.0.19006shardsvr01分片1副本
10.0.0.19007shardsvr02分片1仲裁
10.0.0.29005shardsvr10分片2
10.0.0.29006shardsvr20分片2副本
10.0.0.29007shardsvr30分片2仲裁

 

 

 

 

 

 

 

 

 

 

 

 

 

二、部署配置服务器

1、10.0.0.1

docker run -d -p 9000:27019 --name configsvr0 -v /home/mongod/config/configsvr0:/data/configdb docker.io/mongo:4.0.0 --configsvr --replSet "rs_configsvr" --bind_ip_all

--configsvr 定义为mongo配置服务器

--replSet 副本集名称,相同副本须使用同一个副本集名称

-v 宿主机的目录:挂载到容器的目录

-p 端口映射,如果防火墙没有放行端口,可能此操作会失败

--bind_ip_all 允许所有地址访问

备注:配置服务器启动端口为 27019

2、10.0.0.2

docker run -d -p 9000:27019 --name configsvr1 -v /home/mongod/config/configsvr0:/data/configdb docker.io/mongo:4.0.0 --configsvr --replSet "rs_configsvr" --bind_ip_all

3、10.0.0.3 

docker run -d -p 9000:27019 --name configsvr2 -v /home/mongod/config/configsvr0:/data/configdb docker.io/mongo:4.0.0 --configsvr --replSet "rs_configsvr" --bind_ip_all

结果显示:

备注:如果docker ps 没有刚才创建的容器名称,可以使用docker logs <容器id>查看docker 日志

4、初始化配置服务复制集

# 进入容器中,创建的三个配置服务中随便一个
docker exec -it configsvr0 bash

# 登录mongo
mongo --host 10.0.0.1 --port 8000

# 初始化
rs.initiate({
    _id: "rs_configsvr",
    configsvr: true,
    members: [
            { _id : 0, host : "10.0.0.1:8000" },
            { _id : 1, host : "10.0.0.2:8000" },
            { _id : 2, host : "10.0.0.3:8000" }
        ]
    }
)

结果显示:

三、创建分片副本集

1、分片副本集配置文件

#所有用到的文件夹和文件必须在创建的时候给权限,包括重新创建,也需要重新给权限,并且文件夹要提前创建好
# mongod.conf
# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
  dbPath: /home/mongod/db #分片数据库路径
  journal:
    enabled: true
  directoryPerDB: true

#  engine:
#  mmapv1:
#  wiredTiger:
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/mongod/log/mongod.log # 分片日志

# network interfaces
net:
  bindIpAll: true

# how the process runs
#processManagement:
#  fork: true

# set auth?
setParameter:
  enableLocalhostAuthBypass: false

#operationProfiling:

replication:
  replSetName: rs_shardsvr0 #分片服务名称

sharding: 
   clusterRole: shardsvr

备注:详细配置可参见(http://docs.mongodb.org/manual/reference/configuration-options/

2、10.0.0.1 分片

1、分片服务器部署

docker run --name shardsvr00 -d -p 9005:27018 -v /home/mongod/shard0:/home/mongod docker.io/mongo:4.0.0 -f /home/mongod/conf/mongod.conf

2、分片服务副本集部署

docker run --name shardsvr00 -d -p 9006:27018 -v /data1/mongod/shard0:/home/mongod docker.io/mongo:4.0.0 -f /home/mongod/conf/mongod.conf

3、仲裁服务器

docker run --name shardsvr00 -d -p 9007:27018 -v /home/mongod/shard2:/home/mongod docker.io/mongo:4.0.0 -f /home/mongod/conf/mongod.conf

注意事项:

1、需要提前建立需要的文件夹。并赋予权限(chmod -R 777 文件夹)。

2、三个分片服务器建立在三个位置,(docker代码 -v 参数即为实际建立需要的文件夹),需要注意对应创建分片配置文件,文件内容一致。

3、注意配置文件中的数据库文件报错路径以及日志文件路径,按需更改。

4、分片服务端口需要映射 27018

结果显示:

4、初始化分片服务器 

# 登录进容器中
docker exec -it shardsvr00 bash

#登录分片服务器
mongo --host 10.0.0.1 --port 9000
rs.initiate(
    {
        _id : "rs_shardsvr0",
        members: [
            { _id : 0, host : "10.0.0.1:9000",priority:5 },
            { _id : 1, host : "10.0.0.1:9001",priority:3 },
            { _id : 2, host : "10.0.0.1:9002",arbiterOnly:true }
        ]
    }
)

#rs.status() 查看状态

3、10.0.0.2分片

1、分片服务器部署

docker run --name shardsvr10 -d -p 9005:27018 -v /home/mongod/shard0:/home/mongod docker.io/mongo:4.0.0 -f /home/mongod/conf/mongod.conf

2、分片服务副本集部署

docker run --name shardsvr10 -d -p 9006:27018 -v /data1/mongod/shard0:/home/mongod docker.io/mongo:4.0.0 -f /home/mongod/conf/mongod.conf

3、仲裁服务器

docker run --name shardsvr10 -d -p 9007:27018 -v /home/mongod/shard2:/home/mongod docker.io/mongo:4.0.0 -f /home/mongod/conf/mongod.conf

注意事项:

   需要更改配置服务器中的分片服务名称

结果显示:

4、初始化分片服务器 

# 登录进容器中
docker exec -it shardsvr10 bash

#登录分片服务器
mongo --host 10.0.0.2 --port 9005
rs.initiate(
    {
        _id : "rs_shardsvr0",
        members: [
            { _id : 0, host : "10.0.0.2:9005",priority:5 },
            { _id : 1, host : "10.0.0.2:9006",priority:3 },
            { _id : 2, host : "10.0.0.2:9007",arbiterOnly:true }
        ]
    }
)

#rs.status() 查看状态

四,创建mongos,连接mongos到分片集群

1、10.0.0.1

1、分片路由部署

docker run --name mongos0 -d -p 27017:27017 --entrypoint "mongos" docker.io/mongo:4.0.0 --configdb rs_configsvr/10.0.0.1:8000,10.0.0.2:8000,10.0.0.3:8000 --bind_ip_all

备注:

rs_configsvr/10.0.0.1:8000,10.0.0.2:8000,10.0.0.3:8000: 配置服务名称/配置服务端口(多个用逗号分隔)

结果显示

2、初始化mongos

# 进入mongos 容器中
docker exec -it mongos0 bash

# 连接mongos
mongo --host 127.0.0.1 --port 27017

# 添加分片服务器
sh.addShard("rs_shardsvr0/10.0.0.1:9000,10.0.0.1:9001,10.0.0.1:9002")
sh.addShard("rs_shardsvr1/10.0.0.2:9005,10.0.0.2:9006,10.0.0.2:9007")

结果展示

1

2、10.0.0.2 

1、分片路由部署

docker run --name mongos0 -d -p 27017:27017 --entrypoint "mongos" docker.io/mongo:4.0.0 --configdb rs_configsvr/10.0.0.1:8000,10.0.0.2:8000,10.0.0.3:8000 --bind_ip_all

备注:

rs_configsvr/10.0.0.1:8000,10.0.0.2:8000,10.0.0.3:8000: 配置服务名称/配置服务端口(多个用逗号分隔)

结果显示

2、初始化mongos

# 进入mongos 容器中
docker exec -it mongos0 bash

# 连接mongos
mongo --host 127.0.0.1 --port 27017

# 添加分片服务器
sh.addShard("rs_shardsvr0/10.0.0.1:9000,10.0.0.1:9001,10.0.0.1:9002")
sh.addShard("rs_shardsvr1/10.0.0.2:9005,10.0.0.2:9006,10.0.0.2:9007")

结果展示

1

备注:多个路由配置是相同的,不是搭建副本集(我自己理解的),路由1什么配置,怎么操作,路由2也一样。

  整个搭建Mongodb 集群就完成了,感兴趣可以自己尝试一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值