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

MongoDB 双机热备那篇文章是 “毒”

5faf2e4a7d450c535729a731ed2c8b3f.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 liuaustin3 (共1200人左右 1 + 2 + 3)新人会进入3群

如果没有法律,我可能真想做了这个事情,群里最近有人问MongoDB 双机热备,我非常愤怒的告诉他们,不可以,不应该,不要,NO NO NO 。

这个底气我是有的,为什么?官方 official 问答,解释了这个问题,我还真好笑,还真有人提出这个问题。哎,使用MongoDB 7年了,从3.2 到了现在的4.4 (惭愧,我们准备5.0) , 没有想到MongoDB 的知识普及率还那么低,还有人问出 MongoDB  双机热备,还有人写出这样的文章。

212ff454f21df8582ecc2b5320264c3a.png

先看完官方的回复 MongoDB Developer Community 

ae5c380a0201935daf3e7ccdb4d53581.png

757ede361cbfb523b84d8fa9b29f9c95.png

0f1202349ca50dafcdd7743efc566920.png

这里普及一个基本的概念,MongoDB 本身在生产环境中,从来不存在单机使用方式(不抬杠,如果你的业务随时可以DOWN机,那你不在讨论的范围),同时必须要注意,MongoDB 本身是一款历史和传统相比,很新的数据库他本身在设计之初就融入了分布式的概念,网络数据传输的概念,自动切换的概念,以及服务程序和程序员至上的方式,最终是不能用传统数据库的理念去使用MongoDB 的。

在MongoDB 的生产环境中,有最小化成本投入和标准成本投入,以及特殊成本投入。

举例如果你的项目需要成本较低,那么你在搭建MongoDB 的时候可以加入 Arbiter节点, 但在标准的应用里面,官方也不建议你使用Arbiter ,而是标准的三节点的MongoDB Replicaset.

MongoDB 具有完善的复制集的协议,也就是我们知道的 protocol version1 简称 PV1 , 这个协议是从MongoDB 3.2后开始的,他详细的定义了如下的一些概念

1  写入数据的概念:在写入数据的时候  w:1 是MongoDB 特有的概念,其中可以标定到底需要几个节点写入后,才可以算是数据写入,比如你有3个节点,你在一条插入数据的语句执行后,MongoDB 会根据你语句中的数字来判断你的写入的操作是否完成,给与数据安全写,和性能之间的平衡的权利交给你来抉择。当然你可以使用默认的设置 majority ,大多数写的概念,完全能Hold 95%以上的应用场景。

在早期的PV0中(版本为  MongoDB 3.4.1 之前的版本)与PV1 版本的不同在于PV1 在4.0 后不会在支持具有副本集W:1 回滚的可能性。

3  投票权和否决权,在MongoDB 中为什么必须是三个节点,我想在MySQL  使用MHA 的那些同学也深知这个道理,脑裂,也就是如果你是两个节点的情况下,你网络出现问题,如何判断你当时那个节点应该是主,那个节点应该从,两个节点,自说自话各自为政,导致数据不一致,这点MySQL 的同学应该是深知的,那么为什么到了 MongoDB 这样一个使用 raft like 协议的数据库,提出双机热备这样,上世纪早期数据库提出的一个算不算高可用的理念。请别把Oracle 的 DG 放到这里。

这里在MongoDB PV1 协议中明确指出,各个成员可以在特性选举的情况下,对候选人投赞成或不赞成,但单方面不能停止选举,这在两个节点是无法实现这个功能的,因为,因为,因为 在两个节点的情况下,瞬间两个节点都认为他们是主节点,需要有第三个节点来进行仲裁,到底谁是真正的主节点。PV1 中使用了 term的概念,允许快速检测到同时存在主节点并在短时间进行多次的成功的选举,这更是在两个节点的情况下无法完成。

