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

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

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

相关文章

AI 浪潮下,W3AI 如何增强和激励 Web3 玩家研究和决策力?

更加个性化的 AI 服务是怎样的?近年来,不少主打 AI 服务的 Web3 初创项目开始兴起,凭借语音、文字、图像等全方位的用户数据跟踪和使用习惯定义,场景化的 AI Web3 产品开始围绕用户的工作、生活日常提供智能服务。这其中&#xff…

本质矩阵E推R和T

https://zhuanlan.zhihu.com/p/500798616 https://zhuanlan.zhihu.com/p/435306687

【MySQL系列】Select语句单表查询详解入门(SELECT,AS,模糊查询,运算符,逻辑运算符)

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

SCI论文创新思路

SCI论文创新思路 一、 创新的分类1、算法创新2、架构创新3、迁移创新4、思想创新5、方法创新6、组合创新 二、组合创新的必要性三、组合创新的流程四、组合创新举例1、组合创新公式2、生活中的例子3、关于CV的例子4、魔改的方法 一、 创新的分类 1、算法创新 比如提出CNN、LS…

【PHP面试题82】system和exec是用来做什么的?有什么区别

文章目录 🚀一、前言,PHP中system和exec命令的作用🚀二、system()函数🚀三、exec()函数🚀四、区别和应用场景🔎4.1 使用system()函数的应用场景🔎4.2 使用exec()函数的应用场景🔎4.3…

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介

📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。 💐学习建议:1、养成习惯,学习java的任何一个技术…

Linux线程篇(中)

有了之前对线程的初步了解我们学习了什么是线程,线程的原理及其控制。这篇文章将继续讲解关于线程的内容以及重要的知识点。 线程的优缺点: 线程的缺点 在这里我们来谈一谈线程健壮性: 首先我们先思考一个问题,如果一个线程出现…

【官方中文文档】Mybatis-Spring #目录

目录 此页面用于在GitHub上呈现索引。 NOTE: 由于链接目标是在使用maven-site-plugin转换为html的假设下指定的,因此在GitHub上的呈现中有一个锚点已损坏。 简介入门SqlSessionFactoryBean事务使用 SqlSession注入映射器Spring Boot使用 MyBatis APISpring Batch示…

Ubuntu22.04安装中文输入法►由踩坑到上岸版◄

Ubuntu22.04安装中文输入法►由踩坑到上岸版◄ 了解入坑上岸 更新一发:Gedit中文乱码问题的解决 为了方便回忆和记录甚至后面继续重装系统,我还是写一下以便将来用到或参考~ 了解 安装Ubuntu22.04(截至2023年08月26日11&#xff…

基于JavaFX的贪吃蛇小游戏

游戏背景介绍 贪吃蛇游戏是一款经典的小游戏,它的玩法很简单,就是控制蛇吃食物,每吃一个食物蛇的长度就会加一,直到蛇撞到墙壁或者撞到自己时游戏结束,最终的得分是蛇的长度减一。 JavaFX 用Java开发桌面端首选就是J…

shell脚本——循环语句、sed、函数、数组、免交互expect

目录 循环语句 for while 与 until sed 基本用法 sed脚本格式 函数 注意事项 定义函数和调用函数 脚本中函数的位置 查看函数 删除函数 函数返回值 函数的传参操作 使用函数文件 递归函数 数组 声明数组 数组切片 免交互expect 定义 基本命令 循环语句 …

python3/pip3 SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

环境: mac os 背景: 电脑之前安装的是python3.9 , 现在升级到python3.10。 从python官网下载macos版本的python3.10 pkg。 双击安装。 程序使用aiohttp访问ebay 。 出错: aiohttp.client_exceptions.ClientConnectorCertifi…

MySql015——使用子查询

一、创建customers表 ######################## # Create customers table ######################## use study;CREATE TABLE customers (cust_id int NOT NULL AUTO_INCREMENT,cust_name char(50) NOT NULL ,cust_address char(50) NULL ,cust_city char…

如何让qt tableView每个item中个别字用不同颜色显示?

如何让qt tableView每个item中个别字用不同颜色显示? 从上面图片可以看到,Item为红色,数字5为黑色。 要实现在一个控件实现不同颜色,目前想到的只有QTextEdit 、QLabel。有两种方法,第一种是代理,第二种是…

yolov5添加SimAM注意力机制(yolov7同理)

SimAM注意力机制简介 关于SIMAM注意力机制的原理这里不再详细解释,这篇发在Proceeddings of the 38th Internation Conference on Machine Learning.论文参考如下论文链接here   yolov5中添加SimAM注意力机制 注意力机制分为接收通道数和不接受通道数两种。这次属于不接受通…

数据库相关知识2

数据库知识2 关系完整性 数据完整性 指的是数据库中的数据的准确性和可靠性 实体完整性约束: 目的: 在表中至少有一个唯一的 标识,主属性字段中,不为空,不重复 主键约束:唯一 不重复 不为空 primary k…

c语言实现堆

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、树1、树的概念2、树的相关概念3、树的表示 二、二叉树1、二叉树概念2、特殊的二叉树3、二叉树的性质4、二叉树的顺序结构5、二叉树的链式结构 三、堆(二叉树…

C# textBox1.Text=““与textBox1.Clear()的区别

一、区别 textbox.Text "" 和 textbox.Clear() 都可以用于清空文本框的内容,但它们之间有一些细微的区别。 textbox.Text "": 这种方式会将文本框的 Text 属性直接设置为空字符串。这样会立即清除文本框的内容,并将文本框显示为空…

【leetcode 力扣刷题】双指针///原地扩充线性表

双指针///原地扩充线性表 剑指 Offer 05. 替换空格定义一个新字符串扩充字符串,原地替换思考 剑指 Offer 05. 替换空格 题目链接:剑指 Offer 05. 替换空格 题目内容: 这是一道简单题,理解题意,就是将字符串s中的空格…

拼多多开放平台的API接口可以获取拼多多电商数据。以下是API接口流程

使用拼多多开放平台的API接口可以获取拼多多电商数据。以下是一般的API接口流程: 1. 注册开发者账号:首先,您需要在拼多多开放平台注册一个开发者账号。通过开发者账号,您可以获得API密钥和其他必要的信息。 2. 鉴权与认证&…