mongodb移动chunks脚本
mongodb移动chunks脚本随着数据量的增加,可能需要把增加分片(shard),增加分片后,需要将部分的数据移动到新的分片上。本来mongodb是支持自动平衡的(balancer,也就是会根据各个分片的数据情况,自动分片、移动数据到分片上),但由于自动平衡需要大量的系统资源,而且容易导致程序卡死,所以在实际的应用中,我们是将自动平衡关掉的。
我们曾经遇到的问题是。原来2个分片,由于数据量的增加,准备添加一个分片。原来2个分片上,每个分片上有几百个chunks,单个网站(如:用tudou举例),在一个分片上就有近200个chunks。
问题:自动平衡已被停掉
手动移动,数据太多,费时费力。
方法:采用单个网站,使用脚本来移动。
var namespace = "tudou.video";
var cursor = db.chunks.find({ns:namespace});
var s1=0,s2=0,s3=0;
var allCnt = cursor.count();
var perCnt = parseInt(allCnt/3);
print("all-count:"+allCnt+"per-count:"+perCnt);
while (cursor.hasNext()) {
var chunk = cursor.next();
if(chunk.shard=="s1"){
s1++;
print("s1 "+chunk._id);
if(s1>perCnt && s3perCnt && s3
页:
[1]