• 售前

  • 售后

热门帖子
入门百科

MongoDB 主分片(primary shard)相干总结

[复制链接]
形腿望舞 显示全部楼层 发表于 2021-8-14 15:29:03 |阅读模式 打印 上一主题 下一主题
目录


  • 01 主分片是什么?
  • 02 怎样迁移主分片

01 主分片是什么?

  分片集群中的每一个数据库都有一个主分片,这个主分片上生存了当前数据库中没有被分片的聚集的数据,主分片(primary shard)和主节点(primary)之间没有任何关联。
   主分片是由mongos选择出来的,选择的依据是每当创建新数据库的时候,mongos会从集群中选择包罗数据最少的分片作为新数据库的主分片。详细的选择方式是:
选择listDatabase下令返回的totalSize字段作为选择的准则。如下:
  1. mongos> db.adminCommand("listDatabases")
  2. {
  3.   "databases" : [
  4.     {
  5.       xxxx
  6.     },
  7.     {
  8.       xxxx
  9.     },
  10.     {
  11.       xxxx
  12.     }
  13.   ],
  14.   "totalSize" : 2842624,
  15.   "totalSizeMb" : 2,
  16.   "ok" : 1,
  17.   "operationTime" : Timestamp(1610982469, 1),
  18.   "$clusterTime" : {
  19.     "clusterTime" : Timestamp(1610982469, 1),
  20.     "signature" : {
  21.       "hash" : BinData(0,"knqdZrxpyGFdSi0gljxCQG4LJ9U="),
  22.       "keyId" : NumberLong("6894922308364795934")
  23.     }
  24.   }
  25. }
复制代码
  假如我们想手工的选择某个数据库的主分片,可以使用movePrimary下令,迁移主分片的过程会泯灭一定的时间,在迁移完成之前,不应该对数据库或者对应的聚集进行访问。迁移过程大概会影响整个集群的操纵,以是这个下令一样平常不要主动去使用,假如必须使用,请务必思量对网络负载的影响。
   假如你部署的一个分片集群是由一个副本集修改设置而来的,那么副本集上原来的那些数据库的主分片将会继承留在原来的副本集上,之后创建的数据库才可以将主分片设置在其他分片上。

02 怎样迁移主分片

   下面我们演示怎样使用movePrimary下令来迁移数据库的主分片。
首先,我们来看,当前new数据库的test聚集的主分片在sharding_yeyz这个分片上。它就是new.test的主分片,如下:
  1. mongos> sh.status()
  2. --- Sharding Status ---
  3. shards:
  4.   { "_id" : "sharding_yeyz", "host" : "sharding_yeyz/127.0.0.1:27018,127.0.0.1:27019,127.0.0.1:27020", "state" : 1, "tags" : [ "1_1000" ] }
  5.   { "_id" : "sharding_yeyz1", "host" : "sharding_yeyz1/127.0.0.1:27024,127.0.0.1:27025,127.0.0.1:27026", "state" : 1, "tags" : [ "1000_", "1000_2000" ] }
  6. databases:
  7.    ...
  8.   { "_id" : "new", "primary" : "sharding_yeyz", "partitioned" : true, "version" : { "uuid" : UUID("68c70c64-f732-4478-8851-06dad4b94d6b"), "lastMod" : 1 } }
  9.     new.test
  10.       shard key: { "number" : 1 }
  11.       unique: false
  12.       balancing: true
  13.       chunks:
  14.         sharding_yeyz 3
  15.         sharding_yeyz1 1
  16.       { "number" : { "$minKey" : 1 } } -->> { "number" : 1 } on : sharding_yeyz Timestamp(2, 1)
  17.       { "number" : 1 } -->> { "number" : 1000 } on : sharding_yeyz Timestamp(1, 2)
  18.       { "number" : 1000 } -->> { "number" : 2000 } on : sharding_yeyz1 Timestamp(2, 0)
  19.       { "number" : 2000 } -->> { "number" : { "$maxKey" : 1 } } on : sharding_yeyz Timestamp(1, 5)
  20.        tag: 1_1000 { "number" : 1 } -->> { "number" : 1000 }
  21.        tag: 1000_2000 { "number" : 1000 } -->> { "number" : 2000 }
复制代码
接下来我们使用movePrimary下令,使用之前,我们必要知道它的实行过程:
1、首先在集群元数据中修改主分片信息
2、然后移动所有的没有分片的聚集到指定的主分片中
**它只能在mongos上实行。
下令的用法是:
  1. db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } )
  2. 举例:
  3. db.adminCommand( { movePrimary : "new", to : "sharding_yeyz1" } )
复制代码
我们实行完:
db.adminCommand( { movePrimary : "new", to : "sharding_yeyz1" } )
之后,效果如下:
  1. mongos> sh.status()
  2. --- Sharding Status ---
  3. shards:
  4.   { "_id" : "sharding_yeyz", "host" : "sharding_yeyz/127.0.0.1:27018,127.0.0.1:27019,127.0.0.1:27020", "state" : 1, "tags" : [ "1_1000" ] }
  5.   { "_id" : "sharding_yeyz1", "host" : "sharding_yeyz1/127.0.0.1:27024,127.0.0.1:27025,127.0.0.1:27026", "state" : 1, "tags" : [ "1000_", "1000_2000" ] }
  6. databases:
  7.   { "_id" : "new", "primary" : "sharding_yeyz1", "partitioned" : true, "version" : { "uuid" : UUID("68c70c64-f732-4478-8851-06dad4b94d6b"), "lastMod" : 2 } }
  8.     new.test
  9.       shard key: { "number" : 1 }
  10.       unique: false
  11.       balancing: true
  12.       chunks:
  13.         sharding_yeyz 3
  14.         sharding_yeyz1 1
  15.       { "number" : { "$minKey" : 1 } } -->> { "number" : 1 } on : sharding_yeyz Timestamp(2, 1)
  16.       { "number" : 1 } -->> { "number" : 1000 } on : sharding_yeyz Timestamp(1, 2)
  17.       { "number" : 1000 } -->> { "number" : 2000 } on : sharding_yeyz1 Timestamp(2, 0)
  18.       { "number" : 2000 } -->> { "number" : { "$maxKey" : 1 } } on : sharding_yeyz Timestamp(1, 5)
  19.        tag: 1_1000 { "number" : 1 } -->> { "number" : 1000 }
  20.        tag: 1000_2000 { "number" : 1000 } -->> { "number" : 2000 }
复制代码
可以看到,主分片已经迁移完成了。
以上就是MongoDB 主分片(primary shard)相关总结的详细内容,更多关于MongoDB 主分片(primary shard)的资料请关注草根技能分享别的相关文章!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作