【MongoDB】docker部署mongdb多机集群(跨主机副本集)

2023-11-19

目录

概述-MongoDB Replication(官方英文文档)

​​​​​​冗余&&数据可用性

MongoDB副本集

多主机多节点docker部署流程

概述

环境准备:

部署步骤:

参考文献


概述-MongoDB Replication(官方英文文档)

        单主机多节点的集群docker部署请移步至该参考文献

        MongoDB中的副本集可以理解为同一组维护相同数据集的mongod进程。副本集作为所有生产部署的基础,它提供了冗余性、高可用性。下面主要介绍MongoDB中的副本以及副本集的组件及其架构。

  • ​​​​​​冗余&&数据可用性

      副本集相当于在多个数据库服务端(或者说多个节点)进行了数据备份,这种方式有效提高了单节点数据库服务段的容错能力。也就是说当某个节点发生异常后,仍然可以从其他节点获取数据。副本集允许客户端从不同的服务端读取数据,因此该部署方式提供了更强大的数据读取的能力。在不同节点上维护副本集可以提高数据局部性以及数据可用性。

  • MongoDB副本集

        一个副本集由多个mongod实例组成,这些mongod实例维护着相同的数据集。副本集的组成包括多个数据负载节点1个可选的仲裁节点。其中,多个数据负载节点中=1个主节点+多个从节点

       主从节点及其关系:如下方左图所示,主节点能够接受所有的读写操作;对于某个副本集来讲,通常只允许1个主节点存在。如下方右图所示,从节点相当于继承了主节点的操作,复制了主节点的数据集以保证各个节点的数据统一。

​  

        如下左图所示,当存在主、从节点时,可以添加仲裁节点。其作用面对异常情况(比如说主节点出现连接超时的情况时候,其他从节点就会被选举为主节点,这种情况可以粗浅对应下右图所示的状态)通过选举机制推选主节点。仲裁节点不存储数据集,并且其本身不会参与选举,也就是说不管总、从节点如何变化,仲裁节点都不会变化。

         此外,客户端进行数据查询等操作时默认是请求主节点的,不过MongoDB副本集允许客户端优先从指定的从节点进行数据库的读取操作。


多主机多节点docker部署流程

概述

        分别部署主节点、从节点、仲裁节点至3台服务器;

环境准备:

        安装docker、提前拉取mongo镜像等;

部署步骤:


  •  修改3台服务器的/etc/hosts
# vim /etc/hosts
192.168.***.131:node1.example.com(主节点)
192.168.***.132:node2.example.com(从节点)
192.168.***.133:node3.example.com(仲裁节点)

  • 创建数据库文件存放路径结构(其中data用于存放数据库文件)
# 在3台服务器上的自定义路径下创建如下路径
|-- mongo_replication
    |-- data

  • 创建主节点密钥文件(其他节点进行远程复制)
cd /data/mongo_replication
openssl rand -base64 741 > mongodb-keyfile
# 创建的密钥文件拷贝到其他各节点的相同路径下
chmod 600 mongodb-keyfile
chown 999 mongodb-keyfile

  • 创建主节点的mongodb服务并创建用户 
docker run --network host --name mongo -v /data/mongo_replication/data:/data/db \
-v /data/mongo_replication:/opt/keyfile --hostname="node1.example.com" \
-p 27017:27017 -d mongo

# 进入容器进行用户创建
docker exec -it mongo mongosh admin
# 创建用户
db.createUser({user:"UserAdmin", pwd:"user_123456", roles:[{role:"userAdminAnyDatabase", db: "admin"}]});
# 创建管理员用户
db.createUser({user:"RootAdmin", pwd:"root_123456", roles:[{role:"root", db: "admin"}]});


  • 利用密钥文件创建MongoDB服务
docker stop mongo && docker rm mongo
#
docker run --network host --name mongo -v /data/mongo_replication/data:/data/db \
-v /data/mongo_replication:/opt/keyfile --hostname="node1.example.com" \
--add-host node1.example.com:${node1} \
--add-host node2.example.com:${node2} \
--add-host node3.example.com:${node3} \
-p 27017:27017 -d mongo \
--keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"


  • 配置副本集 
