MongoDB Sharding 请勿复用已删除的 namespace

SERVER-17397: Dropping a Database or Collection in a Sharded Cluster may not fully succeed 是 MongoDB 里老大难的问题,库或集合删除操作如果没有完全执行成功,再新建相同名字的集合,可能导致读到老版本数据的问题。

集合分片原理

MongoDB sharding 分片原理参考 MongoDB Sharded cluster架构原理

总的来说,当用户对集合执行开启分片之后,集合分片的元数据会保存在 config server 的 config 集合里

  • config.collections 记录集合分片的元数据,根据哪个 shardKey 分片,集合是否已经被删除等元数据
  • config.chunks,记录各个 chunk(shardKey的某一段范围)对应的 shard 信息,用于路由请求
  • 各个 shard 里存储集合实际的数据

删除分片集合流程

  1. 删除所有 shard 里的对应的数据
  2. 删除 config.chunks 这个集合相关的chunk信息
  3. 修改 config.collections,标记集合已经删除

注:3.2+都是按上述流程操作,删除 Database 过程类似,还需要再额外操作 config.databases 集合,但本质上存在的问题类似

上述动作需要操作 config server 以及 所有的 shard,如果中间有步骤失败(一些很老的版本,并不是按照上述步骤执行,而且执行过程中可能没有严格检查返回的错误码,即使返回成功实际上内部可能执行失败),最终导致集合的部分数据仍然残留,没有完全清理干净。