在MongoDB 中4.0以上的版本PV1,防止一个成员对于选举重复发起投票,通过term修改副本集协议中的版本,在MongoDB 副本集中每个成员都会维护一个term计数器,计数器会递增标识每次选举中状态是否进行了切换,这里在任意一个member接受到选票时他会检查当前自己的term和选票上的term 谁大谁小,如果自己小则更新自己,并接受该选票,同时也会验证选票中候选人的信息来确保自己有没有重复投票,通过这样的方式每个成员对每个 Term 发送一次选票,避免重复投票和选择冲突,而这一切都建议在至少3个节点的基础上。

所以我不知道提出MongoDB 双机热备的文章的作者是否了解MongoDB的基本原理。

f3288f2b3bf74e5cb0847133268df3a5.png

同时这里也建议,不在使用MongoDB 3.x ,目前在用MongoDB 应该在4.X 起步,也是基于3.x 在使用PV0 协议时的一些可能的问题的基础上。

如果你还在使用3.x 的Mongodb 3.2 3.4 可以通过如下的命令来修改你当前的使用的版本信息

cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);

看似简单的MongoDB ,一点都不简单,如果你觉得他简单,那是你还没有深入。

参考文章链接

https://www.mongodb.com/community/forums/t/setup-a-2-node-mongodb-replica-set/3323

0718efa9835a5bb9616416a88dae52eb.png

相关文章:

