设为首页 收藏本站
查看: 881|回复: 0

[经验分享] mongodb迁移分片,关闭或者移除表的sharding ,开启自动平衡

[复制链接]
发表于 2018-10-25 10:37:36 | 显示全部楼层 |阅读模式
  MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。
  但是缩减集群(删除分片)这种一般很少用到,但是有些场景,必须把它上面的数据自动迁移到其他Shard上。
  mongodb迁移分片
1、执行RemoveShard命令 --只是迁移sharding表
  1       db.runCommand( { removeshard:"your_shard_name" } )
  3       { msg : "draining startedsuccessfully" , state: "started" , shard :"mongodb0",ok : 1 }
  上面这句会立即返回,实际在后台执行。
2、查看迁移状态
  我们可以反复执行上面语句,查看执行结果。
  1       db.runCommand( { removeshard:"your_shard_name" } )
  3       { msg: "draining ongoing" ,state: "ongoing", remaining: { chunks: 42, dbs : 1 }, ok: 1 }
  从上面可以看到,正在迁移,还剩下42块没迁移完。
  当remain为0之后,这一步就结束了。
3、迁移非Shard数据或者非Shard库
  1       db.runCommand( { movePrimary:"testdb", to: "shard2" })
  这次就不是立即返回了,需要很久,然后会返回如下:
  1       { "primary" :"mongodb1", "ok" : 1 }
4、最后的清理
  上面步骤都完成后,还需要再执行一次RemoveShard,清理残余数据。
  1       db.runCommand( { removeshard: "shard1"} )
  执行成功后,会如下结果:
  1       { msg: "remove shard completedsuccesfully", stage: "completed", host: " shard1", ok: 1 }
  显示completed后,就可以安心的关闭mongod的进程了。
  注意官方关于是否需要运行movePrimary的说明:
  也就是说,如果在这个片上有非分片的collection,这样的话,分片的数据合到其他片上了,那么剩下的非分片数据,没法通过合并分片的方式合到其他服务器上,所以这时要运行一个movePrimary命令将这些非分片的数据移到另一个服务器上。db.runCommand( { movePrimary: "testdb", to: "shard1"})
  还有一个官方说明需要注意的是:
  Warning
  Do not run themovePrimary 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。
mongodb关闭表的分片 (移除分片)
  过程: 导出带有sharding 的集合, 删除集合 ,导入集合
  1.导出集合
  /usr/local/mongodb/bin/mongodump--host 127.0.0.1:30000  -d testdb  -c table1  -o  testdb/
  2.禁用分片的自动平衡
  > use config
  >db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
  > db.printShardingStatus()

  3.删除集合
  db.table1.drop();
  4.导入集合
  /usr/local/mongodb/bin/mongorestore  --host 127.0.0.1:30000  -d testdb     testdb/
  执行 db.printShardingStatus() ,查看分片概要
  发现集合table1 的 sharding 功能已经被关闭!
平衡的关闭和开启
  mongodb在做自动分片平衡的时候,或引起数据库响应的缓慢,可以通过禁用自动平衡以及设置自动平衡进行的时间来解决这一问题。
  (1)禁用分片的自动平衡
  > use config
  >db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );

  恢复动态平台:
  use config
  db.settings.remove({"_id":"balancer"});
  (2)自定义自动平衡进行的时间段
  > use config
  >db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "21:00", stop : "9:00" } } }, true )


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626247-1-1.html 上篇帖子: mongodb 分片 缩减和增加 configsvr 节点 解决方法 下篇帖子: MongoDB简单介绍以及基本命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表