2010-10-05 6 views
4

J'ai une configuration de MongoDB partitionné avec 3 partitions: shard0000, shard0001 et shard0002. La machine qui exécute shard0002 est en panne maintenant, ce qui provoque l'échec de toutes mes requêtes. Je voudrais supprimer temporairement shard0002 de ma configuration et continuer à travailler avec les deux premiers fragments. Cela devrait être faisable en supposant que je n'utilise que des collections non protégées qui résident dans les deux premiers fragments, non?Enlever inaccessible Mongo fragment

Ce que j'ai essayé en premier est: db.runCommand({removeshard: 'IP:PORT'}) ce qui évidemment n'aide pas, car il met simplement le fragment en mode drainant, qui ne finira jamais (puisqu'il est en panne). Ensuite, j'ai essayé connecté à mon serveur de configuration et j'ai fait db.shards.remove({_id: 'shard0002'}) sur la base de données de configuration, puis redémarrez mongos pour recharger la configuration. Maintenant, chaque fois que j'essaie de faire quelque chose, je reçois "ne peut pas trouver de partition pour: shard0002".

Est-il possible de laisser savoir à Mongo que je ne me soucie pas de cette partition pour le moment, puis de la réactiver plus tard lorsqu'elle sera disponible.

+0

Vous dites que toutes les requêtes échouent? Est-ce que cela inclut des requêtes qui peuvent fonctionner avec un seul fragment encore vivant? – Thilo

Répondre

4

modifier manuellement l'entrée de tesson dans la db de configuration, puis removeshard

+0

UNHELPFUL. Besoin de détails ou un lien sur la façon de le faire. Quelle collection? où? comment le modifier? ???? –

+1

@ KevinJ.Rice, dans la config db, il y a une collection appelée shards. Vous voudrez supprimer l'entrée de partition à partir de là manuellement. – brismuth

4

J'ai eu un autre problème, et je l'ai enlevé manuellement le tesson avec:

use config 
db.shards.remove({"_id":"shard0002"});