ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对已存在集合shardCollection失败

2021-04-29 12:03:54  阅读:204  来源: 互联网

标签:test2 db shardCollection 失败 mongos 哈希 分片 集合 db3


查看集合信息

mongos> show collections
comm
system.profile
test
test1
test2
mongos> db.test2.count()
982334
mongos> 

查看索引

mongos> db.test2.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "db3.test2"
    }
]

创建哈希索引

mongos> db.test2.createIndex({"_id":"hashed"})
{
    "raw" : {
        "hdshard3/172.16.254.136:40003,172.16.254.137:40003,172.16.254.138:40003" : {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 1,
            "numIndexesAfter" : 2,
            "ok" : 1
        }
    },
    "ok" : 1,
    "operationTime" : Timestamp(1619664717, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1619664717, 1),
        "signature" : {
            "hash" : BinData(0,"LzzTbOHmN0qOhpkbFNkp9kuqru0="),
            "keyId" : NumberLong("6941260985399246879")
        }
    }
}

哈希索引创建完成之后,马上进行哈希分片。

哈希分片

mongos> sh.shardCollection( "db3.test2", { _id: "hashed" } )
{
    "ok" : 0,
    "errmsg" : "sharding not enabled for db db3",
    "code" : 20,
    "codeName" : "IllegalOperation",
    "operationTime" : Timestamp(1619664844, 4),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1619664844, 4),
        "signature" : {
            "hash" : BinData(0,"lbUFNbAmMyci7N/uEUOdCR2te4E="),
            "keyId" : NumberLong("6941260985399246879")
        }
    }
}

报错提示我们数据库db3没有进行分片。

检查数据库分片

mongos> use config
switched to db config
mongos> db.databases.find()
{ "_id" : "db3", "primary" : "hdshard3", "partitioned" : true, "version" : { "uuid" : UUID("f0278f73-d999-453f-8739-eac30a8bcf9b"), "lastMod" : 1 } }

可以看到db3是已经分过片了。

原因分析:
分片要求整个shard对于非空集合必须都具备索引,而我们进行集合分片时候,primary节点哈希索引创建完了,secondary节点还未创建完,导致分片失败。
出现这种情况一般有两种场景:

  1. 操作过快,secondary还未来得及创建哈希索引。
  2. 存在延迟secondary,可以暂时关闭延迟从库。

标签:test2,db,shardCollection,失败,mongos,哈希,分片,集合,db3
来源: https://blog.51cto.com/u_12592884/2742299

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有