1 votes

Renommer le Shard Mongo

Puis-je, et si oui, comment puis-je renommer un shard dans Mongo ?

Comme si je voulais changer les instances de rs0 en rep0 ci-dessous :

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" }
...

J'ai pensé à enlever et à remettre le tesson, mais je ne suis pas sûr de savoir comment le faire sans devoir vider le tesson et laisser tomber les dbs.

Actuellement, aucune des collections n'a de sharding activé, j'ai juste quelques standalones ajoutés comme shards.

Merci

1voto

Adam C Points 5092

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.

1voto

scientastic Points 11

Ceci n'est probablement pas pris en charge. Cependant, j'ai trouvé un moyen de renommer les tessons. Utilisez-le à vos risques et périls.

Fondamentalement, le nom du shard apparaît dans les serveurs de configuration dans les collections suivantes : config.databases, config.chunks, et config.shards.

Faites une simple mise à jour pour remplacer les champs qui ont l'ancien nom de shard par le nouveau nom de shard. Vous devrez répéter cette opération sur tous les serveurs de configuration. Arrêtez d'abord les serveurs shard et les clients mongos. Un exemple est donné ci-dessous :

$ mongo <configserver>:<port>/config
configsvr> db.databases.update({primary:'old_shard_name'},{$set:{primary:'new_shard_name'}},{multi:true})
configsvr> db.chunks.update({shard:'old_shard_name'},{$set:{shard:'new_shard_name'}},{multi:true})
configsvr> var temp = db.shards.findOne({_id:'old_shard_name'})
configsvr> temp._id = 'new_shard_name'
configsvr> db.shards.remove({_id:'old_shard_name'})
configsvr> db.shards.insert(temp)

Si vous changez le nom du jeu de répliques en même temps, vous pouvez modifier le champ "hosts" de l'enregistrement dans la collection config.shards en même temps.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X