# 进入容器进行用户创建
docker exec -it mongo mongosh admin
db.auth("RootAdmin", "root_123456"); # 登录用户
rs.initiate # 初始化副本集

最初想在此处直接配置从节点、仲裁节点,但忽略了未创建从节点服务时无法进行连接,因此先使用默认配置初始化主节点,我们在后面再在集群内通过添加节点的方法进行从节点/仲裁节点的分配。


  •  启动各从节点与仲裁节点:
docker run --network host --name mongo -v /data/mongo_replication/data:/data/db \
-v /data/mongo_replication:/opt/keyfile --hostname="node2.example.com" \
--add-host node1.example.com:${node1} \
--add-host node2.example.com:${node2} \
--add-host node3.example.com:${node3} \
-p 27017:27017 -d mongo \
--keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"

docker run --network host --name mongo -v /data/mongo_replication/data:/data/db \
-v /data/mongo_replication:/opt/keyfile --hostname="node3.example.com" \
--add-host node1.example.com:${node1} \
--add-host node2.example.com:${node2} \
--add-host node3.example.com:${node3} \
-p 27017:27017 -d mongo \
--keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"

 依次启动从节点/仲裁节点的服务后,首先在集群内添加从节点,也就是节点2,添加成功!

 在添加节点3为仲裁节点时发生报错,根据官方文档结合网上解决办法进行解决了该问题,如下:

   

加入仲裁节点成功,此时查看集群配置:node1、node2、node3已分别配置为主、从、仲裁节点。

到这里,实际已经完成了本次跨主机的集群部署,后文我们验证下结果。

附配置成功的命令行:

rs.add("node2.example.com")  # 添加从节点
db.adminCommand({"setDefaultRWConcern":1, "defaultWriteConcern":{"w":2}})
rs.addArb("node3.example.com")  # 添加仲裁节点

  • 数据同步测试等 

 在主节点执行数据插入操作:

 在从节点查看数据同步情况: 

 利用mongo-compass查看集群情况:

参考文献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MongoDB】docker部署mongdb多机集群(跨主机副本集) 的相关文章