MongoDB 双机热备那篇文章是 “毒”

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 liuaustin3 (…...

Leetcode17电话号码的组合

思路:用字典的形式保存号码的映射,实际组合是前一个数字串的组合加上后面一个数字的所有可能组合 answer_dict{2:[a,b,c],3:[d,e,f],4:[g,h,i],5:[j,k,l],6:[m,n,o],7:[p,q,r,s],8:[t,u,v],9:[w,x,y,z]} class Solution:def letterCombinations(self, d…...

入职一家公司只会功能测试,如何进一步提升自己?

一定要帮助想上进却又迷茫的人。最近也听到一些做功能测试的同学的交流,天天做手工测试,想提升一下自己又不知道如何提升?其实还是在于这些同学对自己没有一个清晰的定位,没有明确的目标。 做为功能测试人员来讲,从发…...

WordPress导航主题源码

源码说明: V2.0406 添加搜索自动索引百度热搜关键词 添加首页tab标签模式加载方式切换(ajax加载和普通加载)(首页设置) 修复tab标签ajax加载模式会显示未审核的网址的bug 小屏幕热搜采用水平滚动 优化子主题支持 添加文章分页 添加解决WordPress 429的服务(…...

基于ADAU1452 DSP ANC和AEC算法的实现

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?加我微信hezkz17, 本群提供音频技术答疑服务,+群附加赠送,DSP音频项目核心开发资料, 1 使用Sigma中的NLMS算法模块 对应C源代码:...

Wireshark数据抓包分析之传输层协议(TCP协议)

一、实验目的: 通过使用wireshark对TCP协议的数据包的抓取分析TCP协议的具体内容 二、预备知识: 1.需要了解TCP协议的三次握手过程 2.需要了解TCP协议的四次挥手的过程 三、网络拓扑 四、实验过程: part1:3次握手和4次挥手的数据包的获取 …...

ADRV9009子卡 设计原理图:FMCJ450-基于ADRV9009的双收双发射频FMC子卡 便携测试设备

FMCJ450-基于ADRV9009的双收双发射频FMC子卡 一、板卡概述 ADRV9009是一款高集成度射频(RF)、捷变收发器,提供双通道发射器和接收器、集成式频率合成器以及数字信号处理功能。北京太速科技,这款IC具备多样化的高性能和低功耗组合,FMC子…...

Linux 桌面上的 Firefox 面临着大问题

导读毫无疑问,无论是在桌面、笔记本电脑还是移动设备上,浏览器都是任何操作系统中最重要的应用之一。 如果没有一个功能强大、快速且稳定的浏览器,操作系统的实用性将大幅度降低,以至于我相当确定,如果一个操作系统没有…...

查漏补缺 - 构造函数,原型,this,原型链,继承

目录 1,构造函数2,原型3,this4,原型链1,特点2,Object.prototype.toString()3,instanceof 运算符4,Object.getPrototypeOf()5,创建空原型对象6,面试题 5&#…...

C# 学习笔记--个人学习使用 <2>

C# 学习笔记 Chapter 2 比较硬的基础部分Section 1 委托Part 1 Action 与 func 委托的示例Part 2 自定义委托Part 3 委托的一般使用Part 4 委托的高级使用Part 5 适时地使用接口 Interface 取代一些对委托的使用 Section 2 事件Part 1 初步了解事件Part 2 事件的应用Part 3 事件…...

Linux网络编程Socket通信6-Libevent移植与使用

目录 libeventlibevent交叉编译并移植libevent安装安装步骤测试代码libevent执行报错解决 libevent_base根节点event_base_newevent_base_freeevent_reinit event_loop循环等待事件event_base_loopevent_base_dispatchevent_base_loopexitevent_base_loopbreak event事件event_…...

c#:委托 泛型委托的使用 泛型约束

委托 在 C# 中,delegate 是一种引用类型,它允许您定义和使用可以引用特定方法的对象。delegate 可以看作是一种函数指针,它可以在运行时动态地调用不同的方法。 以下是一个简单的例子来说明 delegate 的实际作用: // 1. 定义一…...

大数据之linux入门

一、linux是什么 linux操作系统 开发者是林纳斯-托瓦兹,出于个人爱好编写。linux是一个基于posix和unix的多用户、多任务、支持多线程和多CPU的操作系统。 Unix是20世纪70年代初出现的一个操作系统,除了作为网络操作系统之外,还可以作为单…...

MPI之MPI_Sendrecv接口以及空进程概念介绍

MPI_Sendrecv函数原型 int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag,void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status);其中各个参数的含义如下&…...

Revit SDK:PointCurveCreation 创建点来拟合曲线

前言 这个例子通过留个例子来展示如何通过点来拟合曲线或者曲面。 内容 PointsParabola 生成抛物线的核心逻辑&#xff1a; double yctr 0; XYZ xyz null; ReferencePoint rp null; double power 1.2; while (power < 1.5){double xctr 0;double zctr 0;while (…...

嵌入式Linux开发实操(十五):nand flash接口开发

# 前言 flash memory,分NAND和NOR: 如果说nor flash有个特点就是能执行代码,NOR并行接口具有地址和数据总线,spi flash更是主要用于存储代码,SPI(或QSPI)NOR代码可就地执行(XiP),一般系统要求flash闪存提供相对较高的频率和数据缓存的clocking。而nand flash主要用于…...

vue2 组件库之vetur提示

当我们开发完自定义UI组件库后&#xff0c;在项目中使用时&#xff0c;想要达到以下提示效果&#xff0c;组件提示与属性提示&#xff0c;有什么解决方案呢&#xff1a; 事实上&#xff0c;这是vetur的功能&#xff0c;原文如下&#xff1a; Component Data | Vetur If a pac…...

慕课网 Go工程师 第三周 package和gomodules章节

Go包的引入&#xff1a; 包名前面加匿名&#xff0c;只引入但不使用&#xff0c;如果对应包有init函数&#xff0c;会执行init函数&#xff08;初始化操作&#xff09; 包名前面加. 把这个包的结构体和方法导入当前包&#xff0c;慎用&#xff0c;你不知道当前包和被引入的包用…...

【ES6】JavaScript 中的数组方法reduce

reduce() 是一个 JavaScript 中的数组方法&#xff0c;它会对数组的每个元素执行一个提供的 reducer 函数&#xff0c;将其减少到一个单一的值。 这是 reduce() 的基本用法&#xff1a; //(method) Array<number>.reduce(callbackfn: (previousValue: number, currentV…...

数据结构--树4.2(二叉树)

目录 一、二叉树的定义和特点 1、定义 2、特点 二、二叉树的基本形态 1、空二叉树 2、只有一个根结点 3、根结点只有左子树 4、根结点只有右子树 5、根结点既有左子树又有右子树 6、斜树 7、满二叉树 8、满二叉树和完全二叉树 三、二叉树的性质 一、二叉树的定义和…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...