zlzyp 发表于 2015-7-10 08:04:21

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]
查看完整版本: mongodb移动chunks脚本