Non, il n'existe actuellement aucun moyen de renommer un shard, bien que, comme vous le mentionnez, vous puissiez le supprimer et le réinsérer. Même dans ce cas, ce n'est pas aussi simple que vous pourriez le penser, car bien que vous puissiez spécifier un nom lors de l'ajout d'un shard, cela ne s'arrête pas là - il faut se préoccuper de l'ensemble de répliques lui-même. La spécification du nom lors de l'ajout est juste la valeur de l'attribut _id
voir l'exemple suivant (mon jeu de répliques est rs0, comme le vôtre) :
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" }
Notez que tout ce qui a changé est le _id
pour le shard, le "host"
reste la même, car rs0
est le nom de l'ensemble de répliques - si vous essayez d'utiliser rep0
il n'y aura pas d'ajout. Par conséquent, tout ce qu'une suppression et un réajout vous donneront, c'est une incompatibilité entre les deux noms.
Pour changer cela host
non seulement vous devez supprimer ou ajouter le shard, mais vous devez également modifier la configuration de l'ensemble de répliques avant de réinsérer le shard. En d'autres termes, la valeur replSet
doit être modifié pour être rep0
également, et cela signifie réinitialiser l'ensemble - ce qui n'est pas non plus une tâche facile.
Globalement, il est possible d'arriver à ce que vous voulez, mais il y aura une grande quantité de travail et ce ne sera pas rapide (vidanges, réinitialisation de l'ensemble), surtout si vous avez beaucoup de données. Pour le plaisir de changer quelques chaînes, je recommanderais généralement de les laisser telles quelles.