web-dev-qa-db-fra.com

mongodb n'a pas pu trouver la préférence de lecture correspondant à l'hôte {mode: \ "primary \"} pour l'ensemble?

Je déploie un partage monodb, j'ai déployé un jeu de répliques sur trois machines:

dev41:27017,dev42:27017,dev193:27017

et configsvr sur trois machines:

dev41:27019,dev42:27019,dev193:27019

et aussi un mongos en machine:

dev41:28000

enfin j'essaye d'ajouter ma réplique dans des mongos:

mongo dev41:28000/admin
sh.addShard('rs0/dev41,dev42,dev193')

alors j'ai eu des erreurs:

{
    "ok" : 0,
    "errmsg" : "could not find Host matching read preference { mode: \"primary\" } for set rs0",
    "code" : 133
}
4
roger

J'ai fait face au même problème, puis j'ai regardé dans le fichier journal Mongos et il disait

impossible de s'authentifier auprès du nom d'hôte en tant qu'utilisateur interne, erreur: l'authentification a échoué.

Veuillez voir ici: l'authentification interne de l'utilisateur et se produit avec le fichier SecKey et l'authentification activée.

Résolution

J'ai ouvert mongod.conf fichier et

security: authorization: enabled    
keyFile: /var/run/mongodb/secKey.key

manquait alors j'ai ajouté cela et redémarrer le mongod. Ensuite, j'ai à nouveau créé un fragment à partir de Mongos et cela fonctionne maintenant.

2
Pravin Dwiwedi

J'ai eu ce même problème et j'ai découvert que j'avais simplement le nom de la réplique incorrect dans la commande addShard.

1

Cela ajoute à la réponse de @ Miroslav, sauf que le nom d'hôte trouvé dans/etc/hostname devait correspondre au nom d'hôte trouvé dans/etc/hosts (n'oubliez pas de redémarrer une fois modifié).

J'utilisais un fichier/etc/hosts commun pour tous mes serveurs mais je ne mettais pas à jour le fichier/etc/hostname pour qu'il corresponde.

Bonne chance

1
JerradPatch

J'ai eu le même problème, mais mon problème était qu'avant d'appeler sh.addShard() je devais me connecter au nouveau serveur de partition (pas mongos) et appeler la commande suivante:

rs.initiate({ _id : "REPLICA_SET_NAME", members: [ { _id : 0, Host : "HOSTNAME:27017" } ] })

Après cela, j'ai pu appeler sh.addShard() sans problème.

Notez que cela fonctionne sans security: authorization: enabled Dans mon mongo.conf

À votre santé,

1
mils

J'ai eu le même symptôme, cependant, mon problème était que les fichiers clés n'étaient pas cohérents entre les nœuds mongodb et config.

1
Kimberly StJacques

J'avais un même problème. Le problème dans ma configuration était que les hôtes sur lesquels je configurais les serveurs de configuration à exécuter n'avaient pas dans/etc/hosts chaque membre de partition que je supposais ajouter en tant que nouvelle partition. Problème résolu lorsque j'ajoutais des membres de partition manquants dans/etc/hosts.

1
Miroslav

Cette erreur se produira également si l'hôte de partition spécifié dans la commande addShard () n'est pas accessible. Quittez les mongos et essayez de le telnet par exemple.

telnet dev42 27017 

Si telnet n'a pas fonctionné, cela doit être corrigé en premier.

0
user2654744
  1. Vous devez être sûr que le nom de votre Replicaset est correct.
  2. Assurez-vous d'ajouter au moins l'IP ou le nom d'hôte du maître dans le jeu de réplicas.
  3. Assurez-vous d'ajouter le port correct du nœud maître dans le jeu de réplicas.
  4. Vérifiez que vous utilisez le bon fichier de clés défini dans les mongos et les rs.

Après cela, il vous suffit d'utiliser:

sh.addShard("your_rs_name/rs_master_ip_or_hostname:port")

et c'est tout, les mongos prendront tous les membres dans les rs que vous venez d'ajouter. Bonne chance

0
Carlos

J'ai eu ce qui me semble être le même problème.

Dans mon cas, le problème était que 2 de mes serveurs de fragments étaient tombés en panne. Je les ai simplement redémarrés et il a fallu un certain temps pour que les commandes se propagent (j'ai fait une suppression et certains documents apparaissaient toujours dans une collection), mais après une minute environ, tout était correct.

0
esca2791

Vérifiez si le service mongodb s'exécute sur le nœud Arbiter, cela a résolu mon problème

0
Omkar