如果这个集合名字重新被使用,再次调用 shardCollection 产生新的分片元数据,可能导致

  1. 在 shard 上的一些残留数据可能被读取到,而这些数据实际上应该被删除了
  2. mongos 没有成功更新路由信息,最终可能出现多个 mongos 看到的数据视图也不一致,有的 mongos 能读到数据,有的读不到(通过 `flushRouterConfig 命令可以强制刷新路由信息可解决)

解决方案

MongoDB sharding 删除集合/数据库涉及到多个节点进行操作,这些动作无法做到原子性,可能导致一个集合最终处于某种中间状态;复用该集合可能导致一写数据一致性问题。

  1. 使用 MongoDB 3.2+ 以上版本,大部分case,只要没有异常,删除集合动作都能正常完成的,复用集合名字问题一般问题也不大,但无法完全避免问题。
  2. 建议 Sharding 环境下,namespace 名字一旦被删除,不要再次复用
  3. 在需要复用 Namespace 的情况下,如果要确保不会有数据问题,每次可以按 drop collection workaround 确保相关数据被正确清理,并且路由信息被更新。

抢阿里云新用户专属优惠权益,致电95187-1 !


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

32岁被裁补偿N+2:“感谢裁我,让我翻倍!” 网友:求同款被裁!

2020年的冬天,“冷”的有些频繁。最近浏览一则新闻,19年12月19日,《马蜂窝被曝裁员40% UGC模式变现难?》爆火,据悉马蜂窝将裁员40%,交易中心成了“重灾区”,赔偿N2,留下的除搜索推荐…

JavaScript-操作DOM对象-创建和插入dom节点

插入节点 我们获得了某个Dom节点&#xff0c;假设这个dom节点是空的&#xff0c;我们通过innerHTML就可以增加一个元素了&#xff0c;但是这个DOM节点已经存在元素了&#xff0c;我们就不能这么干了&#xff01;会产生覆盖 将标签 追加 到其他标签 <p id"js">J…

技术架构演进|0到千万DAU,微淘如何走过?

导读&#xff1a;大家经常看到手淘里面的第二个TAB 就是微淘了&#xff01;目前有几千万 DAU&#xff0c;几百亿关注关系&#xff0c;每天几十万的商家生产内容&#xff0c;对系统的挑战较大。产品形态上目前以关注 feeds 流为主&#xff0c;是商家非常重要的获取流量阵地&…

TortoiseGit 更新远程仓库最新代码到本地仓库_入门试炼_05

文章目录1. 更新项目1. 更新项目 拉取和远程仓库保持版本一致

自动驾驶中高精地图的大规模生产:视觉惯导技术在高德的应用

导读&#xff1a;导航、驾驶辅助、自动驾驶等技术的不断发展对地图的精细程度提出了更高的要求。常规的道路级地图对于智能交通系统存在很多不足&#xff0c;针对自动驾驶应用的需求&#xff0c;我们提出了利用视觉惯导技术制作高精地图的方法。 本文将首先介绍视觉和惯导的主…

如何选择基于 Kubernetes 的 PaaS?

作者 | Bram Dingelstad译者 | 弯月&#xff0c;责编 | 郭芮头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;我们都遇到过这种情况&#xff1a;有人发现了一个bug&#xff0c;然而这不是一般的软件bug&#xff0c;甚至都不是通常意义上的…

TortoiseGit 推送本地仓库变动文件至远程仓库_入门试炼_06

文章目录1. 将本地仓库变动文件提交远程1. 将本地仓库变动文件提交远程 或者

JavaScript-获得和设置表单的值

文本框 text下拉框 单选框 radio多选框 checkbox隐藏域 hidden密码框 password… 表单的目的&#xff1a;提交信息 获得要提交的信息 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title…

Cloud Toolkit 部署应用到 EDAS Kubernetes 集群

1、在 IntelliJ IDEA 上单击 Cloud Toolkit 的图标&#xff0c;在下拉列表中选择 Deploy to EDAS -> EDAS for Kubernetes Application 2、在 Deploy to EDAS 对话框配置应用部署参数。 说明&#xff1a;如果您还没有在 EDAS 上创建应用&#xff0c;在对话框右上角单击 Cr…

架构师前辈告诉你:代码该如何才能自己写得容易,别人看得也不痛苦

来源 | 编程新说责编 | Carol头图 | CSDN 下载自视觉中国切身感受在这个世界上&#xff0c;最难看懂的文档&#xff0c;永远是同事写的需求文档。最难看懂的代码&#xff0c;永远是同事写的业务代码。我很纳闷&#xff0c;像Spring这样的官方英文文档&#xff0c;我看起来也不太…

20万天猫智慧门店背后的商业思考和技术重构

阿里妹导读&#xff1a;2016年&#xff0c;「新零售」被首次提出&#xff0c;在这些年里&#xff0c;无论是互联网公司、零售企业&#xff0c;还是像酒店、机场等这些服务型业态&#xff0c;都在积极探索新的零售模式。对于天猫这样一个服务了全球诸多品牌的平台来说&#xff0…

JavaScript-表单提交验证及前端密码MD5加密

表单提交方式一&#xff0c;按钮onclick绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- MD5 工具类 --><script src"https://cdn.bootcss.com/blueimp-…

Knative Eventing 之 Sequence 介绍

在处理数据时&#xff0c;往往会涉及到一个数据需要进行多次加工&#xff0c;这时候我们一般是通过Pipeline的方式进行处理。那么在Knative Eventing中是否也能支持对一个事件进行分步骤多次处理&#xff1f; 这个还真有。从 0.7 版本开始&#xff0c;Knative Eventing中提供了…

Linux基金会亚太区与开源中国达成战略合作 共同推动中国开源人才培养

北京时间2020年4月24日&#xff0c;Linux基金会亚太区&#xff08;LFAPAC&#xff09;与开源中国战略发布会暨LF开源软件大学联合启动仪式圆满落幕。发布会获得了多家业内知名企业的大力支持&#xff0c;邀请了50余家国内外新闻媒体参与直播报道。 会上&#xff0c;Linux基金会…

TortoiseGit 基础5部曲

文章目录1. 新增/修改文件2. 将工作区文件提交到本地仓库3. 更新最新版本项目到本地4. 将本地仓库中变动文件记录推送远程仓库5.登陆远程验证1. 新增/修改文件 新建VersionOfTheContrast.java文件&#xff0c;添加内容如下 2. 将工作区文件提交到本地仓库 3. 更新最新版本项…

即将发版!Apache Flink 1.9 版本有哪些新特性?

2019阿里云峰会上海开发者大会于7月24日盛大开幕&#xff0c;本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货&#xff0c;共同探讨前沿科技趋势。本文整理自开源大数据专场中阿里巴巴高级技术专家杨克特&#xff08;鲁尼…

TortoiseGit 单文件版本对比_入门试炼_09

文章目录一、单文件版本数据模拟二、单文件版本对比2.1. 查询单文件提交记录2.2. 单文件版本之间差异对比案例场景&#xff1a; 依次提交5次&#xff0c;推送远程&#xff0c;同一个文件5个版本之间的相互对比 一、单文件版本数据模拟 (企业内部) TortoiseGit 基础5方针_入门试…

数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

作者 | 张秋剑&#xff0c;天云数据上海副总经理责编 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;近日&#xff0c;有传闻 PostgreSQL 会发布 13 版本&#xff0c;这是去年 9 月发布 12 版本之后&#xff0c;PG 社区紧锣密鼓…

那些年,我们见过的Java服务端乱象

导读 查尔斯狄更斯在《双城记》中写道&#xff1a;“这是一个最好的时代&#xff0c;也是一个最坏的时代。”移动互联网的快速发展&#xff0c;出现了许多新机遇&#xff0c;很多创业者伺机而动&#xff1b;随着行业竞争加剧&#xff0c;互联网红利逐渐消失&#xff0c;很多创…