mongodb集群之副本集
目录
- 1. 适用场景
- 备份
- 高可用性
- 2. 集群搭建
- 如何搭建
- 资源规划
- 根据资源完成各节点conf文件的配置
- 启动各个mongodb节点
- 初始化集群信息
- 搭建实例
- Linux搭建实例(待定)
- Windows搭建实例
- 3. 副本集基础操作
- 4.集群平滑升级
1. 适用场景
备份
1)服务器磁盘余量不足以备份时
虽然mongo的mongodump也可以备份,但这种备份的过程是先备份出备份文件,然后在需要的时候使用文件进行恢复。这种方式的优点是移植性较高,备份文件可以随便复制到任何地方。不太好的情况是,这个备份文件最开始一定是先在执行备份命令的服务器上(一定在这里吗还是也可以远程备份呢),此时如果数据很大而服务器的磁盘容量不足以支持或者在备份之后剩余很少的时候,这种方式可能就有问题,所以可以考虑借助副本集冗余存储的特点进行远程备份。
2)想要备份到其他服务器
不想先备份再还原,而是直接备份到其他服务器上的。在这种业务场景下,我们只是借助副本集达成备份的功能,所以一般要在备份完之后把对应的节点剔除,如果原来使用单例模式启动mongo还需要恢复成单例的模式,避免影响原来的业务。
高可用性
一般,在千万量级以下应用中,正式环境大多会采用副本集来配置,提高数据服务的容错能力,也就是避免单点故障致使整个项目停服。采用副本集的情况下,主节点发生故障时能够切换,所以对外就跟没有故障一样。
相关文章:https://developer.aliyun.com/article/1532081
说明:上面是工作中遇到的场景,还有其他场景。
2. 集群搭建
如何搭建
资源规划
1)要用几个节点
一主一从
一主一从一冲裁
一主多从(2个从节点以上)
备注:一般推荐使用奇数个节点(其实不太理解,因为原来是奇数个,停掉一个之后不是也会变成偶数个吗,那么一开始是偶数应该也不会影响啊),防止无法选举出主节点的情况;如果全停,重新启动的话,一般先启动主节点,再启动从节点
遇到过的情况:只配置了2个节点时,第一次从主节点备份的时候因磁盘空间不足,导致从节点处于STARTUP状态,再次启动时没注意启动顺序,导致原来的主节点也处于STARTUP 状态,无法使用。
2)服务器资源规划
这个部分要提前规划好,不仅能一定程度避免出错,也是运维中重要的信息。主要考虑服务器,端口,相关文件位置(一般会需要数据、日志、配置、pid等文件,数据和配置是必须的,其他的根据自己的需求)。
-
服务器:如果是临时备份用可以根据实际情况选择,如果是业务用,一般选择一个服务器一个节点,而不是同一台服务器且服务器最好在不同地理区域,避免区域性故障导致全部出问题。
-
端口:一般使用默认端口27017,但有的时候为了安全或者端口已经被占用的情况,就需要根据实际需求和情况另选
-
数据文件:一般不要跟直接放在软件安装位置内,防止别人在不知道的情况下变更软件影响到数据(特别时是直接删除的时候影响很大)
根据资源完成各节点conf文件的配置
关键配置:端口、日志、数据、副本集名
启动各个mongodb节点
这一步还没有形成副本集,所以启动的顺序任意,在以后的启动建议都先启动主节点再启动从节点。
初始化集群信息
这一步指定了集群中的mongo实例信息、集群名、各实例的优先级,也可以根据需要添加其他配置。集群与非集群其实主要在于这一步,如果没进行初始化(配置文件不配置集群名),那么就是非集群式的mongo
搭建实例
Linux搭建实例(待定)
Windows搭建实例
1、资源规划
1)节点规划:一主二从
2)服务器资源规划
对应物理文件位置如下:
这些要提前创建好,这里可以根据自己的习惯分,可以把每个节点的信息单独放在一个路径下,也可以按照功能放,比如配置文件单独放一个文件夹,日志文件单独放一个文件夹,数据当然是每个节点单独放。
2、根据资源完成各节点conf文件的配置
这一步是整个流程最关键的,要注意各个节点的配置不要出现混乱。配置实例如下:
#mongodb端口
port=37027#绑定ip,只有这个ip才可以访问上mongodb;0.0.0.0表示所有的都可以访问,如果要做安全管控可以限制ip
bind_ip=0.0.0.0# 日志文件的路径
logpath=D:\mysoftware\MongoDB\zone\ser1\log\mongodb37027.log# 数据文件的目录
dbpath=D:\mysoftware\MongoDB\zone\ser1\data0-1#日志以追加的方式存在
logappend=true# fork=true linux以后台方式启动,在window上没有用# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
oplogSize=1024# 复制集的名称,同一个复制集的名称必须要相同
replSet=myreplace1
其他两个节点只需要按照规划好的资源替换一下端口、日志位置、数据位置即可。
3、启动各个mongodb节点
使用上一步规划好的配置文件启动对应实例,
4、初始化集群
进入某个(任意一个都可以)实例:
mongosh.exe --port 37027
初始化集群:
rs.initiate({_id : "myreplace1",members : [{_id : 0,host : "localhost:37027","priority":10},{_id : 1,host : "localhost:37028"},{_id : 2,host : "localhost:37029"}]
});
备注:
1)myreplace1为副本集名称,要跟conf文件的replSet保持一致,host为对应实例的IP + 端口
2)priority表示成位主节点的优先级,这里相当于让37027对应的实例优先成位主节点
3. 副本集基础操作
- rs.status():查看集群状态
- rs.hello():副本集成员信息和当前节点的状态
- rs.conf():查看集群配置,比如优先级什么的
- rs.secondaryOk() / rs.slaveOk ():临时开启从节点可执行相关命令(不同版本可能使用的不同)
更多操作见官方文档: https://mongodb.net.cn/manual/reference/method/js-replication/
4.集群平滑升级
方案一 从头安装一套新版本并使用原来配置文件启动对应节点
方案前置条件:
- 数据单独存放
- 配置文件最好单独存放
升级操作: - 采用压缩包安装方式,就只需要下载新版本然后解压就行,这就相当于中间件升级成功了
- 使用新版本mongo + 原来conf文件一起启动即可
升级顺序:
先从后主。因为主节点很关键,所以我们先升级从节点,也就是在从节点服务器上先停掉服务然后用mongo + 原来conf文件一起启动即可。主节点的升级稍微复杂一点,需要先将为从节点,然后再按照从节点的方式升级。
一般地,不要同时把主从都升级完,先升级从节点观察一小段时间没问题再升级主节点。
优点:操作简单,风险小(除非要删除旧版本,且数据正好放在这个路径内)。
缺点:
- 这个就相当于从头安装一遍,所以会同时存在多个版本的安装文件(其他的虽然停用),所以如果担心不同的人可能使用不同的版本,可以把原来的删掉,但是如果此时数据放在这里但是又漏看就容易出问题,这也是前面建议把数据单独分开放的原因。
- 不会自动添加服务路径,所以要么手动添加,要么每次启动切换路径或使用绝对路径
方案二 替换bin目录下的文件
这个没有实际操作,一开始查到的方案都是这种,但是教程说的都是二进制文件,当时没反应过来,什么二进制,二进制什么,在哪里,怎么拿到这个新的二进制文件。所以就没有使用这个方案。大概也是需要下载新的安装包,然后部分替换。具体方案可以自行查找其他教程。
之前更新其他软件的时候,也采用了替换部分替换的方式,但是因为偷懒以及不太清楚应该都要替换哪些文件,少替换了一部分所以导致更新完之后影响使用,且没有找到解决方式,只是暂时不使用那部分功能,所以对于这类方式个人目前还是比较谨慎。如果采用这样的方式一定要特别注意。
相关文章:

mongodb集群之副本集
目录 1. 适用场景备份高可用性 2. 集群搭建如何搭建资源规划根据资源完成各节点conf文件的配置启动各个mongodb节点初始化集群信息 搭建实例Linux搭建实例(待定)Windows搭建实例 3. 副本集基础操作4.集群平滑升级 1. 适用场景 备份 1)服务器…...

基于微服务架构的社交学习平台WEB系统的设计与实现
设计(论文)题目 基于微服务架构的社交学习平台WEB系统的设计与实现 摘 要 社交学习平台 web 系统要为学习者打造一个开放、互动且社交性强的在线教育环境,打算采用微服务架构来设计并实现一个社交学习平台 web 系统,以此适应学…...
window10下docker方式安装dify步骤
window10下docker方式安装dify步骤(稳定后考虑部署至linux中) 教程:https://blog.csdn.net/qq_49035156/article/details/143264534 教程:https://blog.csdn.net/m0_51171437/article/details/146069890 0、资源要求 ---windows…...
Spark SQL进阶:解锁大数据处理的新姿势
目录 一、Spark SQL,为何进阶? 二、进阶特性深剖析 2.1 窗口函数:数据洞察的新视角 2.2 高级聚合:挖掘数据深度价值 2.3 自定义函数(UDF 和 UDTF):拓展功能边界 三、性能优化实战 3.1 数…...

