Mongo数据库集群搭建

目录

1、Mongo集群优势

1.1 高可用性

1.2 水平扩展性

1.3 高性能

1.4 灵活的架构设计

1.5 数据安全

1.6 管理与监控

2、下载指定操作系统版本包

3、部署和验证工作

3.1 准备配置文件及依赖

3.2 启动第一个节点

3.3 部署更多的节点

3.4 初始化副本集

3.5 设置管理员账户和密码

3.6 验证集群功能

4、常见问题


MongoDB因为使用比较方便,在研发或测试团队用的比较普遍,有时候可能因为成本和预算等原因,短期无法在云上买集群资源,只能在物理机器上部署,考虑一般机器部署的服务和使用的同学都比较多,单节点故障容错率较低,因此一般建议是部署集群模式,否则一台机器故障,可能导致服务不可用或数据丢失。下文简单介绍了Mongo集群优势、部署方法、常见问题。

1、Mongo集群优势

1.1 高可用性

  • 复制集实现故障转移:MongoDB 通过复制集(Replica Set)提供了高可用性。复制集包含一个主节点(Primary)和多个从节点(Secondary),当主节点发生故障时,从节点可以自动提升为主节点,确保服务不中断。
  • 读写分离:可以配置从节点处理读请求,降低主节点的负载,提高整体可用性。

1.2 水平扩展性

  • 分片(Sharding)支持大规模数据集
    • MongoDB 的分片功能允许将数据分布在多个服务器上,以便处理更大的数据集。
    • 分片支持自动均衡,确保各分片数据量和访问负载保持均衡。
  • 无单点瓶颈:通过增加节点,集群可以无限制扩展存储和计算能力,适合高增长的业务场景。

1.3 高性能

  • 并行处理:多个节点可以同时处理请求,利用分片和复制集的架构,支持更高的吞吐量。
  • 内存优先:MongoDB 使用内存映射机制,对于频繁访问的数据,性能优势明显。
  • 灵活的分片键:合理选择分片键可以优化查询性能,减少节点间的网络流量。

1.4 灵活的架构设计

  • 动态模式:MongoDB 以文档为中心的存储方式,不需要预定义模式(Schema),可以快速响应业务需求的变化。
  • 弹性伸缩:支持在运行时扩展和收缩集群,无需停机。
  • 地理分布:通过分片键设计和配置,可以根据地理位置分布数据,提高本地访问速度。

1.5 数据安全

  • 数据冗余:复制集通过多副本存储,提供数据冗余,防止单点故障导致数据丢失。
  • 数据一致性:通过写入确认机制(Write Concern),可以实现不同级别的数据一致性。

1.6 管理与监控

  • 自动化管理:MongoDB 提供工具如 MongoDB AtlasOps Manager,帮助快速部署和管理集群。
  • 实时监控:支持实时监控查询性能、节点状态和集群活动,便于发现和解决问题。

2、下载指定操作系统版本包

下载地址:MongoDB Atlas Database | Multi-Cloud Database Service | MongoDB,如下图所示,按需下载即可。

3、部署和验证工作

3.1 准备配置文件及依赖

以解压后bin文件夹所在的目录为根目录,建议使用配置文件方式启动。为了让目录结构更清晰,可以手动新建一些目录和文件:./logs日志文件夹、数据文件夹./data/db、配置文件./conf/config.yaml

除了基本的配置,那集群之间各节点的如何通信的呢?这个就涉及到keyFile文件的生成。

在MongoDB集群中,使用keyFile进行鉴权是一种常见的方法,它确保只有持有相同keyFile的节点能够相互通信和验证身份

假设我们的文件名为key_file,可以执行如下命令生成keyFile,目录根据实际需要指定就行。

openssl rand -base64 756 > key_file

