整理mongodb文档:副本集一

news2024/11/24 19:43:58

个人博客

整理mongodb文档:副本集一

本文讲解较为粗糙,对于没有后台开发经验的人员,建议配合官网了解下相关概念。个人博客,日常求关注

文章概叙

文章会先花费几分钟讲解下关于垂直缩放以及水平缩放的概念,以方便大家对副本集有一个理解,再配置一个基本的副本集加深理解
在了解关于什么是副本集概念之前,先大概讲下副本集能解决什么问题。

垂直缩放

前面的博客中,即使到了事务的阶段,依旧使用的是单机服务,即只有一个Mongodb的实例,但我们也都明白,实际的环境中不可能这么处理,比如当我们在线上使用单机服务的时候,如果一个SQL查询时间过大,导致整个服务卡死了,那么就会GG,首先,我们可以通过垂直缩放的方式,也就是通过提供服务器的性能,比如增加Cpu等的方式,提供运算能力,尽可能的避免出现问题。

但垂直缩放的方式是通过钞能力提供服务器的性能,而当我们的业务水平发展到更高的程度时,这台老旧的服务器无法再支持我们的数据更新了,我们就需要更换一台性能更好的服务器,最主要是对很多的小公司来说,垂直缩放代表着需要在前期就投入大量的资源在服务器上,很难说公司会有这样的魄力,而水平缩放就更适合项目前景不明确,不太愿意砸钱的情况下

水平缩放

水平缩放意味着通过添加更多节点用于处理数据库查询来缩放数据库,简单来说,就是当我无法在一台服务器上死命的堆资源的时候,我们就用多个服务来增加服务器的“韧性”,而Mongodb正是属于这种情况。

理想情况下,大家的预想是三台服务器,各自保存着三分之一的数据,这就是分片数据库。理想情况下,分片数据库将数据均匀分布在所有分区中。但这很难实现,因为所有分区中的数据分布都或多或少地需要进行平衡。 一致哈希是当前许多数据库系统常用的主流技术,不过分片下,这个服务器上的数据丢失之后将无法找回,所以我们更倾向于使用’复制‘的方案。

复制是跨多台服务器复制数据的过程,目的在于增加指向各个数据片段的可用路径的数量。可以出于性能、可用性和/或容错性的原因复制数据。复制数据可以提高性能,特别是读取操作的性能,因为复制允许并行访问相同数据的多个副本。复制有助于提高可用性和容错能力,因为如果数据库系统的一部分发生故障,可使用备份位置中的数据。

Mongodb的副本集

所谓副本集是指服务于同一数据集的多个mongodb实例;这意味着在mongodb中数据集副本的数量可以是多个,每个副本的数据都是一样的;副本的存在主要作用是对mongodb数据库中的数据做冗余备份和提高数据服务的可用性;在mongodb中对数据做冗余的方式有两种,一种是主从架构,这种架构和mysql中的主从架构没有什么不同,但是在mongodb中,主从架构的方式几乎没有人用,处于废弃的状态。。另外一种是副本集,副本集本质上也是主从架构的一种,它和我们刚才说的主从架构,有一个显著的区别,副本集支持故障自动转移,不需要人工手动干预。

至此,大家也可以理解为什么大家都在讲Mongodb的副本集,很少有人讲Mongodb的主从结构了。

副本集结构

在了解了副本集的设计思想以及面对的问题之后,我们现在开始了解下副本集的组成
一个副本集由主节点以及从节点组成。也就是说维持一个副本集功能实现的最小架构,必须要有一个主节点以及一个从节点来组成。但是我们一般是推荐一个主节点,两个从节点,也就是如果主节点挂了,其中一个从节点也挂了的时候,还有一个从节点。而在主-从结构下,一般也会添加仲裁节点,仲裁节点不持有数据,但是可以选择哪个节点作为主节点。

主节点,是唯一一个可以接受写操作的成员。MongoDB在主节点 上应用写操作,然后将这些操作记录到主节点的oplog中。从节点成员复制这个日志然后应用到它们的数据集中。
从节点是维护了主节点数据集的副本。为了复制数据,从节点通过异步的方式将主节点oplog 应用至自己的数据集中。一个副本集可以有一个或多个从节点。
仲裁节点在某些情况下(例如有一个主节点和一个从节点,但由于成本约束无法添加另一个从节点),你可以在副本集中添加一个仲裁节点。仲裁节点没有数据集的副本,并且不能成为主节点。然而,仲裁节点可以参与主节点选举。

直白来说,一个最小的推荐的副本集就是一个主节点以及两个从节点,主节点的作用是接受我们的读写操作,并且将其保存在oplog中,其他的副节点定时通过oplog将自己的数据进行更新,保证与主节点的一致,而当我们的主节点故障的时候,我们的仲裁节点就可以通过选举,选出新的节点作为主节点(刚刚故障下台的那个主节点,无法被选举为新的主节点),而从节点是无法直接执行写操作的。
在这里插入图片描述

配置副本集