放假带出门的充电宝买哪种好用耐用?倍思超能充35W了解一下!
端午节的到来和毕业季的临近,让很多人开始计划出游或长途旅行。而在旅途中,一款好用耐用的充电宝可以省不少事。今天,我们就来聊聊放假带出门的充电宝买哪种好用耐用,看看为什么倍思超能充35W更适合带出门~ 一、为什么需要一款好用…...
云原生DMZ架构实战:基于AWS CloudFormation的安全隔离区设计
在云时代,传统的DMZ(隔离区)概念已经演变为更加灵活和动态的架构。本文通过解析一个实际的AWS CloudFormation模板,展示如何在云原生环境中构建现代化的DMZ安全架构。 1. 云原生DMZ的核心理念 传统DMZ是网络中的"缓冲区",位于企业内网和外部网络之间。而在云环境…...
小工具合集
Freetool.tools - Overview Freetool.tools is a 100% free online utility website offering a wide range of handy tools for everyday tasks. It focuses on simplicity, instant access, and zero cost—no signup, ads, or paywalls. ✅ Key Features & Strengths …...

AI智能体策略FunctionCalling和ReAct有什么区别?
Dify 内置了两种 Agent 策略:Function Calling 和 ReAct,但二者有什么区别呢?在使用时又该如何选择呢?接下来我们一起来看。 1.Function Calling Function Call 会通过将用户指令映射到预定义函数或工具,LLM 先识别用…...

改进自己的图片 app
1. 起因, 目的: 前面我写过一个图片 app , 最新做了些改动。 把原来的一列,改为3列, 继续使用瀑布流手机上使用,更流畅,横屏显示为2列。 2. 先看效果 3. 过程: 过程太细碎了,这里只是做一下…...
docker不用dockerfile
好的!既然你不想使用 Dockerfile,我们就完全不写 Dockerfile,改用你 Leader 提到的思路: 用基础镜像启动一个容器 → 手动在容器里安装依赖和复制项目 → 保存为新镜像 这个方式更直观,就像“你进入容器自己配置环境&a…...

