首页 > 数据库 >MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备

MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备

时间:2023-09-03 21:33:38浏览次数:38  
标签:热备 log 数据 MongoDB Journal 节点 双机 journal


MongoDB   会丢数据吗? 在次补刀MongoDB  双机热备_复制集


以后会争取每天一段感悟,不讨论对错,幼儿园的孩子才每件事论对错

最强大的,这个词不一定是个好词,最强大的往往是最虚弱的,那些天天和你谈格局,谈奉献,谈爱,强大的人,很可能内心和垃圾堆里面的碎玻璃一样,闪闪发光。如何和这样的人交往呢,一定要把自己碎的更厉害,发出耀眼的光,此刻他就不和你谈格局了

上期中提到了关于MongoDB 双机热备那篇文章是毒 !本期继续补刀,不把这样害死人的思维模式捅死,我是不会罢休的。

在使用多年MongoDB 后,是否问过一个问题,MongoDB 是否会丢数据,回答是不会。为什么?

在MongoDB的使用中,除了我们熟知了 Oplogs 来进行数据的复制同步到其他的节点,同时MongoDB也提供大部分传统数据库都提供的WAL 日志,--- Journaling ,在早期的版本 4.0 前你还可以关闭Journal log 

storage.journal.enaled: false

但在4.0后的MongoDB 你不能在关闭Journal log, 这样的情况下很多人认为MongoDB 不会丢失数据,实际上不是的,这里我们全部默认MongoDB 的数据引擎为wiredTiger 并且checkpoint的工作是正常的,在这样的情况下, MongoDB 有了Journal log 有了checkpoint 的工作机制,这里看似MongoDB 应该不会丢数据,但是我们需要注意的是,看下图

MongoDB   会丢数据吗? 在次补刀MongoDB  双机热备_数据库_02

在 MongoDB 中,如果是单机的模式下,从逻辑的角度来说,会丢数据按照数据库秒的默认设置,100ms 刷新Journal log ,则按照上图,会有可能最大丢失 100ms 内在MongoDB 中操作的数据。

怎么结果是丢数据,MongoDB 会丢数据,估计那些对于这个在DBEGINE 排名第四的数据库还是唯一的NOSQL数据库要各种 “踩” 了。

MongoDB   会丢数据吗? 在次补刀MongoDB  双机热备_数据库_03

1  没有人告诉你MongoDB 的生产部署模式是单机, 那篇官方文档提到过,建议你部署MongoDB是单机模式。

2  有没有人告诉你,Mongodb 基本的部署模式 replica set 复制集默认的写是 w: majority 

Majority 的含义为写大多数,也就是默认复制集合的节点最少为3 ,在这样的情况下,大多数为至少每次写入数据落盘2个节点。

MongoDB   会丢数据吗? 在次补刀MongoDB  双机热备_mongodb_04

好,那么在这样的操作下,MongoDB 有了Journal log , 有了Oplogs 支持下的 Replica 和 事务的大多数写作数的情况下,此时的MongoDB 的数据是安全的,在这样的情况下,我们认为操作 MongoDB 事务的情况下,数据是不会丢失的。

以下面的语句,这里插入了一条数据并且明确的标定,我们写入的情况下返回成功的前提是,节点中的大多数回馈,数据写入后,反馈事务提交成功。

db.data.insertOne(
   { name: "Simon", age : 30, level: "C" },
   { writeConcern: { w: "majority" , wtimeout: 5000 } }
)

在这样的情况下MongoDB 的数据写入是安全的,可以信赖的。

此时我们回到题目中的问题,如果你的MongoDB 是通过复制集中的协议但是你只搭建了2个节点,那么根据上述的MongoDB 数据安全和数据不丢失的理论就无从实现了,因为2个节点是不存在大多数这个概念的,在这样的情况下,我们无法从逻辑上保证数据是安全不丢失的。2节点破坏了MongoDB 的基本原理,包含Arbiter 的方式部署,这样的方式也在MongoDB 不在被推荐和建议。

所以每个数据库本身都有自己的理论和实现,并保证通过自己的理论来完成数据库不丢失数据的诺言。

所以MongoDB 双机热备就是一个伪命题,一个到处展现对于MongoDB无知的状态。

另关于MongoDB 如何清理  journal log 的问题,这里做一个回答,网络关于如果清理journal log 的部分,各种回答都有,这里注意

1  现在MongoDB 4.x 后都是WiredTiger 的数据引擎,这样的情况下不存在修改smallfile 的清理 journal log 的方案。

