Não, não há uma maneira compatível de renomear um fragmento no momento, embora, como você mencionou, você possa removê-lo e adicioná-lo novamente. Mesmo assim, não é tão simples quanto você imagina, porque embora seja possível especificar um nome ao adicionar um fragmento, ele não termina aí - existe um conjunto de réplicas com o qual se preocupar. A especificação do nome ao adicionar é apenas o valor de _id
, veja o exemplo a seguir (meu conjunto de réplicas é rs0, como o seu):
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" }
Observe que tudo o que mudou é o _id
do fragmento, o valor "host"
permanece o mesmo, porque rs0
é o nome do conjunto de réplicas - se você tentar usar rep0
, ele será Falha ao adicionar. Portanto, tudo o que um remover e adicionar novamente lhe dará é uma incompatibilidade entre os dois nomes.
Para alterar esse valor host
, não apenas você precisa remover / adicionar novamente o fragmento, mas também precisa alterar a configuração do conjunto de réplicas antes de adicionar novamente o fragmento. Em outras palavras, o parâmetro replSet
deve ser alterado para rep0
também, e isso significa reinicializar o conjunto - não é uma tarefa fácil.
Em geral, é possível chegar onde você quer, mas haverá uma grande quantidade de trabalho e não será rápido (drenagens, re-inicialização do conjunto), especialmente se você tiver muitos dados. Para alterar algumas strings, geralmente recomendo deixá-las como estão.