mongodb表由未分片修改为分片

东南风 / 2023-07-21 / 原文

环境:

mongodb:4.4.22

 

1.范围分片:

刚开始没有使用分片,后面写入数据了使用分片
在路由服务器上执行:

mongos> sh.shardCollection("db_pushmsg.app_message_nofenpian",{"user_id": 1})
{
        "ok" : 0,
        "errmsg" : "Please create an index that starts with the proposed shard key before sharding the collection",
        "code" : 72,
        "codeName" : "InvalidOptions",
        "operationTime" : Timestamp(1689918228, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1689918228, 5),
                "signature" : {
                        "hash" : BinData(0,"MLDP+DoqO+0iD9jhEzrBb2dB+Lw="),
                        "keyId" : NumberLong("7257793727152783361")
                }
        }
}

 

解决办法:
创建索引
db.app_message_nofenpian.createIndex({"user_id":1})
db.app_message_nofenpian.getIndexes()

再次执行分片

mongos>  sh.shardCollection("db_pushmsg.app_message_nofenpian",{"user_id": 1})
{
        "collectionsharded" : "db_pushmsg.app_message_nofenpian",
        "collectionUUID" : UUID("5382ae8e-2e07-4185-bdd0-db8ee85bad5e"),
        "ok" : 1,
        "operationTime" : Timestamp(1689918641, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1689918641, 5),
                "signature" : {
                        "hash" : BinData(0,"WSjbiHdll3P7O1ITDltvVdMijwk="),
                        "keyId" : NumberLong("7257793727152783361")
                }
        }
}

 

查看是否平衡
mongos> sh.isBalancerRunning()
true

平衡完成后会变成false
mongos> sh.isBalancerRunning()
false

 

2.hash分片

sh.shardCollection("db_pushmsg.app_message_nofenpian01",{"user_id": "hashed"})
mongos> sh.shardCollection("db_pushmsg.app_message_nofenpian01",{"user_id": "hashed"})
{
        "ok" : 0,
        "errmsg" : "Please create an index that starts with the proposed shard key before sharding the collection",
        "code" : 72,
        "codeName" : "InvalidOptions",
        "operationTime" : Timestamp(1689921384, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1689921384, 2),
                "signature" : {
                        "hash" : BinData(0,"aBgMib51mh1bRNbNLTP5uJ7Rl2E="),
                        "keyId" : NumberLong("7257793727152783361")
                }
        }
}

 

创建索引(注意这里必须指定hashed)
db.app_message_nofenpian01.createIndex({"user_id":"hashed"})