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

Mongodb复制集架构

目录

复制集架构

复制集优点

复制集模式

复制集搭建

复制集常用命令

复制集增删节点 

复制集选举

复制集同步

oplog分析

什么是oplog

查看oplog 

 oplog大小


复制集架构

复制集优点

  • 数据复制: 数据在Primary节点上进行写入,然后异步地复制到Secondary节点,确保数据冗余和高可用性。复制是通过Oplog(操作日志)来完成的,Secondary节点通过Oplog来复制Primary节点的操作。
  • 读写分离: 应用程序可以将读操作分发给Secondary节点,实现读写分离,从而提高读取性能。
  • 故障自动转移: 当Primary节点不可用时,复制集会自动选择一个Secondary节点升级为Primary节点,以保持服务的可用性。

复制集模式

1. PSS模式(推荐)

PSS模式由一个主节点和两个备节点所组成,Primary+Secondary+Secondary。

此模式提供数据集的两个完整副本,如果主节点不可用,则新选举出备节点作为主节点并继续正常操作。旧的主节点在可用时重新加入复制集。

2. PSA

PSA模式由一个主节点、一个备节点和一个仲裁者节点组成,即Primary+Secondary+Arbiter

Arbiter节点不存储数据副本,也不提供业务的读写操作。Arbiter节点发生故障不影响业务,仅影响选举投票。此模式仅提供数据的一个完整副本,如果主节点不可用,则复制集将选择备节点作为主节点。

复制集搭建

1. 下载mongo安装包, 解压

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.5.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-6.0.5.tgz

2. 分别建db1,db2,db3三个目录, 存放conf配置文件以及数据, 编辑配置文件, 三个文件夹下面分别修改path,dbPath,port

vim ../data/db1/mongod.conf
systemLog:destination: filepath: /home/kk/local/mongodb-linux-x86_64-rhel70-6.0.5/data/db1/mongod.log # log pathlogAppend: true
storage:   dbPath: /home/kk/local/mongodb-linux-x86_64-rhel70-6.0.5/data/db1 # data directory      
net:bindIp: 0.0.0.0port: 28017 # port
replication:replSetName: rs0  
processManagement:fork: true

3. 配置mongo环境变量, 方便后面启动

export PATH=/home/kk/local/mongodb-linux-x86_64-rhel70-6.0.5/bin:$PATH

4. 启动三个mongo实例

mongod -f ./data/db1/mongod.conf 
mongod -f ./data/db2/mongod.conf 
mongod -f ./data/db3/mongod.conf 

5. 下载mongosh连接客户端

wget https://downloads.mongodb.com/compass/mongodb-mongosh-1.8.0.x86_64.rpm
yum install -y mongodb-mongosh-1.8.0.x86_64.rpm

6. 用mongosh连接, 并初始化复制集

# 连接客户端
mongosh --port 28017
# 初始化复制集
rs.initiate({_id: "rs0",members: [{_id: 0,host: "192.168.6.128:28017"},{_id: 1,host: "192.168.6.128:28018"},{_id: 2,host: "192.168.6.128:28019"}]
})

7. 验证集群状态, rs.status()

复制集常用命令

# 客户端执行
rs.help()

命令

描述

rs.add()

为复制集新增节点

rs.addArb()

为复制集新增一个 arbiter

rs.conf()

返回复制集配置信息

rs.freeze()

防止当前节点在一段时间内选举成为主节点

rs.help()

返回 replica set 的命令帮助

rs.initiate()

初始化一个新的复制集

rs.printReplicationInfo()

以主节点的视角返回复制的状态报告

rs.printSecondaryReplicationInfo()

以从节点的视角返回复制状态报告

rs.reconfig()

通过重新应用复制集配置来为复制集更新配置

rs.remove()

从复制集中移除一个节点

rs.secondaryOk()

为当前的连接设置 从节点可读

rs.status()

返回复制集状态信息。

rs.stepDown()  

让当前的 primary 变为从节点并触发 election

rs.syncFrom()

设置复制集节点从哪个节点处同步数据,将会覆盖默认选取逻辑

