关键字:MongoDB中缩减Shard集群(删除一个Shard)--删除一个分片
对MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。
但是缩减集群(删除分片)这种一般很少用到。由于某服务器挂了,所以想送修之前必须把它上面的数据自动迁移到其他Shard上。
以下内容翻译自:http://docs.mongodb.org/manual/tutorial/remove-shards-from-cluster/
1、执行RemoveShard命令
db.runCommand( { removeshard: "your_shard_name" } )
{ msg : "draining started successfully" , state: "started" , shard :"mongodb0" , ok : 1 }
“
注意:该命令至少执行两次才能成功删除,执行到state为completed才真正删除,否则就是没用删除成功,该分片处于"draining" : true状态,该状态下不但该分片没用删除成功,而且还影响接下来删除其他分片操作,遇到该状态再执行一次removeshard即可,最好就是删除分片时一直重复执行删除命令,直到state为completed;
还有一个需要注意的地方就是:被成功删除的分片如果想要再加入集群时,必须将data数据目录清理干净才可以再加入集群,否则即使能加入成功也不会存储数据,集合都不会被创建
另外:在删除分片的时有可能整个过程出现无限"draining" : true状态,等多久还是这样,而且分片上面的块一个都没有移动到别的分片,解决办法是:在config的config数据库的shard集合中找到该分片的信息,并将draining字段由True改为False,再继续试着删除操作”
上面这句会立即返回,实际在后台执行。
2、查看迁移状态
我们可以反复执行上面语句,查看执行结果。
db.runCommand( { removeshard: "your_shard_name" } ) { msg: "draining ongoing" , state: "ongoing" , remaining: { chunks:
42, dbs :
1 }, ok:
1 }
从上面可以看到,正在迁移,还剩下42块没迁移完。
当remain为0之后,这一步就结束了。
3、移出非Shard数据(如果开始就知道是primary可以直接执行 步骤3和4即可,1和2不需要执行)
如果你要
删除的Shard分片恰好是primary,那么执行这一步,
否则请跳过!
db.runCommand( { movePrimary: "数据库名称", to: "分片名称" })
这次就不是立即返回了,需要很久,然后会返回如下:
{ "primary" : "mongodb1", "ok" : 1 }
4、最后的清理
上面步骤都完成后,还需要再执行一次RemoveShard,清理残余数据。
db.runCommand( { removeshard: "mongodb0" } )
执行成功后,会如下结果:
{ msg: "remove shard completed succesfully" , stage: "completed", host: "mongodb0", ok : 1 }
显示completed后,就可以安心的关闭mongod的进程了。
分享到:
相关推荐
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
搭建MongoDB分片集群并增加ACL是一个涉及到多个步骤的复杂过程,需要对MongoDB的架构、安全模型有深刻理解。通过本文,可以了解到搭建MongoDB 3.6分片集群的基础步骤,并对如何增加安全性有了基本的掌握。当然,在...
13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群...
mongodb副本集加分片集群安全认证使用账号密码登录
从 MongoDB 1.6 版本开始,MongoDB 支持自动分片(auto-shard),这使得管理工作变得更加方便。MongoDB 可以自动将数据分布到多个 shard server 中,以实现负载均衡和故障自动切换。 Shard 架构 Shard 架构由多个...
在 MongoDB 中,集群分片部署主要由三个组件组成:Shard Server、Config Server 和 Route Server。Shard Server 负责存储实际的数据块,Config Server 负责存储整个 Cluster Metadata,包括每个 Shard 的信息和 ...
2. 数据库操作:`Database`对象代表一个MongoDB数据库,可以创建、删除数据库,并执行各种管理任务。例如,创建名为`mydb`的数据库: ```python db = client['mydb'] ``` 3. 集合操作:`Collection`对象代表...
为了构建一个高可用的MongoDB集群,我们需要确定每个组件的数量,例如:三个mongos实例、三个config server实例和三个shard server实例(每个shard有一个副本集和一个仲裁者)。这样的配置确保了即使某些节点出现...
总的来说,从单节点到分片集群的升级是一个涉及多个步骤的复杂过程,需要对 MongoDB 的架构和操作有深入理解。在执行过程中,确保每一步都严格按照最佳实践进行,同时做好日志监控和备份,以应对可能出现的问题。
公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...
mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有...
总结来说,MongoDB分片集群的安装和配置是一个涉及多步骤的过程,包括服务器准备、组件设置、分片策略、监控和安全。理解这些知识点有助于构建高效、可靠的分布式数据库系统。通过实践,你可以熟练掌握MongoDB分片...
MongoDB 分片是一种水平扩展策略,用于处理大数据量和高并发场景...总的来说,MongoDB的分片技术旨在提供可扩展性和高性能,通过合理配置和管理,能够在大规模数据存储和高并发访问的环境中保持系统稳定性和响应速度。
每个分片可以是一个单一的MongoDB服务器,也可以是一个副本集(Replica Set),从而为数据提供冗余和高可用性。配置服务器是保存整个分片集群元数据的关键组件,它记录了所有分片的信息和集群的数据分布情况。 数据...
本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica Set),从而实现 MongoDB 集群的自动化管理和高可用性。 在本解决方案中,我们首先需要安装 Kubernetes 环境,并且需要准备好 NFS ...
mongos 是 MongoDB 集群中的前端路由服务器,负责接收客户端请求并将请求转发给合适的分片服务器。 ```bash ./mongodb/bin/mongos --configdb 192.168.2.1:21000,192.168.2.2:21000,192.168.2.3:21000 --port 20000...
在大规模数据存储和高可用性需求的场景下,MongoDB的分片集群部署是理想的选择。分片(Sharding)技术允许我们将数据分散到多个物理节点上,以实现水平扩展,提高系统的读写性能和存储容量。 **一、分片集群的组成...
本次实验旨在深入学习MongoDB的分片机制,理解并掌握如何部署一个基于多服务器的MongoDB分片集群。分片是MongoDB的一项重要特性,它允许将数据分散存储在多个物理服务器上,从而提高系统的可扩展性和性能。实验主要...