在了解了副本集的结构之后,接下来我们开始在单机上配置一个副本集。

1.首先,我们把现在存在的Mongodb服务停止了,防止对后面的步骤产生影响。

net stop mongodb

2.进入到Mongodb的文件夹下,创建三个存放我们副本集数据的文件夹,一主两从的,就设置为data1、data2、data3。

在这里插入图片描述

3.在不同的命令窗口中,分别运行下面三个shell。

mongod 
--port 27017 
--dbpath ./data1 
--replSet replSetTest/[localhost:27018,localhost:27019]
mongod 
--port 27018 
--dbpath ./data2 
--replSet replSetTest/[localhost:27017,localhost:27019]
mongod 
--port 27019 
--dbpath ./data3 
--replSet replSetTest/[localhost:27017,localhost:27018]

其中,第一条指的是在27017 端口下启动我们的mongdb服务,将数据存储在data1的目录下,并且设置名字为replSetTest,并且这个副本集的其他两个从节点为27019以及27018。
接下来在我们的可视化软件中输入下面三个链接,方便后面的测试

mongodb://127.0.0.1:27017/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false
mongodb://127.0.0.1:27018/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false
mongodb://127.0.0.1:27019/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false

在这里插入图片描述

不过此时由于我们还没有初始化我们的副本集,所以当打开mongodb compass的时候,会出现下面的错误

An error occurred while loading navigation: ‘not master and
slaveOk=false’: It is recommended to change your read preference in
the connection dialog to Primary Preferred or Secondary Preferred or
provide a replica set name for a full topology connection.

因此,我们先使用mongosh链接到我们的服务中

express的使用(五) 简单的使用mongodb

.\mongosh mongodb:localhost:27017

接下来使用rs.inititate方法来配置副本集,rs是replset的意思,是mongodb自带的。我们可以使用rs来配置mongodb的副本集,而_id就是刚刚设置的副本集的名字,members是成员,其中默认设置第一个为主节点。

const config = {
    _id: 'replSetTest',
    members: [
        { _id: 0, host: '127.0.0.1:27017' },
        { _id: 1, host: '127.0.0.1:27018' },
        { _id: 2, host: '127.0.0.1:27019' }
    ]
}
rs.initiate(config)

在这里插入图片描述

再次打开mongdb compass软件,可以发现,除了27017之外的服务,依旧会出现上述的提示,这是因为27017已经被选定为了主节点,可以有读写的操作,而其他的两个从节点,没有了读写的操作了。故此,后面的操作将会使用shell的方式来演示。

在这里插入图片描述

在这里插入图片描述
往27017中写入数据,查看27018以及27019是否出现

在这里插入图片描述

在这里插入图片描述

到此,一个搭配起来的副本集就完成了,由于篇幅过长,会有第二篇博客再延续下去

注意点

垂直缩放在部分博客中又叫做纵向扩展,水平缩放也叫做横向扩展,只是因为个人喜欢用这两种称呼,所以在文章中如此使用

副本集中的从节点,有时候我们也会叫做副节点,一般为了统一,我喜欢用secondary表示。

在MongoDb中,一个副本集最多只有50个从节点,当然我们也不会设置这么多个从节点的。

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

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

相关文章

Qt5开发及实例V2.0-第五章Qt主窗体

Qt5开发及实例V2.0-第五章Qt主窗体 第5章 Qt 5主窗体5.1.1 基本元素5.1.2 【综合实例】:文本编辑器5.1.3 菜单与工具栏的实现 5.2 Qt 5文件操作功能5.2.1 新建文件5.2.2 打开文件5.2.3 打印文件 5.3 Qt 5图像坐标变换5.3.1 缩放功能5.3.2 旋转功能5.3.3 镜像功能 5.…

适用于 Linux 的 Windows 子系统获得新的“镜像”网络模式

Microsoft 发布了 Windows Subsystem for Linux (WSL) 2.0.0,其中包含一组新的可选实验功能,包括新的网络模式以及自动内存和磁盘大小清理。 首先,新添加的“自动内存回收”功能通过回收缓存内存来动态减少 WSL 虚拟机 (VM) 的内存占用。 此…

Git学习笔记8

Gitlab: Gitlab是利用Ruby on Rails 一个开源的版本管理系统,实现一个自托管的git项目仓库,可通过web界面进行访问公开或私有的项目。 Gitlab安装: 安装之前,将虚拟机的内存改成了4个G。内存如果太小,会有…

Zipping

Zipping 信息收集端口扫描目录扫描webbanner信息收集 漏洞利用空字节绕过---->失败sqlI-preg_match bypass反弹shell 稳定维持 提权-共享库漏洞 参考:https://rouvin.gitbook.io/ibreakstuff/writeups/htb-season-2/zipping#sudo-privileges-greater-than-stock-…

