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

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

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

相关文章

14 v-model绑定输入框

概述 v-model用于实现双向数据绑定,使用v-model绑定输入框是Vue3中最常见的用法之一。 比如,在制作登录界面的时候,我们会使用v-model绑定用户名和密码,这里的用户名和密码都是输入框。 基本用法 我们创建src/components/Demo…

cleanmymacX安全吗?有用吗

苹果电脑以其流畅的操作系统和卓越的性能而备受用户喜爱。然而,随着时间的推移,系统可能会积累大量垃圾文件,影响性能。本文将介绍苹果电脑怎么清理垃圾文件的各种方法,以提升系统运行效率。 CleanMyMac X是一款专业的Mac清理软件…

Android Studio问题解决:Gradle Download 下载超时 Connect reset

文章目录 一、遇到问题二、解决办法 一、遇到问题 Gradle Download下载超时Sync了很多次,一直失败 二、解决办法 手动通过gradle网站下载 https://gradle.org/releases/可能也会出现超时,最好开个VPN软件会比较快。 下载好的软件,放到本机的…

工业缺陷检测新时代!OpenCV4六种方法助你轻松应对生产难题!

OpenCV4工业缺陷检测的六种方法 机器视觉缺陷检测好书推荐工业上常见缺陷检测方法方法一:方法二:方法三:方法四:方法五:方法六: 写在末尾: 主页传送门:📀 传送 送书系列…

hive企业级调优策略之分组聚合优化

测试用表准备 hive企业级调优策略测试数据 (阿里网盘下载链接):https://www.alipan.com/s/xsqK6971Mrs 订单表(2000w条数据) 表结构 建表语句 drop table if exists order_detail; create table order_detail(id string comment 订单id,user_id …

clangd:Couldn‘t build compiler instance

在使用vscode clangd 搭建RK3588 5.10版本linux内核代码开发环境时,使用bear生成 compile_commands.json时,clangd生成标签失败代码无法跳转,查看clangd日志,发现标签生成失败,失败原因:Couldnt build comp…

C++ OJ题测试—排序算法效率

目录 OJ链接 一、直接插入排序 二、希尔排序 三、直接选择排序 常规: 第二种: 四、 堆排序 五、冒泡排序 六、快速排序 常规: 三路划分优化效率 七、归并排序 八、计数排序 OJ链接 ​ 一、直接插入排序 class Solution { pub…

CentOS 7 部署 Nacos-2.3.0 (单机版)

CentOS 7 部署 Nacos-2.3.0 (单机版) 1. 下载 Nacos 安装包 历史版本:https://github.com/alibaba/nacos/releases/ 我选的是 2.3.0 版本,https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.g…

等保二级和三级的区别

等保二级和三级定级标准有什么区别?定级原则和方法介绍 网络安全等级保护,简称等保,是我国为了保障信息系统的安全运行,防止信息泄露、篡改、破坏等威胁,制定的一套信息安全管理制度。根据《信息安全技术网络安全等级保…

MIT18.06线性代数 笔记1

文章目录 方程组的几何解释矩阵消元乘法和逆矩阵A的LU分解转置-置换-向量空间R列空间和零空间求解Ax0主变量 特解求解Axb可解性和解的结构线性相关性、基、维数四个基本子空间矩阵空间、秩1矩阵和小世界图图和网络复习一 方程组的几何解释 线性组合: 找到合适的x和…

【小沐学Python】Python实现语音识别(vosk)

文章目录 1、简介1.1 vosk简介1.2 vosk模型1.3 vosk服务 2、安装3、测试3.1 命令行测试3.2 代码测试 结语 1、简介 https://alphacephei.com/vosk/index.zh.html Vosk 是一个语音识别工具包。 1.1 vosk简介 支持二十种语言 - 中文,英语,印度英语&#…

ansible模块 (7-13)

模块 7、hostname模块: 远程主机名管理模块 ansible 192.168.10.202 -m hostname -a nameliu 8、copy模块: 用于复制指定的主机文件到远程主机的模块 常用参数: dest: 指出要复制的文件在哪,必须使用绝对路径。如果源目标是…

Ubuntu18.04.6下samba服务的安装及配置

目录 01 安装samba服务: 03 重启samba服务 04 设置samba登录密码 05 测试 前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博…

JavaWeb笔记之JavaWeb JDBC

//Author 流云 //Version 1.0 一. 引言 1.1 如何操作数据库 使用客户端工具访问数据库,需要手工建立连接,输入用户名和密码登录,编写 SQL 语句,点击执行,查看操作结果(结果集或受影响行数)。…

HarmonyOS应用开发-手写板(二)

在前一篇手写板的文章中(HarmonyOS应用开发-手写板-CSDN博客),我们通过使用Path实现了一个基本的手写板,但遗憾的是,无法保存所绘制的图像。在本文中,我们将采用canvas和Path2D来重新构建手写板应用。依然只…

java中基本类型之间的转换

基本类型容量 java中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围 byte:字节型,占内存容量为 1 个字节(8 位),表示范围为 -128(-2^7)到 127(2^7-1&…

关于MQ,你了解多少?(干货分享之一)

导语 本文梳理笔者 MQ 知识,从消息中间件的基础知识讲起,在有了基础知识后,对市面上各主流的消息中间件进行详细的解析,包括 RabbitMQ、RocketMQ、Kafka、Pulsar,最后再横向对比这几款主流的消息中间件。 消息中间件…

Linux下搭建Redis一主二从的哨兵模式

一、Redis哨兵模式搭建 1、准备好三台机器,使用diap用户完成搭建 2、安装Redis -在资源库中下载redis-7.0.8.tar.gz,分别上传到三台服务器中软件安装的目录,我这里安装到/u01下 -安装依赖。yum -y install gcc-c(root用户执行…

vue onlyoffice在线编辑与预览,文件无法保存问题,始终打开同一文件的问题

主要写一下前端vue的使用&#xff0c;需要后端或运维去弄docker服务&#xff0c;然后给前端一个api地址 在vue的Index.html页面添加这个 <script type"text/javascript" src"http://docker服务器ip:docker服务器端口/web-apps/apps/api/documents/api.js&q…

智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鼠群算法4.实验参数设定5.算法结果6.参考文献7.MA…