随机推荐

  • Gikee 大数据

    据Gikee数据显示 今日13 58分 地址 1MAhRt279uYmVC1dUxKR6dWwEULBJT34Nh 向地址 1Fc4QQu6nEc4snAe4HAb4Kryd8koH89pYk 转了34010个BTC 价值约2 17亿美元
  • stm32USB之模拟U盘

    STMF0 W25Q32模拟U盘 1 第一次写博客 如有错误 请及时指正 如有表达不通顺的地方 敬请谅解 2 本篇文章主要描述如何使用STM32cube配置USB 使用的主控为STM32F072 Flash为W25Q32 使用的主控RAM只
  • scrapy爬虫错误一:无法爬到期望的数据

    最近在开始学习scrapy爬虫 遇到了一处很坑的地方 在屏幕上输出的debug信息总是没有任何结果就直接提示 scrapy statscollectors INFO Dumping Scrapy stats scrapy core engi
  • 2023算法面试题1

    1 介绍SAM模型 2 大语言模型的微调方法 3 yolov8与yolov5的区别 4 介绍LoRA和QLoRA微调技术 5 negative prompt怎么做的 6 stable diffusion的结构与原理
  • tc 流控脚本

    系统平台 RedHat AS4 root bridgenet software uname a Linux bridgenet 2 6 9 42 ELsmp 1 SMP Wed Jul 12 23 27 17 EDT 2006 i686 i
  • upf仿真例子

    原文链接 关于什么是UPF以及电源域等等概念赛宝龙在这里就不多说了 有兴趣的可以查阅IEEE1801 2013标准 先上低功耗要求 即power intent 顶层模块为TOP 而TOP中例化了一个子模块 其例化名为instA1 具体的代码
  • 危化安全生产信息化平台在煤化领域的应用

    一 背景介绍 煤化工行业是一个集煤炭 石油 化工等多种产业于一体的综合性行业 其特点是工艺流程复杂 设备繁多 安全隐患大 近年来 随着煤化工行业的快速发展 安全生产问题日益凸显 为了有效提高危化安全生产水平 某煤化工企业引入了信息化技术 搭
  • Springboot+Websocket中@Autowired注入service为null的解决方法

    使用工具类用于从Spring的上下文中去获取到类的实例 ServerEndpoint websocket userId Component 关键点1 public class WebSocket private static UserSer
  • 高效程序员的40个好习惯和行为方式

    每一个好的习惯 开头都会相应有一个唱反调的句子哦 1 做事 出了问题 第一重要的是确定元凶 找到那个人 一旦证实了是他的错误 就可以保证这样的问题永远也不会再发生了 指责不会修复bug 把矛头对准问题的解决办法 而不是人 这是真正有用处的正
  • Modbus​协议​深入​讲解_NI

    from https www ni com zh cn innovations white papers 14 the modbus protocol in depth html 已 更新 Mar 5 2019
  • hutool的json工具完成list和json转换

    将json和list相互转换 import cn hutool json JSONArray import cn hutool json JSONUtil List转Json maps是List类型的参数 String json JSONU
  • 因果系列文章(10)—— 因果关系发现

    如何从纷繁复杂的数据中发现其中隐含因果关系 就是因果关系发现 casual discovery 要做的工作 本节简要总结这方面的工作 主要材料来源于 Elements of Causal Inference Foundations and
  • 基于Fruits-360数据集构建CNN进行水果识别实验

    基于Fruits 360数据集的水果识别项目 前段时间导师要求做一个神经网络可视化的项目 要将水果数据集进行训练得到模型 用于TensorSpace可视化 前前后后捣鼓了很久 现在回过头总结一下整个项目过程 写下这篇博客记录遇到的问题 有任
  • CTF刷题

    刷题网站 bugku BUUCTF 本文记录了在刷题过程中所学到的知识点 坚持每天刷5道题 持续更新 坚持就是胜利鸭 CTF 1 bugku Simple SSLI 1 根据题目SSLI即服务端模板注入攻击 服务段接收用户输入 将其作为we
  • react数组遍历与onClick()点击事件

    import Component from react const user name Tom age 18 sex 男 name alice age 18 sex 女 name Time age 18 sex 女 class home e
  • MySQL_JDBC_jar包的下载与使用(for Windows)

    目录 1 下载 2 使用 1 下载 打开网站 MySQL Download Connector Jhttps dev mysql com downloads connector j 选择系统如下图 选择第二个下载 后缀为zip的 解压下载的
  • 分布式系统的特征

    分布式系统概念与设计 读书笔记 第一章 第一章 分布式系统的特征 1 0 简介 分布式系统是其组件分布在联网的计算机上 组件之间通过传递消息进行通信和动作协调的系统 该定义引出了分布式系统的下列重要特征 组建的并发性 缺乏全局时钟 组件故障
  • JS有小数保留两位,整数不显示小数

    在很多时候要展示数据 会有各种小数处理 碰到页面的数据要根据不同的情况展示不同格式的数据 比如得到的数据是一个小数 现在要将小数保留两位 而整数则不显示小数点 显示整数格式 使用toFixed n 方法 toFixed 2 里面的2表示保留
  • Python django jwt 报错 unexpected keyword argument ‘verify‘解决方法

    本文主要介绍Python中 使用django jwt时报错 TypeError decode got an unexpected keyword argument verify 的解决 原文地址 Python django jwt 报错 u
  • 【MongoDB】docker部署mongdb多机集群(跨主机副本集)

    目录 概述 MongoDB Replication 官方英文文档 冗余 数据可用性 MongoDB副本集 多主机多节点docker部署流程 概述 环境准备 部署步骤 参考文献 概述 MongoDB Replication 官方英文文档 单主