当前位置: 首页 > news >正文

MongoDB-副本集

主页.png

一、什么是 MongoDB 副本集?

1.副本集的定义

MongoDB 的副本集(Replica Set)是一组 MongoDB 服务器实例,它们存储同一数据集的副本,确保数据的高可用性和可靠性。副本集中的每个节点都有相同的数据副本,但并不是所有节点都可以直接响应客户端请求。

副本集中的节点有不同的角色:

  • Primary 节点:主节点,所有写操作都在这个节点上执行,客户端只能写入主节点。每个副本集只能有一个主节点。
  • Secondary 节点:副节点,副本集中的数据复制到这些节点,支持读取操作。副节点会从主节点同步数据。
  • Arbiter 节点:仲裁节点,不存储数据,仅用于参与选举,帮助决定主节点的变更。仲裁节点不承担数据存储的职责,但在副本集发生故障时发挥作用。

副本集提供了故障恢复、自动切换(自动选举)以及数据冗余等特性,是保证 MongoDB 集群高可用性和灾难恢复的核心机制。

2.副本集的优势

副本集提供了以下几个重要的优势:

  • 高可用性:副本集通过自动故障转移和数据复制,确保在某个节点故障时,系统可以自动切换到其他节点,保证服务的持续可用性。
  • 数据冗余:副本集中的每个节点都存储着完整的数据副本,即使某个节点宕机,数据依然能够通过其他节点恢复。
  • 读写分离:通过将读取操作分配给 Secondary 节点,副本集可以实现一定程度的读写分离,从而减轻主节点的负担。
  • 自动恢复:如果副本集中的 Primary 节点宕机,副本集会自动选举新的 Primary 节点,确保业务不间断。

二、如何配置 MongoDB 副本集?

1.创建副本集

MongoDB 副本集的创建非常简单,通常的配置步骤如下:
1、启动副本集成员

假设我们有三个 MongoDB 实例,分别运行在不同的服务器或端口上,首先启动每个 MongoDB 实例并指定副本集的名称。假设副本集的名称是 rs0,以下是启动 MongoDB 实例的命令:mongod --replSet rs0 --port 27017 --dbpath /data/db1 --bind_ip 127.0.0.1
mongod --replSet rs0 --port 27018 --dbpath /data/db2 --bind_ip 127.0.0.1
mongod --replSet rs0 --port 27019 --dbpath /data/db3 --bind_ip 127.0.0.1
--replSet rs0:指定副本集的名称为 rs0。
--port:指定每个实例的端口号。
--dbpath:指定每个实例的数据存储路径。

2、连接到 MongoDB 实例

使用 mongo 命令连接到副本集中的一个实例(例如端口 27017):

mongo --port 27017

3、初始化副本集
在 MongoDB shell 中执行以下命令来初始化副本集:

rs.initiate()

这将会启动副本集,并将当前节点设置为 Primary。如果系统中已经有多个节点在运行,MongoDB 会尝试自动加入其他节点。

4、添加其他节点到副本集

通过 rs.add() 命令添加更多的节点。例如,添加端口 27018 和 27019 的节点:

rs.add("localhost:27018")
rs.add("localhost:27019")

这样,副本集就完成了初始化,Primary 节点和 Secondary 节点开始同步数据。

2.查看副本集状态

使用 rs.status() 命令查看副本集的状态:

rs.status()

这将显示副本集的详细信息,包括各个节点的状态、选举情况等。

3.配置仲裁节点(Arbiter)

如果副本集中的节点数不为奇数,MongoDB 推荐配置一个仲裁节点来帮助选举过程。仲裁节点不存储数据,只负责选举工作,保证副本集的稳定性。

添加仲裁节点的命令:

rs.addArb("localhost:27020")

三、副本集的工作原理

1.数据同步与复制

副本集中的 Secondary 节点 会持续从 Primary 节点 拉取数据更新,确保所有副本节点的数据一致性。这个过程称为 数据复制。

  • 同步方式:Secondary 节点通过 oplog(操作日志)同步数据。oplog 是一个固定大小的循环日志,记录了所有对主节点的写操作。
  • 增量同步:副本集节点并不会全量复制数据,而是通过增量同步的方式将变化的数据同步到副本节点,从而减少了带宽和存储的消耗。
2.自动故障切换(Failover)

