扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。
平武ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!但是缩减集群(删除分片)这种一般很少用到,但是有些场景,必须把它上面的数据自动迁移到其他Shard上。
mongodb迁移分片
1 db.runCommand( { removeshard:"your_shard_name" } )
3 { msg : "draining startedsuccessfully" , state: "started" , shard :"mongodb0",ok : 1 }
上面这句会立即返回,实际在后台执行。
我们可以反复执行上面语句,查看执行结果。
1 db.runCommand( { removeshard:"your_shard_name" } )
3 { msg: "draining ongoing" ,state: "ongoing", remaining: { chunks: 42, dbs : 1 }, ok: 1 }
从上面可以看到,正在迁移,还剩下42块没迁移完。
当remain为0之后,这一步就结束了。
1 db.runCommand( { movePrimary:"testdb", to: "shard2" })
这次就不是立即返回了,需要很久,然后会返回如下:
1 { "primary" :"mongodb1", "ok" : 1 }
上面步骤都完成后,还需要再执行一次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。
过程: 导出带有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 )
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流