在MongoDB副本集的测试中发现了一个丢数据的案例。

1. 概要描述

测试场景为:一主一从一验证

测试案例

step1 :关闭从副本;

step 2 ;向主副本中插入那条数据;

step 3 :关闭主副本;

step 4 :开启辅助副本,此副本升级为主副本,这是后会看到新的主副本没有刚才插入的几笔数据。

----测试时,请注意测试步骤。

step 5 :原主节点 再次加入到集群中后,会变成新的辅助副本。测试插入的数据会产生回滚。

2. 具体的测试步骤

(1)测试服务器,原测试环境

主Server:Port 副Server:Port 见证Server:Port
XXX.XXX.XXX.124:27220 XXX.XXX.XXX.123:27221 XXX.XXX.XXX.134:27220

(2)测试步骤

Step 1 向主数据库(XXX.XXX.XXX.124:27220),插入以下数据,执行时间要长一些。

for(var i = ; i < ; i++) { db.order0522.insert({a: i});};

Step 2 在上述命令执行的过程中,关于副主Server上的mongodb服务,服务命名为mongodboplogtest.service

systemctl stop mongodboplogtest.service

Step 3.查询主副本上数据库insert的数据量,为100000.命令完全插入。

Step 4.关闭主副本上的Mongodb 服务,服务命名为mongodboplogtest.service

systemctl stop mongodboplogtest.service

Step 5 开启辅助节点上的MongoDB服务

systemctl start mongodboplogtest.service 

step 6 此时辅助节点(XXX.XXX.XXX.123)升级为主节点,此时数据为30337(100000-30337 笔记录丢失了)

 

此时 124 (原主节点)为 "stateStr" : "(not reachable/healthy)"

step 7 开启原主节点上的服务,集群的状态,关于原主节点的描述短暂处于 "stateStr" : "ROLLBACK"

 step 8 回滚后,状态变为 "stateStr" : "SECONDARY"

step 9 查询原主节点数据,此时数据量为30337(100000-30337 笔也记录丢失了)

3.丢失的数据是否可以找到

我们发现,重启原主节点(XXX.XXX.XXX.124)mongodb服务后,在数据目录下多了一个  rollback 目录。

重启前的数据目录

重启后的数据目录

进去这个目录后,我们看到生成了一个以数据库+集合名字+时间的 bson 文件。

MongoDB 副本集丢失数据的测试的更多相关文章

  1. [ MongoDB ] 副本集的搭建及测试

    Replica Sets  复制 (副本集) node1: 10.0.0.10node2: 10.0.0.11node3: 10.0.0.12 副本集结构图:

  2. mongodb副本集搭建过程中的问题和解决技巧

    在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...

  3. MongoDB副本集学习(二):基本测试与应用

    简单副本集测试 这一节主要对上一节搭建的副本集做一些简单的测试. 我们首先进入primary节点(37017),并向test.test集合里插入10W条数据: . rs0:PRIMARY> ;i ...

  4. java程序连接MongoDB副本集测试

    三个节点有一个节点挂掉也不会影响应用程序客户端对整个副本集的读写! public class TestMongoDBReplSet { public static void main(String[] ...

  5. MongoDB 副本集的原理、搭建、应用

    概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...

  6. nodejs+mongoose操作mongodb副本集实例

    继上一篇设置mongodb副本集之后,开始使用nodejs访问mongodb副本集: 1:创建项目     express 项目名称 2:npm install mongoose    安装mongo ...

  7. MongoDB副本集(一主一备+仲裁)环境部署-运维操作记录

    MongoDB复制集是一个带有故障转移的主从集群.是从现有的主从模式演变而来,增加了自动故障转移和节点成员自动恢复.MongoDB复制集模式中没有固定的主结点,在启动后,多个服务节点间将自动选举产生一 ...

  8. MongoDB副本集的原理,搭建

    介绍: mongodb副本集即客户端连接到整个副本集,不关心具体哪一台机器是否挂掉.主服务器负责整个副本集的读写,副本集定期同步数据备份,一旦主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应 ...

  9. MongoDB副本集学习(一):概述和环境搭建

    MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...

随机推荐

  1. SSM框架之spring(1)

    spring(1) 1.spring概述 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP( ...

  2. Zimbra

    第一步:利用XXE读取配置文件 这里利用了CVE-2019-9670漏洞来读取配置文件,你需要在自己的VPS服务器上放置一个dtd文件,并使该文件能够通过HTTP访问.为了演示,我在GitHub上创建 ...

  3. html-css___table属性(设置细线边框)

    border-collapse 属性设置表格的边框是否被合并为一个单一的边框 //设置table实线边框 table,td{ /*边框合并*/ border-collapse: collapse; b ...

  4. Redis 通过 scan 找出不过期的 key

    SCAN 命令是一个基于游标的迭代器(cursor based iterator):SCAN 命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游 ...

  5. 实际场景:UI、原型与实际不符;研发怼你,你要怎么办?-Dotest软件测试

    实际公司场景:UI.原型与实际不符:你提交的问题(bug),开发又开始怼你,遇到这种情况,你会怎么办?怎么沟通?(如下图) 解释:大部分公司都是这样,区别在于差异性有多大:做出来的东西大部分与设计.原 ...

  6. Python入门基础学习(文件与异常处理)

    Python基础学习笔记(七) 捕获异常的语法格式: 文件的基本操作: 打开文件 读.写文件 关闭文件 read方法 --读取文件: open函数的第一个参数是要打开的文件名(文件名区分大小写) 如果 ...

  7. 个人的一点小愚见,java有什么优点和缺点

    java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的.可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏. j ...

  8. 有static的方法和没有static的调用

    package com.yh.test02; public class Test { public static void main(String[] args) { Test.method1(); ...

  9. 新手springmvc web简单搭建过程-caidachun

    第一次做整了一天,中间各种报错,大佬肯定要嘲笑我了,但还是很有成就敢,现在只知道怎么装配,还不知道为什么,还需要学习.加油 1.新建动态web项目 2. 添加jar包,可以到网上下载,commons- ...

  10. jsp连接mysql出现不支持认证协议的解决办法

    错误提示 com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Client does not support authent ...