副本集的一个重要特性是自动故障切换。当 Primary 节点 宕机时,副本集会自动触发选举过程,选举一个 Secondary 节点 为新的 Primary。这个过程通常会在几秒钟内完成,最大程度地减少系统的停机时间。

3.选举过程

副本集使用一种 选举算法 来选举新的 Primary 节点。选举过程的核心原则是:

  • 副本集中的所有节点都可以参与选举。
  • 选举过程通过比较节点的 优先级 和 投票 来决定新的 Primary 节点。
  • Arbiter 节点参与选举,但不存储数据,也不承担主节点角色。
4.写入一致性和读取一致性

MongoDB 副本集中的写操作通常是通过 Primary 节点 执行的,而读取操作可以根据需求选择 Primary 或 Secondary 节点。MongoDB 提供了 读取偏好(Read Preference)机制,允许开发者指定读取操作的优先级:

  • primary:只从 Primary 节点读取。
  • secondary:只从 Secondary 节点读取。
  • primaryPreferred:默认从 Primary 读取,如果 Primary 不可用则从 Secondary 读取。
  • secondaryPreferred:默认从 Secondary 读取,如果没有 Secondary 节点则从 Primary 读取。
  • nearest:从最近的节点读取,无论是 Primary 还是 Secondary。

四、副本集的管理与维护

1.监控副本集

MongoDB 提供了多种方式来监控副本集的健康状况和性能:

  • rs.status():查看副本集的状态。
  • rs.printSlaveReplicationInfo():查看副本集的复制信息。
  • mongostat:用于实时监控 MongoDB 实例的性能。
  • mongotop:查看 MongoDB 实例的操作情况和表的访问频率。
2.手动故障切换

在某些情况下,您可能需要手动触发副本集的故障切换。例如,当您需要将某个 Secondary 节点提升为 Primary 时,可以使用以下命令:

rs.stepDown()

这个命令会让当前的 Primary 节点退让,并触发选举过程。

3.数据恢复

如果副本集的某个节点丢失了数据,可以通过以下步骤恢复:

  • 确保数据没有被完全覆盖,可以使用 --repair 参数进行修复。
  • 从其他副本集成员中同步数据。

二维码.png

相关文章:

MongoDB-副本集

一、什么是 MongoDB 副本集? 1.副本集的定义 MongoDB 的副本集(Replica Set)是一组 MongoDB 服务器实例,它们存储同一数据集的副本,确保数据的高可用性和可靠性。副本集中的每个节点都有相同的数据副本,但…...

【图像处理lec7】图像恢复、去噪

目录 一、图像退化与恢复概述 二、图像退化中的噪声模型 1、使用 imnoise 函数添加噪声 (1)imnoise 函数的概述 (2)函数语法 (3)支持的噪声类型与具体语法 (4)噪声类型的详细…...

C# 连接ClickHouse 数据库

在 C# 中连接 ClickHouse 数据库,您可以使用 ClickHouse.Client 库。这个库提供了对 ClickHouse 数据库的高效访问。以下是详细的步骤指南,帮助您在 C# 项目中连接和操作 ClickHouse 数据库。 1. 安装 ClickHouse.Client 包 首先,您需要在您…...

在安卓Android应用中实现二维码图像的保存与条形码文本合并

在开发Android应用时,我们经常需要处理图像和文本数据,特别是当涉及到二维码生成和条形码信息展示时。本文将介绍如何在Android应用中实现一个功能,即将二维码图像保存到设备存储,并在图像下方添加条形码文本信息。为了实现这一功…...

Vue3 重置ref或者reactive属性值

需要重新定义一个对象绑定复制给原对象 。 实例代码: const data () > ({groupId: ,groupCode: ,groupName: ,groupType: ,});const formData ref(data());//重置对象值 const reset()>{Object.assign(formData, data()…...

深入理解STL list erase

1、list erase后&#xff0c;当前的迭代器失效&#xff0c;返回指向下一个节点的迭代器 #include<list> #include<iostream> #include<vector> using namespace std;int main() {list<int> ls;ls.push_back(1);ls.push_back(2);ls.push_back(3);list&…...

使用 Python 从 ROS Bag 中提取图像:详解与实现

在机器人应用中&#xff0c;ROS (Robot Operating System) 是一个常见的框架。ROS Bag&#xff08;rosbag&#xff09;是 ROS 中用于记录和回放数据流&#xff08;例如传感器数据、话题消息等&#xff09;的一种强大工具。有时&#xff0c;我们需要将存储在 rosbag 文件中的图像…...

