ITPub博客

首页 > 数据库 > NoSQL > MongoDB将collection变为shard collection

MongoDB将collection变为shard collection

原创 NoSQL 作者:caoyutingtjpu 时间:2017-02-12 17:57:02 0 删除 编辑

       MongoDB随着业务量增长,可以把之前不是分片的集合变为分片集合,但是要注意的是,一旦指定shard key以后就无法直接更改了。下面为从添加shard server到shard key具体操作步骤

1)添加shard server
添加情境:

  • 1.1)数据存储目录不够
  • 1.2)无法满足当前生产写操作
  • 1.3)chunk太多

点击(此处)折叠或打开

  1. use admin
  2. db.runCommand({addShard:"mg-test-shard03/10.9.161.65:27019,10.9.33.70:27019"})

2)对数据库product启用分片

点击(此处)折叠或打开

  1. mongos> sh.enableSharding("product")
3)将集合变为分片集合

      添加分片的键需要创建索引,否则报错please create an index that starts with the shard key before sharding

      根据上面错误提示要在分片key上面创建索引,该索引要在对应库下建立,如果在mongos的admin库下建立会报错:"errmsg" : "{ configs1/10.9.33.70:26017,10.9.161.65:26017: \"result without error message returned : {}\" }"

点击(此处)折叠或打开

  1. use admin
  2. db.runCommand({"shardcollection":"mg_kk_likes.kk_device_likes_game","key":{"device_id" : "hashed"}}) 

4)手动迁移数据

     如果开启balance,数据会自动打散。如果没有开启,头一次需要自己手动迁下数据:

点击(此处)折叠或打开

  1. db.runCommand( { moveChunk : "" ,
  2.                  find : {查询条件} ,
  3.                  to : "" } )
注释:

  • moveChunk:一个集合的全字要加上数据库的名称:比如test.yql 
  • find:一个查询语句,对于指定集合中的符合查询的数据或者chunk,系统自动查出from的shard
  • to: 指向chunk的目的shard 

       只要目的shard和源sharad同意指定的chunk由目的shard接管,命令就返回。迁移chunk是一个比较复杂的过程,它包括两个内部通信协议:

  • 1 复制数据,包括在复制过程中的变化的数据
  • 2 确保所有参与迁移的组成部分:目的shard ,源shard ,config server都确定迁移已经完成!

5)删除分片集合的分片

点击(此处)折叠或打开

  1. use admin
  2. db.runCommand({removeshard:"mg-test-shard03/10.9.161.65:27019,10.9.33.70:27019"})
      sh.setBalancerState(true);保证balance是开启的,才会将被删除的分片上的数据会自动迁移到其他分片上,draining" : true,  --正在迁移数据

      这个命令可以重复执行以便查看迁移的状态,remaining 字段表示剩余数据块的数量

 

6)删除未分片的主分片

      数据库未分片,该数据库就会选择一个分片作为主分片。Db.collection.stats()中"primary" : "mg-test-shard01"显示就是主分片,删除这个主分片,需要先将集合主分片改为其他分片,然后才能删除主分片

点击(此处)折叠或打开

  1. db.runCommand( { movePrimary: "db_name", to: "new_shard" })
  2. db.runCommand({removeshard:"mg-test-shard01/10.9.161.65:27019,10.9.33.70:27019"})


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31324175/viewspace-2133421/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-05-13

  • 博文量
    19
  • 访问量
    67026