基于Python开发的图片批量处理器(源码+可执行程序+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的图片批量处理器,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,…

软考高级架构师下篇-16通信系统架构设计理论与实践

目录 1. 引言2. 通信系统网络架构3. 网络构建关键技术4. 网络构建5. 前文回顾1. 引言 此章节主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本节知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中…

SpringSecurity 权限管理的实现

文章目录 前言权限管理的实现权限校验的原理FilterSecurityInterceptorAccessDescisionManagerAffirmativeBasedConsensusBasedUnanimousBased AccessDecisionVoterWebExpressionVoterAuthenticatedVoterPreInvocationAuthorizationAdviceVoterRoleVoterRoleHierarchyVoter 前言…

HEXO 基本使用

1 新建、编辑并预览文章 1. 新建文章 hexo new [layout] title # 或 hexo n [layout] title创建文章前要先选定模板,在hexo中也叫做布局。hexo支持三种布局(layout):post(默认)、draft、page。我们先介绍如何使用已有布局…

【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,进阶功能学习

前言【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin,进阶功能学习一、Odin Attributes Overview 特性篇1.1 提示信息1.1.1 Title、InfoBox1.1.2 DetailedInfoBox1.2 各类限制1.2.1 限制数值范围1.2.2 限制只读1.2.3 限制属性搜索范围1.4 Required 限制必须赋值1.3 数值变化时触…

我们感知的内容是由大脑最支持的假设决定的吗?

某种意义上讲,我们从未直接体验到感觉信号本身,而是通过对这些信号的解读和处理来感知和理解外界。 感觉信号是由我们的感官系统接收到的来自外部世界的刺激所产生的物理信号。例如,视觉感觉信号由我们的眼睛接收光线并将其转化为神经脉冲&am…

爬虫获取一个网站内所有子页面的内容

上一篇介绍了如何爬取一个页面内的所有指定内容,本篇讲的是爬去这个网站下所有子页面的所有指定的内容。 可能有人会说需要的内容复制粘贴,或者直接f12获取需要的文件下载地址一个一个下载就行了,但是如下图十几个一级几十个二级一百多个疾病…

STM32-无人机-电机-定时器基础知识与PWM输出原理

电机控制基础——定时器基础知识与PWM输出原理 - 掘金单片机开发中,电机的控制与定时器有着密不可分的关系,无论是直流电机,步进电机还是舵机,都会用到定时器,比如最常用的有刷直流电机,会使用定时器产生PW…

「UG/NX」Block UI 指定方位SpecifyOrientation

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

怎么打开mysql题库练习系统

在正式考试的时候,大题上方会有一个启动的按钮,非常明显。 我在考试之前买了题库,但是一直没找到怎么进入mysql (指的不是平时自己做项目的入口,是考试系统仿真) 其实是要下载一个软件: 就在…

大数据与云计算实验一

检查是否开启 sudo service docker status 开启服务 sudo service docker start 运行服务 sudo docker run -itd -p 8080:80 nginx 查询ID docker ps -all 进入容器shell sudo docker exec -it <容器ID或容器名称> /bin/bash 找到/usr/share/nginx/html/index.…

【小沐学CAD】虚拟仿真开发工具:GL Studio

文章目录 1、简介2、软件功能3、应用行业3.1 航空3.2 汽车3.3 防御3.4 工业3.5 电力与能源3.6 医疗3.7 空间3.8 科技 结语 1、简介 https://disti.com/gl-studio/ https://ww2.mathworks.cn/products/connections/product_detail/gl-studio.html DiSTI 是 HMI 软件、虚拟驾驶舱…

zabbix自定义key

用户参数&#xff08;zabbix-agent&#xff09; 介绍 自定义用户参数&#xff0c;也就是自定义key&#xff0c;有时&#xff0c;你可能想要运行一个代理检查&#xff0c;而不是Zabbix的预定义&#xff0c;你可以编写一个命令来检索需要的数据&#xff0c;并将其包含在代理配置…

大模型如何赋能智能客服

2022年&#xff0c;大模型技术的出色表现让人们瞩目。随着深度学习和大数据技术的发展&#xff0c;大模型在很多领域的应用已经成为可能。许多公司开始探索如何将大模型技术应用于自己的业务中&#xff0c;智能客服也不例外。 智能客服是现代企业中非常重要的一部分&#xff0…

OpenCascade插件化三维算法研究平台

基于OpenCascade 7.7.0、QT 6.5.2开发了一个插件化三维算法研究平台。 由于采用插件化技术&#xff0c;平台启动极快&#xff0c;用户用到相关功能时&#xff0c;系统才载入相关模块。插件化平台&#xff0c;不仅可以作为三维建模、展示、格式转换等工具软件&#xff0c;还可以…

从菜鸟到吃鸡高手!教你提高战斗力的顶级游戏干货!

大家好&#xff01;作为专业吃鸡行家&#xff0c;今天我将为大家分享一些与众不同的干货&#xff0c;助你成为吃鸡界的顶级战士&#xff01; 首先&#xff0c;游戏战斗力的提升是每个吃鸡玩家的追求。通过使用绝地求生作图工具&#xff0c;你可以简单快捷地分享你的战斗经验与技…