MYSQL执行一条update语句,期间发生了什么

客户端先通过连接器建立连接&#xff0c;连接器自会判断用户身份&#xff1b; 因为这是一条 update 语句&#xff0c;所以不需要经过查询缓存&#xff0c;但是表上有更新语句&#xff0c;是会把整个表的查询缓存清空的&#xff0c;所以说查询缓存很鸡肋&#xff0c;在 MySQL 8…...

前端性能优化思路

前端性能优化需要从多方面入手,包括减少资源加载时间、优化页面渲染、利用浏览器缓存、使用CDN加速,服务端渲染和预渲染、性能监控和分析。需要综合运用这些优化策略才能显著提升网页或应用的性能和用户体验 一、减少资源加载时间 1. 代码分割 原理: 代码分割允许我们将代…...

有向图判环(leetcode207,leetcode210)

有向图判环&#xff08;leetcode207&#xff0c;leetcode210&#xff09; 有向图判环 #include <iostream> #include <vector> using namespace std;struct graph {int V; // 顶点的数量vector<vector<int>> adj; // 邻接表数组…...

概率论得学习和整理25:EXCEL 关于直方图/ 频度图 /hist图的细节,2种做hist图的方法

目录 1 hist图的特点 2 hist的设置技巧&#xff1a;直接生成的hist图往往很奇怪不好用&#xff1a;因为横轴的分组不对 3 如何修改分组 4 设置开放边界&#xff0c;把长尾合并&#xff0c;得到hist图1 5 用原始表得到频数表 6 用上面的频数图做柱状图&#xff0c;再修改&…...

PHP8.4下webman直接使用topthink/think-orm

环境信息 操作系统win11php 8.4.1webman-framework ^1.6.8MySQL 8.4.3topthink/think-orm ^3.0 说明 PHP8.3以下版本 直接使用webman提供的webman/think-orm更方便。 PHP 环境换为 8.4 使用webman/think-orm 报了个错&#xff1b;所以换topthink/think-orm&#xff0c;根据文…...

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string,垃圾回收( GC)

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…...

基于微信小程序的小区疫情防控ssm+论文源码调试讲解

第2章 程序开发技术 2.1 Mysql数据库 为了更容易理解Mysql数据库&#xff0c;接下来就对其具备的主要特征进行描述。 &#xff08;1&#xff09;首选Mysql数据库也是为了节省开发资金&#xff0c;因为网络上对Mysql的源码都已进行了公开展示&#xff0c;开发者根据程序开发需…...

第P2周:Pytorch实现CIFAR10彩色图片识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 实现CIFAR-10的彩色图片识别实现比P1周更复杂一点的CNN网络 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: …...

CTFHub 命令注入-综合练习(学习记录)

综合过滤练习 命令分隔符的绕过姿势 ; %0a %0d & 那我们使用%0a试试&#xff0c;发现ls命令被成功执行 /?ip127.0.0.1%0als 发现一个名为flag_is_here的文件夹和index.php的文件&#xff0c;那么我们还是使用cd命令进入到文件夹下 http://challenge-438c1c1fb670566b.sa…...

OpenCV目标检测 级联分类器 C++实现

一.目标检测技术 目前常用实用性目标检测与跟踪的方法有以下两种&#xff1a; 帧差法 识别原理&#xff1a;基于前后两帧图像之间的差异进行对比&#xff0c;获取图像画面中正在运动的物体从而达到目标检测 缺点&#xff1a;画面中所有运动中物体都能识别 举个例子&#xf…...

QT6 Socket通讯封装(TCP/UDP)

为大家分享一下最近封装的以太网socket通讯接口 效果演示 如图&#xff0c;界面还没优化&#xff0c;后续更新 废话不多说直接上教程 添加库 如果为qmake项目中&#xff0c;在.pro文件添加 QT network QT core gui QT networkgreaterThan(QT_MAJOR_VERS…...

elasticsearch设置密码访问

1 用户认证介绍 默认ES是没有设置用户认证访问的&#xff0c;所以每次访问时&#xff0c;直接调相关API就能查询和写入数据。现在做一个认证&#xff0c;只有通过认证的用户才能访问和操作ES。 2 开启加密设置 1.生成证书文件 /usr/share/elasticsearch/bin/elasticsearch-…...

彻底理解如何优化接口性能