复制集增删节点 

1. 通过remove删除节点

# 1. 进入要删除的节点, 关闭该实例
db.shutdownServer()
# 2.连接主节点,执行remove
rs.remove("ip:port")

2. 通过reconfig, 修改节点

cfg = rs.conf()
cfg.members[0].host = "ip:port"
rs.reconfig(cfg)

复制集选举

MongoDB的复制集选举使用Raft算法(Raft Consensus Algorithm)来实现,选举成功的必要条件是大多数投票节点存活。

另外,MongoDB对raft协议添加了一些自己的扩展:

  • 支持chainingAllowed链式复制,即备节点不只是从主节点上同步数据,还可以选择一个离自己最近(心跳延时最小)的节点来复制数据。
  • 增加了预投票阶段,即preVote,这主要是用来避免网络分区时产生Term(任期)值激增的问题
  • 支持投票优先级,如果备节点发现自己的优先级比主节点高,则会主动发起投票并尝试成为新的主节点。

当复制集内存活的成员数量不足大多数时,整个复制集将无法选举出主节点,此时无法提供写服务,这些节点都将处于只读状态。此外,如果希望避免平票结果的产生,最好使用奇数个节点成员。在MongoDB复制集的实现中,对于平票问题提供了解决方案:

  • 为选举定时器增加少量的随机时间偏差,这样避免各个节点在同一时刻发起选举,提高成功率。
  • 使用仲裁者角色,该角色不做数据复制,也不承担读写业务,仅仅用来投票。

复制集同步

在复制集架构中,主节点与备节点之间是通过oplog来同步数据的,oplog是local库的一个集合,当主节点上的一个写操作完成后,会向oplog集合写入一条对应的日志,而从节点通过这个oplog不断拉取到新的日志,在本地进行回放以达到数据同步的目的。 

oplog分析

什么是oplog

  • MongoDB oplog 是 Local 库下的一个集合,用来保存写操作所产生的增量日志(类似于 MySQL 中 的 Binlog)。
  • 它是一个 Capped Collection(固定集合),即超出配置的最大值后,会自动删除最老的历史数据,MongoDB 针对 oplog 的删除有特殊优化,以提升删除效率。
  • 主节点产生新的 oplog数据,从节点通过复制 oplog 来保证和主节点的状态一致

查看oplog 

ts: 操作时间,当前timestamp + 计数器,计数器每秒都被重置

v:oplog版本信息

op:操作类型:

i:插⼊操作

u:更新操作

d:删除操作

c:执行命令(如createDatabase,dropDatabase)

n:空操作,特殊用途

ns:操作针对的集合

o:操作内容

o2:操作查询条件,仅update操作包含该字段

 oplog大小

oplog如果设置太小, 主从同步延迟严重时, 容易覆盖老的oplog, 造成数据丢失, 所以通常需要修改默认的oplog大小(默认90M)

# oplog大小修改为60g  
db.adminCommand({replSetResizeOplog: 1, size: 60000})
# 查看oplog大小
db.oplog.rs.stats().maxSize

相关文章:

Mongodb复制集架构

目录 复制集架构 复制集优点 复制集模式 复制集搭建 复制集常用命令 复制集增删节点 复制集选举 复制集同步 oplog分析 什么是oplog 查看oplog oplog大小 复制集架构 复制集优点 数据复制: 数据在Primary节点上进行写入,然后异步地复制到Secondary节点&a…...

云原生之深入解析Kubernetes集群发生网络异常时如何排查

一、Pod 网络异常 网络不可达,主要现象为 ping 不通,其可能原因为: 源端和目的端防火墙(iptables, selinux)限制; 网络路由配置不正确; 源端和目的端的系统负载过高,网络连接数满…...

error: C2039: “qt_metacast“: 不是 “***“ 的成员

报错信息: error C2039: "qt_metacast": 不是 "radartrack::Base_track_data" 的成员 最近在使用Qt开发,自定义的数据类在继承数据抽象类和QObject类时总是报“qt_metacast 不是不是 "radartrack::Base_track_data" 的成员…...

