Docker MongoDB v4.1.6集群搭建

2024-01-02 14:58

本文主要是介绍Docker MongoDB v4.1.6集群搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Docker MongoDB v4.1.6 集群搭建
简单地在Docker环境上搭建一个无认证的MongoDB集群。
本文基于ubuntu18.04,MongoDB版本为4.1.6,Docker版本为19.0.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镜像
docker pull mongo:4.1.6

3. Docker网络配置
为MongoDB集群创建独立的docker网桥

docker network create --subnet=10.1.1.0/24 mongodb0
4. 准备MongoDB集群配置文件
准备Docker挂载的目录

mkdir -p /home/w/mongoDB/configsvr
mkdir -p /home/w/mongoDB/shard1
mkdir -p /home/w/mongoDB/shard2
mkdir -p /home/w/mongoDB/shard3
mkdir -p /home/w/mongoDB/mongos
Config-Server 配置文件
路径:/home/w/mongoDB/configsvr/mongod.conf
说明:MongoDB v3.4 之后要求Config-Server也需要组成副本集形式
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
Shard-Server 配置文件
路径:/home/w/mongoDB/shard1/mongod.conf
说明:此处配置3个分片为shard1,shard2,shard3;每个分片都需要组成副本集。
shard2,shard3目录下配置文件同名,修改replSetName字段的值分别为’shard2’和’shard3’
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
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]…
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
5. 启动Docker容器
启动3个Config-Server容器:
docker run -d --name=cfg_1 --network=mongodb0 --ip=10.1.1.2 -v /home/w/mongoDBconfigsvr:/etc/mongodb mongo:4.1.6 -f /etc/mongodb/mongod.conf
docker run -d --name=cfg_2 --network=mongodb0 --ip=10.1.1.3 -v /home/w/mongoDB/configsvr:/etc/mongodb mongo:4.1.6 -f /etc/mongodb/mongod.conf
docker run -d --name=cfg_3 --network=mongodb0 --ip=10.1.1.4 -v /home/w/mongoDB/configsvr:/etc/mongodb mongo:4.1.6 -f /etc/mongodb/mongod.conf

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

# 宿主机
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"
        }
    ]
})
启动3*3个Shard-Server容器:
说明:分片服务器启动后默认是以27018作为端口。
# 启动第一个分片 - 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

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

# 宿主机
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"
        }
    ]
})
# 启动第二个分片 - 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
进入其中一个容器配置Shard-Server副本集:

# 宿主机
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"
        }
    ]
})
# 启动第三个分片 - 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
进入其中一个容器配置Shard-Server副本集:

# 宿主机
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"
        }
    ]
})
启动3个mongos服务器
说明:这里也使用了mongo镜像,但是需要开启mongos进程,mongod进程并不需要用到。
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

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

# 宿主机
docker exec -it mongos_1 bash
# 容器中
mongos -f /etc/mongodb/mongos.conf

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

# 连接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})

6. 尝试写入数据观察数据分块
# 插入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()

这篇关于Docker MongoDB v4.1.6集群搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/562797

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、