2019独角兽企业重金招聘Python工程师标准>>>

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的进程了。

一些遇到的问题:

Popgo: In my MongoDB sharding cluster, i used db.runCommand( { removeshard: "shard3" } )command to remove a shard "shard3", but it just puts the shard in draining mode, which will never end and three days past. All chunks of the shard "shard3" are moved into "shard1" or "shard2", but the APP read request can use it to query data. So i want to know which process of the sharding now or how to diagnose this problem?

MrKurt:You probably have a database using shard3 as its primary shard, check the output ofdb.printShardingStatus() to see where each database resides.

Once you figure out which database it is, move it to a different shard with the movePrimary command. Then run removeShard again and you should be good to go.

Popgo:

It is confirmed that there is a unsharded database test on the shard "shard3" and "shard3" is not the primary shard, then i drop "test" database and re-run removeshard command. It is success to remove the "shard3". From document, "Do not run the movePrimary until you have finished draining the shard". But our program also use the "shard3" with 3 nodes replicaset to query data. Why not to router APP requests to other available shards by mongos server?

Andre: You do need to run movePrimary to complete draining in the case of a db being on the primary. If you look at the results of the removeshard and see "chunks" : NumberLong(0) but "dbs": NumberLong(some number other than 0 ) you probably have a DB whose primary is the shard you are removing and will probably have to run movePrimary even though removeshard hasn't said "draining is complete". Check out this discussion on mongodb-user for more information:

相关的官方文档:http://docs.mongodb.org/manual/tutorial/remove-shards-from-cluster/

注意官方关于是否需要运行movePrimary的说明:

Databases with non-sharded collections store those collections on a single shard known as the primary shardfor that database. The following step is necessary only when the shard to remove is also the primary shard for one or more databases.

也就是说,如果在这个片上有非分片的collection,这样的话,分片的数据合到其他片上了,那么剩下的非分片数据,没法通过合并分片的方式合到其他服务器上,所以这时要运行一个movePrimary命令将这些非分片的数据移到另一个服务器上。db.runCommand( { movePrimary: "myapp", to: "mongodb1" })

This command migrates all remaining non-sharded data in the database named myapp to the shard namedmongodb1

还有一个官方说明需要注意的是:

Warning

Do not run the movePrimary until you have finished draining the shard

也就是说,一定要等到分片数据迁移完了,再运行movePrimary命令!!!

而且这句命令不像removeshard是异步的,这个movePrimary命令会等到将所有非分片数据都移到其他服务器后,才响应,所以时间有可能会比较长,主要还是看这个服务器上,非分片数据有多少。

另外,movePrimary执行完后,还记得将db.runCommand({removeshard:"shardx"})再运行一遍,直到看到如下结果{ msg: "remove shard completed successfully" , stage: "completed", host: "mongodb0", ok : 1 }

到此为止,迁移才真正完成,可以放心地关闭mongod。

about how to identify the non-sharding databases int server2, to run:db.printShardingStatus();

references:

If you need to figure out which database the removeshard output refers 
to, you can use the printShardingStatus command. It will tell you what 
is the "primary" shard for each non-partitioned database.

If any of the DBs have the drained shard listed as the primary, you 
will need to issue a move primary command (again listed on the page 
linked).

最后一个疑问是:在迁移的过程中,mongos是打到哪个分片上?迁移的具体执行是copy还是move?比如从服务器B合到A,在这个过程中,流量是打到B,还是全打到A?已合到A的分块去A中取,还是从B中取?

还有一个问题:如果总共就两个分片,将一个分片合回到新分片后,相关collections的分片策略可以更改了吗?因为分片的策略一旦确定后是无法修改的,但对于这种情况又是如何的呢?

有了解的朋友麻烦介绍一下呗!!!

公司现在的用户数据的一个片需要迁移回去,等具体执行后再整理以上文字吧。

转载于:https://my.oschina.net/yagami1983/blog/835326

从mongodb移除分片相关推荐

  1. mongodb移除分片删除分片上数据库和添加分片

    首先我们要移除的分片之后再次添加此分片时会出现添加失败的情况,需要在添加的分片上登录进行删除此分片之前数据库的历史数据比如testdb,删除分片上的数据库之后就可重新添加此分片到mongos中 1.执 ...

  2. Mongodb 添加删除分片与非分片表维护

    去年的笔记,接着发 一.如何移除分片 1.确认balancer已经开启 mongos> sh.getBalancerState() true 2.移除分片 注:在admin db下执行命令. m ...

  3. MongoDB分布式操作——分片操作

    http://www.2cto.com/database/201309/240552.html MongoDB分布式操作--分片操作 描述: 像其它分布式数据库一样,MongoDB同样支持分布式操作, ...

  4. mongodb集群分片环境搭建

    环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...

  5. 测试MongoDB的自动分片

    MongoDB的自动分片: test库分片配置: db.shards.find() { "_id" : "shard0000", "host" ...

  6. MongoDB分布式(分片存储)部署

    分别开启一个Config和两个Shard D:\mongodb1\bin\mongod --configsvr --dbpath D:\mongodb1\db\ --port 27020 D:\mon ...

  7. Mongodb操作基础 分片

    Mongodb分片 MongoDB分片是MongoDB支持的另一种集群形式,它可以满足MongoDB数据量呈爆发式增长的需求.当MongoDB存储海量的数据时,一台机器可能无法满足数据存储的需求,也可 ...

  8. mongodb副本集+分片集群部署 step by step

    mongodb副本集+分片集群部署step by step 本文只讲述mongodb副本集+分片集群的部署,关于mongdb shading & replica set原理优点等不在本文讨论范 ...

  9. MongoDB(4.0)分片——大数据的处理之道

    什么是分片 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上. MongoDB分片是 ...

最新文章

  1. usaco Healthy Holsteins
  2. 做一个有姿态的女孩子
  3. react native 的底部导航栏以及跳转页面带参数
  4. 电池充放电中的C5A 的意义
  5. Spring boot web(2):web综合开发
  6. Android 开发之旅:深入分析布局文件又是“Hello World!”
  7. Siri 自动拨打 911、Google 建筛查网站、IBM 测药物成分,国际抗疫在行动!
  8. 各种存储分配算法java代码实现_Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF...
  9. importanturlAndutl
  10. 大数问题-----ACM中java的入门使用
  11. 解放生产力「GitHub 热点速览 v.21.51」
  12. Mac fliqlo 时钟屏保
  13. 成功与运气:好运与精英社会的神话
  14. python电影名称词云_Python爬取最近上映的电影评论并生成词云——误杀
  15. MySQL查询point类型类型的坐标,返回经度纬度
  16. P2627 [USACO11OPEN]Mowing the Lawn G 题解(单调队列+dp)
  17. 魔与道java版本_魔与道360版下载
  18. html横向滚动效果,html 中 鼠标滑轮实现横向滚动
  19. 修改Github仓库中项目语言类型
  20. 丁小平微积分研究成果刍议

热门文章

  1. 商场里的导购图怎么制作?在商场内怎么导航?
  2. unetbootin安装linux,UNetbootin硬盘安装ubuntu8.04最简单办法
  3. 南京市软件行业协会程序员分会(筹)会员的权利
  4. 爱情八十课,背叛也活该
  5. python起源的故事_Python入门:在红遍全宇宙之前的小故事
  6. AMD发布22.8.2驱动,支持《黑道圣徒·重制版》
  7. 结对第一次作业----部门通
  8. os 虚拟存储器概述
  9. 好用的数据库设计工具
  10. 智能制造装备主要技术