MongoDB主分片是什么?
Admin 2021-05-06 群英技术资讯 461 次浏览
分片集群中的每一个数据库都有一个主分片,这个主分片上保存了当前数据库中没有被分片的集合的数据,主分片(primary shard)和主节点(primary)之间没有任何关联。主分片是由mongos选择出来的,选择的依据是每当创建新数据库的时候,mongos会从集群中选择包含数据最少的分片作为新数据库的主分片。具体的选择方式是:选择listDatabase命令返回的totalSize字段作为选择的准则。如下:
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命令,迁移主分片的过程会耗费一定的时间,在迁移完成之前,不应该对数据库或者对应的集合进行访问。迁移过程可能会影响整个集群的操作,所以这个命令一般不要主动去使用,如果必须使用,请务必考虑对网络负载的影响。
如果你部署的一个分片集群是由一个副本集修改配置而来的,那么副本集上原来的那些数据库的主分片将会继续留在原来的副本集上,之后创建的数据库才可以将主分片设置在其他分片上。
下面我们演示如何使用movePrimary命令来迁移数据库的主分片。首先,我们来看,当前new数据库的test集合的主分片在sharding_yeyz这个分片上。它就是new.test的主分片,如下:
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上执行。
命令的用法是:
db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } ) 举例: db.adminCommand( { movePrimary : "new", to : "sharding_yeyz1" } )
我们执行完:
db.adminCommand( { movePrimary : "new", to : "sharding_yeyz1" } )
之后,结果如下:
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主分片是什么的介绍,现在大家对MongoDB主分片应该都有所了解了,希望大家阅读完这篇文章能有所收获,想要了解更多MongoDB的相关内容大家可以继续关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
spark整合mongodb的方法是什么?一些朋友对于怎么实现spark整合mongodb不是和清楚,下面就给大家简单的介绍一下Spark 和spark整合mongodb的方法步骤。
相信大家都知道mongodb是不支持join操作的,因此我们只能自己来实现这个功能。所以下面这篇文章主要给大家介绍了关于在MongoDB中如何使用JOIN操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。
使用mongodb做集群的方法:1、使用Replica Set副本实现集群。2、使用Sharding分片方式实现。3、使用Master-slave主备方式实现。
MongoDB中find()和findOne()不同:1、findOne()返回的是一个对象;2、findOne()返回的是一个对象,此对象仅是一个满足输入条件的文档。
mongodb分片是指将数据拆分,将其分散存放在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008