作为后端研发&#xff0c;必须要掌握怎么优化接口的性能或者说是响应时间&#xff0c;这样才能提高系统的系能&#xff0c;本文通过如下两个方面进行分析&#xff1a; 一.后端代码 有如下几步&#xff1a; 1.缓存机制 这是最场景的方式&#xff0c;当使用了缓存后&#xff0c;…...

网页资源提取工具:猫抓开源方案解决媒体获取难题

网页资源提取工具&#xff1a;猫抓开源方案解决媒体获取难题 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化学习与研究的过程中&#xff…...

手把手教你用MounRiver Studio开发沁恒CH32V003(附完整项目实战)

从零开始用MounRiver Studio开发沁恒CH32V003&#xff1a;温度控制器实战指南 当RISC-V遇上国产MCU&#xff0c;会碰撞出怎样的火花&#xff1f;沁恒CH32V003作为一款性价比极高的RISC-V内核微控制器&#xff0c;配合MounRiver Studio这一专为RISC-V优化的开发环境&#xff0c;…...

从IPv4到IPv6:除了地址变长,这些‘隐藏’特性(流标签、扩展头、无状态配置)你了解吗?

从IPv4到IPv6&#xff1a;除了地址变长&#xff0c;这些‘隐藏’特性&#xff08;流标签、扩展头、无状态配置&#xff09;你了解吗&#xff1f; 当大多数人谈论IPv6时&#xff0c;第一反应往往是"地址长度从32位扩展到128位"。但地址空间的扩展只是IPv6最表层的改进…...

IDM开源工具免费使用指南:从安装到高级配置的完整实践

IDM开源工具免费使用指南&#xff1a;从安装到高级配置的完整实践 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager&#xff08;IDM&am…...

Phi-4-mini-reasoning企业落地:金融风控规则推理+合规性自动校验

Phi-4-mini-reasoning企业落地&#xff1a;金融风控规则推理合规性自动校验 1. 模型概述与金融场景价值 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。在金融领域&#xff0c;这个"小参数、强…...

魔兽地图跨版本转换与优化全指南:从兼容性处理到地图性能提升

魔兽地图跨版本转换与优化全指南&#xff1a;从兼容性处理到地图性能提升 【免费下载链接】w3x2lni 魔兽地图格式转换工具 项目地址: https://gitcode.com/gh_mirrors/w3/w3x2lni 在魔兽争霸III的地图开发领域&#xff0c;版本兼容性始终是开发者面临的核心挑战。不同游…...

Phi-4-mini-reasoning:轻量级推理模型在人工智能浪潮中的定位

Phi-4-mini-reasoning&#xff1a;轻量级推理模型在人工智能浪潮中的定位 1. 轻量级推理模型的时代价值 当ChatGPT等千亿参数大模型占据媒体头条时&#xff0c;一个容易被忽视的趋势正在悄然兴起——轻量级推理模型正在特定领域展现出惊人的实用性。Phi-4-mini-reasoning正是…...

Gemma-3 Pixel Studio参数详解:max_new_tokens与图像理解深度关系实测

Gemma-3 Pixel Studio参数详解&#xff1a;max_new_tokens与图像理解深度关系实测 1. 引言 在当今多模态AI应用领域&#xff0c;Gemma-3 Pixel Studio以其独特的视觉理解能力和流畅的对话体验脱颖而出。作为基于Google Gemma-3-12b-it模型构建的专业工具&#xff0c;它不仅继…...

NCNN+OpenCV+Vulkan三件套:Windows环境下的深度学习加速实战教程

NCNNOpenCVVulkan三件套&#xff1a;Windows环境下的深度学习加速实战教程 在深度学习模型部署的战场上&#xff0c;Windows平台往往被开发者视为"次优选择"——直到NCNN、OpenCV和Vulkan这个黄金组合的出现。这个三件套解决方案正在改变游戏规则&#xff1a;NCNN提供…...

一键部署雪女-斗罗大陆-造相Z-Turbo:小白也能轻松生成动漫女神

一键部署雪女-斗罗大陆-造相Z-Turbo&#xff1a;小白也能轻松生成动漫女神 1. 镜像简介与核心功能 1.1 什么是雪女-斗罗大陆-造相Z-Turbo 雪女-斗罗大陆-造相Z-Turbo是一款基于Xinference部署的文生图AI模型服务&#xff0c;专门用于生成斗罗大陆中雪女角色的高质量动漫图像…...