gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章MongoDB 主分片(primary shard)相关总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

01 主分片是什么?

  分片集群中的每一个数据库都有一个主分片,这个主分片上保存了当前数据库中没有被分片的集合的数据,主分片(primary shard)和主节点(primary)之间没有任何关联.

   主分片是由mongos选择出来的,选择的依据是每当创建新数据库的时候,mongos会从集群中选择包含数据最少的分片作为新数据库的主分片。具体的选择方式是:

选择listdatabase命令返回的totalsize字段作为选择的准则。如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mongos> db.admincommand( "listdatabases" )
{
   "databases" : [
     {
       xxxx
     },
     {
       xxxx
     },
     {
       xxxx
     }
   ],
   "totalsize" : 2842624,
   "totalsizemb" : 2,
   "ok" : 1,
   "operationtime" : timestamp (1610982469, 1),
   "$clustertime" : {
     "clustertime" : timestamp (1610982469, 1),
     "signature" : {
       "hash" : bindata(0, "knqdzrxpygfdsi0gljxcqg4lj9u=" ),
       "keyid" : numberlong( "6894922308364795934" )
     }
   }
}

   如果我们想手工的选择某个数据库的主分片,可以使用moveprimary命令,迁移主分片的过程会耗费一定的时间,在迁移完成之前,不应该对数据库或者对应的集合进行访问。迁移过程可能会影响整个集群的操作,所以这个命令一般不要主动去使用,如果必须使用,请务必考虑对网络负载的影响.

   如果你部署的一个分片集群是由一个副本集修改配置而来的,那么副本集上原来的那些数据库的主分片将会继续留在原来的副本集上,之后创建的数据库才可以将主分片设置在其他分片上.

02 如何迁移主分片 。

   下面我们演示如何使用moveprimary命令来迁移数据库的主分片.

首先,我们来看,当前new数据库的test集合的主分片在sharding_yeyz这个分片上。它就是new.test的主分片,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mongos> sh.status()
--- sharding status ---
  shards:
   { "_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" ] }
   { "_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" ] }
 
  databases:
    ...
   { "_id" : "new" , "primary" : "sharding_yeyz" , "partitioned" : true , "version" : { "uuid" : uuid( "68c70c64-f732-4478-8851-06dad4b94d6b" ), "lastmod" : 1 } }
     new.test
       shard key : { "number" : 1 }
       unique : false
       balancing: true
       chunks:
         sharding_yeyz 3
         sharding_yeyz1 1
       { "number" : { "$minkey" : 1 } } -->> { "number" : 1 } on : sharding_yeyz timestamp(2, 1)
       { "number" : 1 } -->> { "number" : 1000 } on : sharding_yeyz timestamp(1, 2)
       { "number" : 1000 } -->> { "number" : 2000 } on : sharding_yeyz1 timestamp(2, 0)
       { "number" : 2000 } -->> { "number" : { "$maxkey" : 1 } } on : sharding_yeyz timestamp(1, 5)
        tag: 1_1000 { "number" : 1 } -->> { "number" : 1000 }
        tag: 1000_2000 { "number" : 1000 } -->> { "number" : 2000 }

接下来我们使用moveprimary命令,使用之前,我们需要知道它的执行过程:

1、首先在集群元数据中修改主分片信息 。

2、然后移动所有的没有分片的集合到指定的主分片中 。

**它只能在mongos上执行.

命令的用法是:

?
1
2
3
4
db.admincommand( { moveprimary: <databasename>, to : <newprimaryshard> } )
 
举例:
db.admincommand( { moveprimary : "new" , to : "sharding_yeyz1" } )

我们执行完:

db.admincommand( { moveprimary : "new", to : "sharding_yeyz1" } ) 。

之后,结果如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mongos> sh.status()
--- sharding status ---
  shards:
   { "_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" ] }
   { "_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" ] }
 
  databases:
   { "_id" : "new" , "primary" : "sharding_yeyz1" , "partitioned" : true , "version" : { "uuid" : uuid( "68c70c64-f732-4478-8851-06dad4b94d6b" ), "lastmod" : 2 } }
     new.test
       shard key : { "number" : 1 }
       unique : false
       balancing: true
       chunks:
         sharding_yeyz 3
         sharding_yeyz1 1
       { "number" : { "$minkey" : 1 } } -->> { "number" : 1 } on : sharding_yeyz timestamp(2, 1)
       { "number" : 1 } -->> { "number" : 1000 } on : sharding_yeyz timestamp(1, 2)
       { "number" : 1000 } -->> { "number" : 2000 } on : sharding_yeyz1 timestamp(2, 0)
       { "number" : 2000 } -->> { "number" : { "$maxkey" : 1 } } on : sharding_yeyz timestamp(1, 5)
        tag: 1_1000 { "number" : 1 } -->> { "number" : 1000 }
        tag: 1000_2000 { "number" : 1000 } -->> { "number" : 2000 }

可以看到,主分片已经迁移完成了.

以上就是mongodb 主分片(primary shard)相关总结的详细内容,更多关于mongodb 主分片(primary shard)的资料请关注我其它相关文章! 。

原文链接:https://cloud.tencent.com/developer/article/1778809 。

最后此篇关于MongoDB 主分片(primary shard)相关总结的文章就讲到这里了,如果你想了解更多关于MongoDB 主分片(primary shard)相关总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com