设置keyFile权限:

  • 出于安全考虑,keyFile必须对MongoDB用户可读,并且其他用户不可读。你可以使用chmod命令将keyFile的权限设置为600(或400,但600更常见,因为它允许文件所有者读写文件,但不允许其他用户访问)。
  • 未设置时./logs/mongod.log日志可能会报错:"msg":"Error creating service context","attr":{"error":"Location5579201: Unable to acquire security key[s]"}}
chmod 600 /path/to/your/key_file

最后完整的./conf/config.yaml文件内容示例如下,注意将/path/to/your/dir改为你自己的地址。

systemLog:destination: filepath: /path/to/your/dir/logs/mongod.loglogAppend: true
storage:dbPath: /path/to/your/dir/data/dbwiredTiger:         # 最大缓存大小为50G,可选设置engineConfig:cacheSizeGB: 50.0 
net:bindIp: 0.0.0.0port: 8017
replication: # 副本集名称replSetName: mongoClusterTest
processManagement:fork: true
security: authorization: enabledkeyFile: /path/to/your/dir/data/key_file # 各节点相互通信和验证身份

3.2 启动第一个节点

./bin/mongod --fork -f ./conf/config.yaml

预期成功会输出:

% ./bin/mongod --fork -f ./conf/config.yaml
about to fork child process, waiting until server is ready for connections.
forked process: 84352
child process started successfully, parent exiting

此时我们已经成功启动了一个节点。

3.3 部署更多的节点

部署第二个、第三个或更多的节点方法和第一个节点类似,注意版本和配置文件保持一样即可。注意给key_file加权限。

chmod 600 /path/to/your/key_file

为了演示方便,假设现在我们在同一台机器成功启动了另外2个节点,端口分别为8018、8019,实际部署时建议在不同机房的机器。

3.4 初始化副本集

在部署机器上通过MongoDB Shell连接其中一个节点,比如第一个:

./bin/mongo --port 8017

如果没有./mongo,可以手动下载mongo shell工具,如果远程连接需要指定--host,也就是mongo部署的机器信息。

在 MongoDB Shell 中执行以下命令,初始化副本集,注意_id需要和配置文件中的replSetName字段值保持一致。

rs.initiate({_id: "mongoClusterTest", // 副本集名称,需与配置文件一致members: [{ _id: 0, host: "127.0.0.1:8017" },{ _id: 1, host: "127.0.0.1:8018" },{ _id: 2, host: "127.0.0.1:8019" }]
});

 预期成功后信息如下:

检查副本集状态, 使用以下命令查看详细信息,确保所有节点的状态为 PRIMARYSECONDARY

rs.conf();
rs.status();

3.5 设置管理员账户和密码

按需常见即可,可以设置数据库级别的权限。下面给出管理员用户的账户和密码示例。管理员用户负责管理整个 MongoDB 集群的权限。以下是创建管理员用户的步骤:

1、以无身份验证模式连接 MongoDB

 连接到primary主节点的 MongoDB(默认无身份验证时)。设置了后,后面连接时需要指定账户和密码。

2、切换到 admin 数据库

use admin;

3、创建管理员用户

假设账户名为zhangsan,密码为abc123456,按需来改就行。

db.createUser({user: "zhangsan",pwd: "abc123456", // 替换为强密码roles: [ { role: "root", db: "admin" } ]
});

 成功操作后的返回信息示例为:

3.6 验证集群功能

为了方便手动操作,我们可以结合一些可视化的工具来操作,比如:Studio 3T。

  • 连接信息,输入节点信息和账户密码。

  • 连接成功后可以看到集群各节点的信息。
  • 如果没问题了就可以右键创建数据库、表,测试数据的增删改查。

4、常见问题

1、报错『ERROR: child process failed, exited with error number 1』退出。

答:可以通过less ./logs/mongod.log查看日志。

2、缓存设置可以结合实际情况设置,比如最大限制为50G,默认为系统可用资源的一半左右。

答:在配置文件中的设置示例。

3、连接方式建议换成集群形式,不推荐使用单节点连接,因为集群节点重启可能会引起重新选举primary节点。手动重新选举有很多方式,可以参考:

强制重新选举(Step Down):MongoDB提供了rs.stepDown()方法,使当前primary节点放弃主节点角色,重新触发选举过程。新的primary节点会在剩余secondary节点中根据优先级选出。
rs.stepDown()
此命令需要在primary节点执行。执行后,当前primary节点会立即转换为secondary,且一段时间内不能重新竞选为primary。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DB Type

P位 p 1时段描述符有效,p 0时段描述符无效 Base Base被分成了三个部分,按照实际拼接即可 G位 如果G 0 说明描述符中Limit的单位是字节,如果是G 1 ,那么limit的描述的单位是页也就是4kb S位 S 1 表示代码段或者数据段描…

Qt 5.6.3 手动配置 mingw 环境

- 安装 qt 5.6.3 mingw 版 - 打开 qt creator - 找到选项 工具 - 选项- 构建和运行 - 找到 “编译器” 选项卡 ,点击 "添加" “编译器路径” 设置为 qt 安装目录下, tool 文件夹内的 g.exe 设置完成后,点击 "apply" ,使选项生…

k8s上部署redis高可用集群

介绍: Redis Cluster通过分片(sharding)来实现数据的分布式存储,每个master节点都负责一部分数据槽(slot)。 当一个master节点出现故障时,Redis Cluster能够自动将故障节点的数据槽转移到其他健…

抖音热门素材去哪找?优质抖音视频素材网站推荐!

是不是和我一样,刷抖音刷到停不下来?越来越多的朋友希望在抖音上创作出爆款视频,但苦于没有好素材。今天就来推荐几个超级实用的抖音视频素材网站,让你的视频内容立刻变得高大上!这篇满是干货,直接上重点&a…

Dify 通过导入 DSL 文件创建 Workflow 过程及实现

本文使用 Dify v0.9.2 版本,主要介绍 Dify 通过导入 DSL(或 URL)文件创建(或导出)Workflow 的操作过程及源码分析实现过程。Dify通过导入DSL文件创建Workflow过程及实现:https://z0yrmerhgi8.feishu.cn/wik…

代码随想录第46期 单调栈

这道题主要是单调栈的简单应用 class Solution { public:vector<int> dailyTemperatures(vector<int>& T) {vector<int> result(T.size(),0);stack<int> st;st.push(0);for(int i1;i<T.size();i){if(T[i]<T[st.top()]){st.push(i);}else{wh…

3步实现贪吃蛇

方法很简单&#xff0c;打开页面&#xff0c;复制&#xff0c;粘贴 一.整体思维架构 我们根据游戏的开始&#xff0c;运行&#xff0c;结束&#xff0c;将整个游戏划分成三个部分。在每个部分下面又划分出多个功能&#xff0c;接下来我们就根据模块一一实现功能。 二.Gamesta…

【linux012】文件操作命令篇 - more 命令

文章目录 more 命令1、基本用法2、常见选项3、交互式键盘命令4、举例5、注意事项 more 命令 more 是 Linux 中的一个分页查看命令&#xff0c;用于逐屏显示文件内容。它特别适合用于查看较长的文件&#xff0c;与 cat 不同&#xff0c;more 不会一次性输出所有内容&#xff0c…

机器学习笔记2 - 机器学习的一般流程

image.png 1、数据基本处理 数据集的划分 根据用途可将获取到的数据划分为训练集和测试集&#xff0c;有时还会有验证集。一般而言训练集用于训练模型&#xff0c;测试集用于测试模型的效果&#xff08;泛化误差&#xff09;。严格来讲&#xff0c;测试集的数据不能直接或间接&…

《C陷阱与缺陷》

文章目录 1、【词法陷阱】1.1 符号与组成符号间的关系1.1 与 1.3 y x/*p 与 y x/(*p)&#xff0c;a-1 与 a - 1 与 a -1, 老版本编译器的处理是不同的&#xff0c;严格的ANSI C则会报错1.4 十进制的 076&#xff0c;会被处理为八进制&#xff0c;ANSI C禁止这种用法&#x…

小白快速上手 labelme:新手图像标注详解教程

前言 本教程主要面向初次使用 labelme 的新手&#xff0c;详细介绍了如何在 Windows 上通过 Anaconda 创建和配置环境&#xff0c;并使用 labelme 进行图像标注。 1. 准备工作 在开始本教程之前&#xff0c;确保已经安装了 Anaconda。可以参考我之前的教程了解 Anaconda 的下…

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆&#xff0c;或许最大受益者仍是 AI&#xff0c;因为只有硬件才能为 AI 直接获取最真实世界的数据。 在人工智能与硬件融合的新时代&#xff0c;实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实&#xff0c;从空间视频到脑机接口&…

【STM32】MPU6050简介

文章目录 MPU6050简介MPU6050关键块带有16位ADC和信号调理的三轴MEMS陀螺仪具有16位ADC和信号调理的三轴MEMS加速度计I2C串行通信接口 MPU6050对应的数据手册&#xff1a;MPU6050 陀螺仪加速度计 链接: https://pan.baidu.com/s/13nwEhGvsfxx0euR2hMHsyw?pwdv2i6 提取码: v2i6…

ISP——你可以从这里起步(二)

接上一篇&#xff0c;上一篇是原理篇&#xff0c;这一篇是实战篇&#xff0c;为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图&#xff0c;即使获得了raw图也需要对应的sensor参数才能把它用起来&#xff0c;所以我找了一条野路子可以把…

Istio分布式链路监控搭建:Jaeger与Zipkin

分布式追踪定义 分布式追踪是一种用来跟踪分布式系统中请求的方法&#xff0c;它可以帮助用户更好地理解、控制和优化分布式系统。分布式追踪中用到了两个概念&#xff1a;TraceID 和 SpanID。 TraceID 是一个全局唯一的 ID&#xff0c;用来标识一个请求的追踪信息。一个请求…

【论文阅读】主动推理:作为感知行为的理论

文章目录 主动推理&#xff1a;作为感知行为的理论摘要1.引言2. 主动推理的概念和历史根源3. 主动推理的规范视角—以及它的发展历程 未完待续 主动推理&#xff1a;作为感知行为的理论 Active inference as a theory of sentient behavior 摘要 这篇文章综述了主动推理的历…

【MySQL】MySQL数据库入门:构建你的数据基石

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;MySQL初阶探索&#xff1a;构建数据库基础 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f985;数据库基础&#x1f400;什么是数据库&#x1f40f;主流数据库&#x1f986;MySQL数据库的基本…

6.584-Lab1:MapReduce

前置知识/概念 Raft 是一个基于“Leader”的协议&#xff0c;能够保证分布式网路的一致性。 RPC&#xff08;Remote Producer Call&#xff09; 参考链接1 参考链接2 Go中RPC的简单实现 Golang中regexp正则表达式的用法 https://gukaifeng.cn/posts/golang-zheng-ze-biao-…

抽象java入门1.5.3.1——类的进阶

前言&#xff1a;在研究神技代码Hello word的时候&#xff0c;发现了一个重大公式bug&#xff0c;在代码溯源中&#xff0c;我发现了一个奇怪的东西&#xff0c;就是OUT不是类中类&#xff08;不是常规类的写法&#xff09; 内容总结&#xff1a; 代码运行的顺序复习 正片开始…

人力资源招聘系统的革新之路:从传统到智能的转变

在全球化与数字化交织的今天&#xff0c;企业间的竞争日益激烈&#xff0c;而人才作为企业发展的核心驱动力&#xff0c;其重要性不言而喻。传统的人力资源招聘方式&#xff0c;如依赖纸质简历、人工筛选、面对面面试等&#xff0c;不仅效率低下&#xff0c;且难以精准匹配企业…