量子计算:开启IT领域的新时代

量子计算:开启IT领域的新时代 一、量子计算的基本原理与背景 量子计算作为一项前沿高级技术,正逐渐引起IT领域的广泛关注。传统计算机是通过二进制位(0和1)来储存和处理信息,而量子计算机则利用量子位或称为“量子比特…...

数据可视化---柱状图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…...

第十七章 爬虫scrapy登录与中间件2

文章目录 数据盘区太快会报错,setting中配置延迟 连接提取器...

运维知识点-Kubernetes_K8s

Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号,是Pod连接K8s集群的凭证。 在默认情况下,系统会为创建的Pod提供一个默认的Service Account, 用户也可以自定义Service Account,与Service…...

某电子文档安全管理系统存在任意用户登录漏洞

漏洞简介 某电子文档安全管理系统存在任意用户登录漏洞,攻击者可以通过用户名获取对应的cookie,登录后台。 资产测绘 Hunter语法:web.icon“9fd216c3e694850445607451fe3b3568” 漏洞复现 获取Cookie POST /CDGServer3/LinkFilterServi…...

音视频参数介绍

一、视频参数概念 单个视频帧:可以简单地理解成为一张图片 单个视频帧主要的参数概念: 分辨率: 分辨率是指图像或显示器上像素的数量,通常用横向像素数乘以纵向像素数表示。例如,1920x1080 表示宽度为1920像素&…...

vue中使用minio上传文件

创建一个 文件getOssClient import { getOssSetting } from "/api/common"; import Vue from "vue"; import { getCookies, getLocal } from "/utils/auth"; // get token from cookie export async function getStsToken() {//从后台获取stsTo…...

MySQL表的增删改查(初阶)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查(CRUD,create,retrieve,update,delete)数据库的核心模块。 1. 新增(Create) 实…...

搜维尔科技:关于“第九届元宇宙数字人设计大赛”线上+线下巡回宣讲本周高校行程通告!

为了让大家更全面地了解此次大赛,顺利地进行大赛的报名和参赛,组委会遴选了一批优秀讲师代表,组建了宣讲团,以线上线下的方式陆续开展巡回宣讲。宣讲兼顾不同学生群体的需求,结合在数字人设计制作的过程中常见的疑难点…...

Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!

Gemini 1.0:Google推出的全新AI模型,将改变生成式人工智能领域的游戏规则! 🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 …...

excel打开并操作CAD(excel-vba实现)_另附:CAD打开excel

excelvba可实现调用cad应用程序,并通过excel内置api弹窗实现打开、另存CAD 文件(cad-vba弹窗功能较为麻烦),代码如下(在excel_vba环境下操作): Sub excel_vba打开另存并操作CAD文件() Dim cad …...

Prolist组件实现动态竖排展示

实现原理&#xff1a;主要是利用外层div属性display:"flex",overflowX: auto&#xff0c;配合内层prolist样式属性flex:"0 0 auto",overflowX:"auto",width:"350px",height:900&#xff0c;实现动态竖排展示 <div style{{display:…...

基于JAVA的海南旅游景点推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…...

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用 1&#xff09;框架介绍与引入1.1.&#x1f680; 什么是 StreamPark1.2.&#x1f389; Features1.3.&#x1f3f3;‍&#x1f308; 组成部分1.4.引入 StreamPark 2&#xff09;安装部署2.1.环境要求2.2.Hado…...

【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…...

docker服务启动报错docker.service holdoff time over, scheduling restart.

docker服务启动报错docker.service holdoff time over, scheduling restart. 卸载docker 卸载安装包 yum remove -y docker docker-client docker-client-latest docker-ce-cli docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinu…...

cfa一级考生复习经验分享系列(八)

先分析一下CFA Level 1内容&#xff0c;考试总体难度并不大&#xff0c;每门课程都比大学本科开设的对应课程简单&#xff0c;但是因为有十门课综合在一起&#xff0c;知识点相对算比较多&#xff0c;内容较多。但对知识点的掌握要求不高&#xff0c;理解即可。比如财报&#x…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...