Skript ausführen, gegen Replikatgruppe in MongoDB
Ich habe Replik-set mit 3 Knoten und ich möchten, führen Sie eine Bereinigung Skript gegen Sie jedes Ende des Tages. Was ich tun würde, wenn es nur um einzelne Knoten wäre ein einfaches bash-Skript:
~/mongo/bin/mongo host:port cleanupScript.js
Aber da ich das gleiche Skript, gegen die replica-set-ich kann nicht mit diesem Ansatz. Ich müsste irgendwie herausfinden, welche Knoten primären und führen Sie das Skript an, dass die Knoten.
Also die Frage: gibt es eine Möglichkeit, wie Sie das Skript ausführen, gegen die gesamte Replikatgruppe und lassen Sie die mongo
Prozess wählen Sie den primären Knoten und führen Sie es auf?
Dank!
- Ich kenne keine Möglichkeit, dies zu tun, aber das ist ein großartiges feature Vorschlag 10gen für die mongo-javascript-shell. Der Java-Treiber, mindestens, können Sie den hosts in der replset als eine Sammlung: api.mongodb.org/java/2.9.0/com/mongodb/Mongo.html Mongo(java.util.Liste Samen, com.mongodb.MongoOptions Optionen) . Für diese Funktion allein, ich habe bis auf die javascript-shell für meine Wartung Aufgaben-und script-alles über Groovy mit Java-Treiber.
- die shell unterstützt dies bereits, mindestens so weit zurück wie der 2.0 Zweig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die mongo-shell kann direkt zu einer Replikatgruppe - das funktioniert mit 2.4 (aktuell), 2.2 (zurück) und 2.0 (die Vorgängerversion).
Vorausgesetzt, Sie haben eine Replikatgruppe genannt
myrs
und Ihre Gastgeber sindhost1:27017
undhost2:27017
verwenden Sie die folgende syntax:mongo --host myrs/host1:27017,host2:27017
Den Panzer herauszufinden, den rest, einschließlich der Verbindung zu den primär-und wenn die primären Schritte nach unten, oder geht Weg, es wird eine Verbindung zum neuen primären sobald es gewählt ist.
mongo -host myReplicaset/myServer1 myDb --eval "db.myCollection.remove( {<myQuery>} )"
Leider, die 'mongo' shell unterstützt keine verbindungen zu einer Replikatgruppe: nur auf die einzelnen Knoten. Sie haben zwei Möglichkeiten, wenn Sie dies tun möchten:
Ich wünschte, ich hätte eine bessere Antwort für Sie.
Ich normalerweise legen Sie die Priorität für einen Knoten im replicaset. Dies gibt mir die Freiheit zu wählen, welchen Knoten bekommen sollte, Lesen und schreiben laden.
In deinem Fall, denke ich, dass, wenn Sie legen Sie die Priorität für die Knoten, dann kann man immer führen Sie Ihr Skript vor die höchste Priorität-Knoten so, dass Knoten werden primär fast die ganze Zeit.
Einstellung Priorität ist ganz einfach und straight forward. Sie können dies überprüfen, link http://docs.mongodb.org/manual/tutorial/force-member-to-be-primary/
Ich hoffe, dies wird Ihr problem lösen.
OKAY.... Wahrscheinlich ist dies, was Sie brauchen..
Führen Sie diese auf jedem Knoten, und es wird Ihnen die "server:port" an der Grundschule. Geben Sie vollständige Pfad zu der mongo ausführbare.. nur um Fehler zu vermeiden.
PS: der ganze Befehl in backticks. Irgendwie sind diese nicht sichtbar, so dachte, es Ihnen zu sagen.