时间:2021-05-24
在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 = 0; i < 100000; i++) { db.order0522.insert({a: i});};Step 2 在上述命令执行的过程中,关于副主Server上的mongodb服务,服务命名为mongodboplogtest.service
systemctl stop mongodboplogtest.serviceStep 3.查询主副本上数据库insert的数据量,为100000.命令完全插入。
Step 4.关闭主副本上的Mongodb 服务,服务命名为mongodboplogtest.service
systemctl stop mongodboplogtest.serviceStep 5 开启辅助节点上的MongoDB服务
systemctl start mongodboplogtest.servicestep 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 文件。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言MongoDB副本集默认会创建local、admin数据库,local数据库主要存储副本集的元数据,admin数据库则主要存储MongoDB的用户、角色等信
Mongodb3.0.5副本集搭建及spring和java连接副本集配置详细介绍一、基本环境:mongdb3.0.5数据库spring-data-MongoDB
本文实例讲述了MongoDB复制(副本集)。分享给大家供大家参考,具体如下:replicationset复制集,复制集,多台服务器维护相同的数据副本,提高服务器
MongoDB是一个开源的non-SQL数据库引擎。MongoDB是可扩展的,是标准关系数据库管理系统(RDBMS)的替代品。副本集可以使在节点发生故障时还能提
前言mongodb的副本集架构,主库和从库的数据相同步,如果主库的机器坏掉,没什么关系,从库上还有相同的副本数据。但如果某人恶意操作或误操作,一下子批量删除或d