Uniapp+UView+Uni-star打包小程序极简方案
一、减少主包体积 主包污染源(全局文件依赖)劲量独立导入 componentsstaticmain.jsApp.vueuni.css 分包配置缺陷,未配置manifest.json中mp-weixin节点 "usingComponents" : true,"lazyCodeLoading" : "requiredC…...
深度学习篇---Pytorch框架下OC-SORT实现
下面将详细介绍如何基于 PyTorch 框架实现 OC-SORT(Observation-Centric SORT)算法。OC-SORT 是一种高性能的多目标跟踪算法,特别适用于复杂场景下的目标跟踪。我们将从算法原理到具体实现逐步展开。 1. 算法概述与核心原理 OC-SORT 在传统…...
STM32 HAL库SPI读写W25Q128(软件模拟+硬件spi)
1. 引言 在嵌入式系统开发中,SPI(Serial Peripheral Interface)总线是一种常用的串行通信协议,用于在微控制器和外部设备之间进行高速数据传输。W25Q128 是一款常见的 SPI Flash 芯片,具有 128Mbit(16MB&a…...

算法题(159):快速幂
审题: 本题需要我们计算出(a^b)%c的值,并按照规定格式输出 思路: 方法一:暴力解法 我们直接循环b次计算出a^b,然后再取余c,从而得出最终结果 时间上:会进行2^31次,他的数量级非常大,…...

【新品发布】嵌入式人工智能实验箱EDU-AIoT ELF 2正式发布
在万物互联的智能化时代,将AI算法深度植入硬件终端的技术,正悄然改变着工业物联网、智慧交通、智慧医疗等领域的创新边界。为了助力嵌入式人工智能在教育领域实现高质量发展,飞凌嵌入式旗下教育品牌ElfBoard,特别推出嵌入式人工智…...

基于javaweb的SpringBoot体检管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
Mac Python 安装依赖出错 error: externally-managed-environment
Mac Python 使用 ip3 install -r requirements.txt 出错 This environment is externally managed ╰─> To install Python packages system-wide, try brew installxyz, where xyz is the package you are trying toinstall.If you wish to install a Python library th…...
Docker Desktop for Windows 系统设置说明文档
1. 文档概述 本文档旨在详细说明 Docker Desktop for Windows 应用程序中“设置 (Settings)”界面下的所有可配置选项及其子选项。对于每个配置项,我们将提供其功能描述、推荐配置(如适用)以及相关注意事项,帮助用户更好地理解和…...
C++高级编程深度指南:内存管理、安全函数、递归、错误处理、命令行参数解析、可变参数应用与未定义行为规避
C高级编程深度指南:内存管理、安全函数、递归、错误处理、命令行参数解析、可变参数应用与未定义行为规避 1. 可变参数1.1 可变参数的定义与原理1.2 使用可变参数的场景1.3 可变参数的实现方式1.3.1 省略号方式1.3.2 模板参数包方式 2.2 动态内存分配函数2.3 内存泄…...
【下拉选项数据管理优化实践:从硬编码到高扩展性架构】
下拉选项数据管理优化实践:从硬编码到高扩展性架构 背景 在大型前端项目中,下拉选项数据管理是一个常见但容易被忽视的痛点。我们的项目中存在多种格式的选项标识符,如代码格式(OPTION_A1)和数字格式(100…...

IPD的基础理论与框架——(四)矩阵型组织:打破部门壁垒,构建高效协同的底层
在传统的组织架构中,企业多采用直线职能制,就像一座等级森严的金字塔,信息沿着垂直的层级传递,员工被划分到各个职能部门。这种架构职责清晰、分工明确,在稳定的市场环境中,能让企业高效运作,发…...
深度学习篇---OC-SORT实际应用效果
OC-SORT 算法在实际应用中的效果可从准确性、鲁棒性、效率三个核心维度评估,其表现与传统多目标跟踪算法(如 SORT、DeepSORT)相比有显著提升,尤其在复杂场景中优势突出。以下是具体分析: 一、准确性:目标关联更可靠 1. 遮挡场景下的 ID 保持能力 优势表现: 传统算法(…...
讲述我的plc自学之路 第十一章
《凡人歌》,道出了我们每个人都是一个凡人,追逐功名利禄是每个人的特性,但也往往被世俗所伤。lora和我听着歌曲的同时,我能感觉到和她内心的那种共鸣和对世俗的妥协。 我以前是不信命的,但是经历过这么多社会的毒打&am…...
OpenLayers 图形绘制
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 图形绘制功能是指在地图容器中绘制点、线、面、圆、矩形等图形。图形绘制功能在WebGIS中具有重要作用,可以辅助查询、编辑、分析功能。本节主…...

小程序为什么要安装SSL安全证书
小程序需要部署SSL安全证书,这是小程序开发及运营的强制性要求,也是保障用户数据安全、提升用户体验和满足平台规范的必要措施。 一、平台强制要求 微信小程序官方规范 微信小程序明确要求所有网络请求必须通过HTTPS协议传输,服务器域名需配…...

python打卡训练营打卡记录day40
知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业:仔细学习下测试和训练代码…...
互联网大厂Java求职面试:Spring Boot 3.2+自动配置原理、AOT编译及原生镜像
标题:互联网大厂Java求职面试:Spring Boot 3.2自动配置原理、AOT编译及原生镜像 简述 本文详细探讨了在互联网大厂Java求职面试中,技术总监级别面试官与求职者郑薪苦之间的精彩对话,主题聚焦于Spring Boot 3.2自动配置原理、AOT…...
小型图书管理系统案例(用于spring mvc 实践)
小型图书管理系统案例 (Spring MVC Spring Data JPA Thymeleaf) 本项目案例旨在基于先前模块学习的 Spring MVC 知识,构建一个贴近企业实际的简单 Web 应用:小型图书管理系统。通过实现图书的 CRUD 操作、列表展示(含分页概念)…...

【清晰教程】利用Git工具将本地项目push上传至GitHub仓库中
Git 是一个分布式版本控制系统,由 Linus Torvalds 创建,用于有效、高速地处理从小到大的项目版本管理。GitHub 是一个基于 Git 的代码托管平台,提供了额外的协作和社交功能,使项目管理更加高效。它们为项目代码管理、团队协作和持…...

20250529-C#知识:静态类、静态构造函数和拓展方法
C#知识:静态类、静态构造函数和拓展方法 静态类一般用来编写工具类 1、静态类 用static关键字修饰的类一般充当工具类只能包含静态成员,不能包含静态索引器不能被实例化静态方法只能使用静态成员非静态方法既可以使用非静态成员,也可以使用静态成员 sta…...