mongodb移除分片

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:
MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。 
但是缩减集群(删除分片)这种一般很少用到。由于曙光的某服务器又挂了,所以我们送修之前必须把它上面的数据自动迁移到其他Shard上。 

1、执行RemoveShard命令 
1 db.runCommand( { removeshard: "your_shard_name" } ) 
2
3 { msg : "draining started successfully" , state: "started" , shard :"mongodb0" , ok : 1 } 
上面这句会立即返回,实际在后台执行。 
2、查看迁移状态 
我们可以反复执行上面语句,查看执行结果。 
1 db.runCommand( { removeshard: "your_shard_name" } ) 
2
3 { msg: "draining ongoing" , state: "ongoing" , remaining: { chunks: 42, dbs : 1 }, ok: 1 } 
从上面可以看到,正在迁移,还剩下42块没迁移完。 
当remain为0之后,这一步就结束了。 
3、移出非Shard数据 

1 db.runCommand( { movePrimary: "myapp", to: "mongodb1" }) 
这次就不是立即返回了,需要很久,然后会返回如下: 
1 { "primary" : "mongodb1", "ok" : 1 } 
4、最后的清理 
上面步骤都完成后,还需要再执行一次RemoveShard,清理残余数据。 
1 db.runCommand( { removeshard: "mongodb0" } ) 
执行成功后,会如下结果: 
1 { msg: "remove shard completed succesfully" , stage: "completed", host: "mongodb0", ok : 1 } 
显示completed后,就可以安心的关闭mongod的进程了。 


--如果要移除的分片正好是某一个表的primary,就会报错无法移除,那么就先进行如下操作: 
mongos> use admin 
switched to db admin 
mongos> db.runCommand({moveprimary:"testdb",to:"shard0001"})  --将主移动到另一个分片上 
{ "primary " : "shard0001:192.168.12.104:27019", "ok" : 1 } 

mongos> db.runCommand({moveprimary:"test",to:"shard0001"}) 
{ "primary " : "shard0001:192.168.12.104:27019", "ok" : 1 } 


mongos> db.runCommand({removeshard:"192.168.12.104:27017"})   --这样就可以成功移除 

"msg" : "removeshard completed successfully", 
"state" : "completed", 
"shard" : "shard0000", 
"ok" : 1 
}
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
6月前
|
运维 NoSQL 安全
【最佳实践】高可用mongodb集群(1分片+3副本):规划及部署
结合我们的生产需求,本次详细整理了最新版本 MonogoDB 7.0 集群的规划及部署过程,具有较大的参考价值,基本可照搬使用。 适应数据规模为T级的场景,由于设计了分片支撑,后续如有大数据量需求,可分片横向扩展。
495 1
|
缓存 NoSQL Shell
MongoDB系列-在复制集(replication)以及分片(Shard)中创建索引
在使用MongoDB时,在创建索引会涉及到在复制集(replication)以及分片(Shard)中创建,为了最大限度地减少构建索引的影响,在副本和分片中创建索引,使用滚动索引构建过程。
435 0
|
存储 缓存 负载均衡
高可用mongodb集群(分片+副本):规划及部署
高可用mongodb集群(分片+副本):规划及部署
814 0
|
存储 NoSQL Java
高可用mongodb集群(分片+副本):性能测试
高可用mongodb集群(分片+副本):性能测试
544 0
|
1月前
|
NoSQL MongoDB
搭建MongoDB分片式集群
搭建MongoDB分片式集群
15 0
|
6月前
|
NoSQL MongoDB
MongoDB分片+副本集高可用集群的启停步骤
MongoDB分片+副本集高可用集群的启停步骤
139 0
|
8月前
|
存储 NoSQL MongoDB
MongoDB-分片片键
?> 那么紧接着上一篇的文章内容,如何将数据存储到不同的分片服务器上的? 答:通过分片片键
41 0
|
7月前
|
存储 NoSQL MongoDB
MongoDB分片教程
MongoDB分片教程
204 0
|
8月前
|
NoSQL MongoDB 数据库
MongoDB-分片集群搭建
搭建配置服务器复制集: • 早期版本的配置服务器只要一台即可 • 最新版本 MongoDB 要求配置服务器必须是一个复制集
190 0
|
8月前
MongoDB-分片查询
用户的请求会发送给 mongos 路由服务器, 路由服务器会根据查询条件去配置服务器查询对应的数据段和属于哪个分片服务器, 如果用户查询的条件是分片片键字段, 那么路由服务器会返回保存在那一台分片服务器上, 路由服务器就会去对应的分片服务器获取数据, 并将取到的数据返回给用户。
106 0