Mongodb

重命名 Mongo 碎片

  • April 4, 2016

我可以,如果可以,如何在 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必須將參數更改為rep0also,這意味著重新初始化集合 - 也不是一件容易的事。

總的來說,有可能到達你想要的地方,但是會有大量的工作並且不會很快(排水,重新初始化集合),特別是如果你有很多數據。為了更改幾個字元串,我通常建議保持原樣。

引用自:https://serverfault.com/questions/604234