2  现有的Journal log 是产生100MB 大小的文件,并且在数据库做了checkpoint 的操作后,会自动删除废弃的 journal log 

3  如果需要手动删除journal log  则可以采用如下的方式进行手动删除

1 在需要删除Journal log 的MongoDB 服务器运行 

db.fsyncLock()

2  进入到Journal log 的日志目录,rm 相关文件

MongoDB   会丢数据吗? 在次补刀MongoDB  双机热备_mongodb_05

3  在MongoDB 中执行

db.fsyncUnlock()

以上的工作原理为,db.fsyncLock() 主要是将数据脏页全部刷新到磁盘,并停止数据的再次刷新的工作,此时就是一个人工的checkpoint点,此时可以将jounral log 进行清理。然后必须解除不能数据刷新的锁定。

最后,不懂MongoDB 基本原理,然后提出MongoDB双机热备的 T DBA 们,你们呀 ?  GET OUT

MongoDB   会丢数据吗? 在次补刀MongoDB  双机热备_数据库_06

MongoDB   会丢数据吗? 在次补刀MongoDB  双机热备_数据_07

标签:热备,log,数据,MongoDB,Journal,节点,双机,journal
From: https://blog.51cto.com/u_14150796/7343347

相关文章

  • mongodb副本集(仲裁模式)修改各节点ip(update方式)
    环境:OS:Centos7mongodb:5.0当前的ip  变更后的ip192.168.1.105192.168.1.108PRIMARY192.168.1.106192.168.1.109SECONDARY192.168.1.107192.168.1.110ARBITER 1.查看当前的集群登录一个节点......
  • mongodb副本集(非仲裁模式)修改各节点ip(update方式)
    环境:OS:Centos7mongodb:5.0当前的ip变更后的ip192.168.1.108192.168.1.105   PRIMARY192.168.1.109192.168.1.106   SECONDARY192.168.1.110192.168.1.107   SECONDARY 1.查看当前的集群登录一个节点上查......
  • MongoDB系列之分片管理
    1.查看当前状态1.1查看配置信息mongos>useconfig//查看分片mongos>db.shards.find(){"_id":"study","host":"study/localhost:27018,localhost:27019,localhost:27020","state":1}//查看分片集合信息mongos>db.collecti......
  • 【MongoDB】副本集通过一致性备份增加新节点
    [mongod@node01~]#opensslrand-base64666>/var/lib/mongo/keyfile[mongod@node01~]#chownmongod:mongod/var/lib/mongo/keyfile[mongod@node01~]#chmod600/var/lib/mongo/keyfile[mongod@node01~]#l/var/lib/mongo/keyfile-rw-------1mongodmongo......
  • 开心档-软件开发入门之MongoDB 高级索引
     作者简介:每天分享MongoDB教程的学习经验、和学习笔记。  座右铭:有自制力,做事有始有终;学习能力强,愿意不断地接触学习新知识。个人主页:iOS开发上架的主页前言本章将会讲解在数组中创建索引,需要对数组中的每个字段依次建立索引。所以在我们为数组tags创建索引时,会为music、cric......
  • Golang操作MongoDB
    MongoDB介绍MongoDB是一种非关系型数据库,C++编写的分布式文档型号数据库,内部使用类似于JSON的bson二进制格式。支持单机、主从(废弃)、副本集、Sharding分片等多种高可用架构。具体参考 https://blog.51cto.com/oldlees/7273362驱动驱动:https://www.mongodb.com/docs/drivers/Go驱动......
  • windows 下 MongoDB安装与配置
    ​ 一:安装1、官网下载官网下载地址:https://www.mongodb.com/try/download/community 下载社区​编辑​ 下载需要的版本、平台、安装方式即可,2、安装    直接傻瓜式安装即可,直到安装完成    1.选择安装方式:选择默认安装或者自定义安装,我这儿是选的自定......
  • go操作mongodb
    目录go操作mongodb依赖实例go操作mongodb依赖gogetgo.mongodb.org/mongo-driver/mongo实例packagedailyimport( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org......
  • mongodb建用户
    玛德折腾了2个小时,、mongodb建用户。艹[root@k8-mastermongodb]#catdocker-compose.yamlversion:'2'services:mongodb:container_name:mongodb_2.0image:mongo:4.4restart:alwaysenvironment:TZ:'Asia/Shanghai'MONGO_INITD......
  • Java中MongoDB的mongoTemplate使用(增删改查)
    注:本文只讲在java中的使用,并且只简单讲一下本人在开发中遇到的一部分并不完全概括在cmd中的请自行查看其他博主.简单准备:想用它就得引入它:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb......