前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker MongoDB v4.0.0 集群搭建

Docker MongoDB v4.0.0 集群搭建

作者头像
拓荒者
发布2019-09-19 11:12:18
1.8K0
发布2019-09-19 11:12:18
举报
文章被收录于专栏:运维经验分享运维经验分享

Docker MongoDB v4.0.0 集群搭建

2018年07月21日 16:17:41 vincerom 阅读数 3611

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/vincerom/article/details/81145938

Docker MongoDB v4.0.0 集群搭建

简单地在Docker环境上搭建一个无认证的MongoDB集群。 本文基于CentOS 7.4,MongoDB版本为4.0.0,Docker版本为17.09.0-ce

1. 本文使用的容器

集群角色

ContainerName

IP:port

Config Server

cfg_1

10.1.1.2:27019

Config Server

cfg_2

10.1.1.3:27019

Config Server

cfg_3

10.1.1.4:27019

Shard Server

shard1_1

10.1.1.5:27018

Shard Server

shard1_2

10.1.1.6:27018

Shard Server

shard1_3

10.1.1.7:27018

Shard Server

shard2_1

10.1.1.8:27018

Shard Server

shard2_2

10.1.1.9:27018

Shard Server

shard2_3

10.1.1.10:27018

Shard Server

shard3_1

10.1.1.11:27018

Shard Server

shard3_2

10.1.1.12:27018

Shard Server

shard3_3

10.1.1.13:27018

Mongos

mongos_1

10.1.1.14:27020

Mongos

mongos_2

10.1.1.15:27020

Mongos

mongos_3

10.1.1.16:27020

2. 从Docker Hub上拉取MongoDB镜像

代码语言:javascript
复制
docker pull mongo:4.0.0
  • 1

3. Docker网络配置

为MongoDB集群创建独立的docker网桥

代码语言:javascript
复制
docker network create --subnet=10.1.1.0/24 mongodb0
  • 1

4. 准备MongoDB集群配置文件

准备Docker挂载的目录

代码语言:javascript
复制
mkdir -p /home/dmc/configsvr
mkdir -p /home/dmc/shard1
mkdir -p /home/dmc/shard2
mkdir -p /home/dmc/shard3
mkdir -p /home/dmc/mongos
  • 1
  • 2
  • 3
  • 4
  • 5
  • Config-Server 配置文件 路径:/home/dmc/configsvr/mongod.conf 说明:MongoDB v3.4 之后要求Config-Server也需要组成副本集形式
代码语言:javascript
复制
storage:
  dbPath: /data/db
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
net:
  bindIp: 127.0.0.1
processManagement:
  timeZoneInfo: /usr/share/zoneinfo
replication:
  replSetName: cfg
sharding:
  clusterRole: configsvr
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • Shard-Server 配置文件 路径:/home/dmc/shard1/mongod.conf 说明:此处配置3个分片为shard1,shard2,shard3;每个分片都需要组成副本集。 shard2,shard3目录下配置文件同名,修改replSetName字段的值分别为’shard2’和’shard3’
代码语言:javascript
复制
storage:
  dbPath: /data/db
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
net:
  bindIp: 127.0.0.1
processManagement:
  timeZoneInfo: /usr/share/zoneinfo
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • Mongos 配置文件 路径:/home/dmc/mongos/mongos.conf 说明:mongos不需要存储因此去掉storage字段;可任意配置net.port字段,需要指定processManagement.fork为true以–fork方式启动;sharding.configDB字段用于指定Config-Server集群地址,格式为[replSetName]/[config-server1:port],[config-server2:port],[config-server3:port]…
代码语言:javascript
复制
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongos.log
net:
  port: 27020
  bindIp: 127.0.0.1
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo
sharding:
  configDB: cfg/10.1.1.2:27019,10.1.1.3:27019,10.1.1.4:27019
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5. 启动Docker容器

  • 启动3个Config-Server容器:
代码语言:javascript
复制
docker run -d --name=cfg_1 --network=mongodb0 --ip=10.1.1.2 -v /home/dmc/configsvr:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=cfg_2 --network=mongodb0 --ip=10.1.1.3 -v /home/dmc/configsvr:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=cfg_3 --network=mongodb0 --ip=10.1.1.4 -v /home/dmc/configsvr:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
  • 1
  • 2
  • 3

进入其中一个容器配置Config-Server副本集:

代码语言:javascript
复制
# 宿主机
docker exec -it cfg_1 bash
# 容器中
mongo --port 27019
# Mongo Shell中
rs.initiate({
    "_id":"cfg",
    "members":[
        {
            "_id":0,
            "host":"10.1.1.2:27019"
        },
        {
            "_id":1,
            "host":"10.1.1.3:27019"
        },
        {
            "_id":2,
            "host":"10.1.1.4:27019"
        }
    ]
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 启动3*3个Shard-Server容器: 说明:分片服务器启动后默认是以27018作为端口。
代码语言:javascript
复制
# 启动第一个分片 - shard1
docker run -d --name=shard1_1 --network=mongodb0 --ip=10.1.1.5 -v /home/dmc/shard1:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=shard1_2 --network=mongodb0 --ip=10.1.1.6 -v /home/dmc/shard1:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=shard1_3 --network=mongodb0 --ip=10.1.1.7 -v /home/dmc/shard1:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
  • 1
  • 2
  • 3
  • 4

进入其中一个容器配置Shard-Server副本集:

代码语言:javascript
复制
# 宿主机
docker exec -it shard1_1 bash
# 容器中
mongo --port 27018
# Mongo Shell中
rs.initiate({
    "_id":"shard1",
    "members":[
        {
            "_id":0,
            "host":"10.1.1.5:27018"
        },
        {
            "_id":1,
            "host":"10.1.1.6:27018"
        },
        {
            "_id":2,
            "host":"10.1.1.7:27018"
        }
    ]
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
代码语言:javascript
复制
# 启动第二个分片 - shard2
docker run -d --name=shard2_1 --network=mongodb0 --ip=10.1.1.8 -v /home/dmc/shard2:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=shard2_2 --network=mongodb0 --ip=10.1.1.9 -v /home/dmc/shard2:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=shard2_3 --network=mongodb0 --ip=10.1.1.10 -v /home/dmc/shard2:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
  • 1
  • 2
  • 3
  • 4

进入其中一个容器配置Shard-Server副本集:

代码语言:javascript
复制
# 宿主机
docker exec -it shard2_1 bash
# 容器中
mongo --port 27018
# Mongo Shell中
rs.initiate({
    "_id":"shard2",
    "members":[
        {
            "_id":0,
            "host":"10.1.1.8:27018"
        },
        {
            "_id":1,
            "host":"10.1.1.9:27018"
        },
        {
            "_id":2,
            "host":"10.1.1.10:27018"
        }
    ]
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
代码语言:javascript
复制
# 启动第三个分片 - shard3
docker run -d --name=shard3_1 --network=mongodb0 --ip=10.1.1.11 -v /home/dmc/shard3:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=shard3_2 --network=mongodb0 --ip=10.1.1.12 -v /home/dmc/shard3:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
docker run -d --name=shard3_3 --network=mongodb0 --ip=10.1.1.13 -v /home/dmc/shard3:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
  • 1
  • 2
  • 3
  • 4

进入其中一个容器配置Shard-Server副本集:

代码语言:javascript
复制
# 宿主机
docker exec -it shard3_1 bash
# 容器中
mongo --port 27018
# Mongo Shell中
rs.initiate({
    "_id":"shard3",
    "members":[
        {
            "_id":0,
            "host":"10.1.1.11:27018"
        },
        {
            "_id":1,
            "host":"10.1.1.12:27018"
        },
        {
            "_id":2,
            "host":"10.1.1.13:27018"
        }
    ]
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 启动3个mongos服务器 说明:这里也使用了mongo镜像,但是需要开启mongos进程,mongod进程并不需要用到。
代码语言:javascript
复制
docker run -d --name=mongos_1 --network=mongodb0 --ip=10.1.1.14 -v /home/dmc/mongos:/etc/mongodb mongo:4.0.0
docker run -d --name=mongos_2 --network=mongodb0 --ip=10.1.1.15 -v /home/dmc/mongos:/etc/mongodb mongo:4.0.0
docker run -d --name=mongos_3 --network=mongodb0 --ip=10.1.1.16 -v /home/dmc/mongos:/etc/mongodb mongo:4.0.0
  • 1
  • 2
  • 3

进入每个容器中,启动mongos进程(此处可以改进一下,自动运行mongos进程)

代码语言:javascript
复制
# 宿主机
docker exec -it mongos_1 bash
# 容器中
mongos -f /etc/mongodb/mongos.conf
  • 1
  • 2
  • 3
  • 4

可以就在其中一个mongos容器中使用mongo shell连接mongos进程配置分片集群。

代码语言:javascript
复制
# 连接mongos,端口号与mongos配置文件中设定一致
mongo -port 27020
# 将分片加入集群
sh.addShard("shard1/10.1.1.5:27018,10.1.1.6:27018,10.1.1.7:27018")
sh.addShard("shard2/10.1.1.8:27018,10.1.1.9:27018,10.1.1.10:27018")
sh.addShard("shard3/10.1.1.11:27018,10.1.1.12:27018,10.1.1.13:27018")

# 对数据库开启分片功能
sh.enableSharding("[dbName]")
# 对数据库中集合开启分片,并指定片键
sh.shardCollection("[dbName.collectionName]",{[keyName]:1})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

6. 尝试写入数据观察数据分块

代码语言:javascript
复制
# 插入5百万个简单的文档,耐心等待插入结束
for(var i=1;i<=5000000;i++){
    db.coll1.insert({
        name:i,
        age:Math.round(Math.random() * 100),
        score1:Math.round(Math.random() * 100),
        score2:Math.round(Math.random() * 100),
        score3:Math.round(Math.random() * 100),
        score4:Math.round(Math.random() * 100),
        score5:Math.round(Math.random() * 100)
    });
}

# 查看分片状态
sh.status()

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker MongoDB v4.0.0 集群搭建
  • Docker MongoDB v4.0.0 集群搭建
    • 1. 本文使用的容器
      • 2. 从Docker Hub上拉取MongoDB镜像
        • 3. Docker网络配置
          • 4. 准备MongoDB集群配置文件
            • 5. 启动Docker容器
              • 6. 尝试写入数据观察数据分块
              相关产品与服务
              容器镜像服务
              容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档