Comment vous connectez-vous à un jeu de réplication à partir d'un MongoDB shell?
Si je suis en train d'écrire une application qui se connecte à mongodb alors je peux fournir une liste graines pour un jeu de réplication, et le chauffeur me diriger vers le nœud maître, où je peux exécuter les commandes d'écriture.
Comment puis-je spécifier la valeur de départ de la liste pour une ligne de commande mongo
shell afin de conenct à un jeu de réplication.
- Veuillez envisager de marquer l'une des réponses comme acceptée.
- J'ai voté pour cette question, mais étant donné que l'auteur n'a pas reçu une réponse que j'ai pris mon vote loin.
Vous devez vous connecter pour publier un commentaire.
Pour se connecter à un jeu de réplicas Primaire utiliser le shell mongo
--host
option:Par exemple:
Remarque: à Partir des versions 3.4.2 3.4.10 il y avait un bug (SERVEUR-28072) qui a empêché la spécification de la db après lors de l'utilisation de --host ou --port.
mongo --host repl-set-name/localhost
— cela ne fonctionne pas, bien que, si l'repl membre du jeu sur localhost est hors ligne, et dans mon cas, c'est très bien. Localhost arrive à être secondaire, dans mon cas.Les réponses ci-dessus sont pour Mongo 3.2.
Selon Mongo 3.4 la documentation, la coque a été un peu changé:
En 3.2:
mongo --host host1,host2,host3/myRS myDB
ou,
mongo --host host1:27017,host2:27017,host3:27017/myRS myDB
En 3.4:
mongo "mongodb://host1,host2,host3/myDB?replicaSet=myRS"
ou,
mongo "mongodb://host1:27017,host2:27017,host3:27017/myDB?replicaSet=myRS"
Vous pouvez utiliser le "nom/seed1,seed2,..." format:
Cela devrait vous donner une connexion à n'importe quel nœud est actuellement primaire et la poignée de basculement d'accord. Vous pouvez spécifier une ou plusieurs graines, et il va trouver le repos.
Remarque que (à ma connaissance) le shell ne vous permettent pas d'itinéraire de lectures pour les secondaires avec un jeu de réplicas de connexion.
Tout ce que vous avez à faire est d'utiliser --hôte et de lui donner un de vos hôtes dans le jeu de réplication, mais avec le nom du jeu de réplication comme préfixe.
Par exemple:
va se connecter à my_mongo_server1, il peut juste être encore un autre noeud SECONDAIRE.
Mais:
sera toujours connecté au nœud PRINCIPAL dans le jeu de réplicas, même si ce n'est pas my_mongo_server1.
Pourquoi? La réponse est "jeu de réplicas moniteur".
Dans l'exemple ci-dessus, mongo shell de se connecter au nœud spécifié, commencer un nouveau jeu de réplicas moniteur pour le jeu de réplicas et utilisera le nœud spécifié juste pour la graine. À partir de là, le moniteur fera comprendre à tous les nœuds dans le jeu de réplicas et de basculer la connexion au nœud PRINCIPAL.
Espère que cela a aidé.
Au meilleur de ma connaissance, les mongo de la ligne de commande client n'acceptera pas graines de de vous envoyer vers le nœud maître, parce que vous voulez réellement à fonctionner sur le nœud secondaire plutôt que d'être transmis.
Cependant, une fois connecté à n'importe quel nœud dans la RS, vous pouvez découvrir la RS topologie via
rs.config()
oudb.isMaster()
. Vous pouvez ensuite utiliser cette information pour vous reconnecter sur le nœud principal. En fonction de votre coquille, vous pourriez être en mesure d'utilisermongo --eval "db.isMaster()['primary']"
pour se connecter automatiquement au maître.mongo --host `mongo --quiet --eval "db.isMaster()['primary']"`
Dans le shell, vous pouvez tout d'abord utiliser:
pour ouvrir un mongo session sans connexion à mongo replicaset
Puis, comme kristina dit, alors vous devriez être en mesure d'utiliser
pour se connecter à un jeu de réplication.
Ou à terme,
dans votre fichier js et
Vous pouvez utiliser le
--host
paramètre pour spécifier le replSet nom et de graines de liste, puismongo
se connecte automatiquement à l'actuel hôte principal.exemple:
mongo --host rs0/1.example.com:27017,2.example.com:27017,3.example.com:27017 [dbname]
Bâtiment sur la réponse de Chris Heald ces deux bash alias permettez-moi de vous connecter à la master avec une seule commande (où db1.test.test est un membre du jeu de réplicas, acme est le nom de base de données, mreppy est mon compte etc) Ce sera un échec bien sûr, si db1 est bas, mais c'est toujours à portée de main.
Le citant dans le eval alias est dur, j'ai utilisé Comment échapper des guillemets simples au sein d'une même cité, les chaînes? pour obtenir de l'aide 🙂
function replica_set_master_host { mongo --quiet -u user -p password --eval "db.isMaster()['primary']" }
Je suis à l'aide de la v3.4. Aussi nouvelle pour mongodb choses...
Bien que l'aide info de "l'homme mongo", suggère d'utiliser "--host replicaSet/host:port de l'hôte:port de l'url, il ne fonctionne pas pour moi.
Cependant, je peux me connecter à mon jeu de réplication selon document officiel, comme ci-dessous:
Donc je suppose que la page de man de mon mongo est obsolète (je l'utilise CentOS 7.3).