Mongodb
重命名 Mongo 碎片
我可以,如果可以,如何在 Mongo 中重命名分片?
就像我想在下面將 rs0 的實例更改為 rep0 一樣:
mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 4, "minCompatibleVersion" : 4, "currentVersion" : 5, "clusterId" : ObjectId("111111111111") } shards: { "_id" : "rs0", "host" : "rs0/mongo0a:27017,mongo0b:27017" } ...
我曾考慮過刪除並重新添加分片,但我不確定如何在不必耗盡分片和刪除 dbs 的情況下做到這一點。
目前有 0 個集合啟用了分片,我只添加了一些獨立的作為分片。
謝謝
不,目前不支持重命名分片的方法,但正如您提到的,您可以刪除並重新添加。即便如此,它也沒有你想像的那麼簡單,因為雖然你可以在添加分片時指定一個名稱,但它並沒有就此結束——還有副本集本身需要擔心。添加時的名稱規範只是 的值
_id
,請參見以下範例(我的副本集是 rs0,和你的一樣):mongos> db.adminCommand({addShard : "rs0/host.example.com:27017,host.example.com:27018", name : "rep0"}); mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 4, "minCompatibleVersion" : 4, "currentVersion" : 5, "clusterId" : ObjectId("539838845bc6bf5ee52a56ea") } shards: { "_id" : "rep0", "host" : "rs0/host.example.com:27017,host.example.com:27018" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" }
請注意,所有更改的是分
_id
片,"host"
值保持不變,因為rs0
是副本集的名稱 - 如果您嘗試在rep0
那裡使用它將無法添加。因此,刪除和重新添加會給您帶來的只是兩個名稱之間的不匹配。要更改該
host
值,您不僅必須刪除/重新添加分片,還必須在重新添加分片之前更改副本集配置。換句話說,replSet
必須將參數更改為rep0
also,這意味著重新初始化集合 - 也不是一件容易的事。總的來說,有可能到達你想要的地方,但是會有大量的工作並且不會很快(排水,重新初始化集合),特別是如果你有很多數據。為了更改幾個字元串,我通常建議保持原樣。