Verbindung mit Mongo im Replikat-Modus

8

Ich habe eine eigenständige Mongo-Instanz, auf der eine Replikatgruppe ausgeführt wird. Ich kann jedoch keine Verbindung herstellen und keine Abfragen in der Mongo-Shell ausführen. Ich bekomme Folgendes:

error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

Ich setze SlaveOk so:

db.getMongo().setSlaveOk()

.. aber ich bekomme immer noch einen Fehler:

%Vor%

Ich kann keine direkte Antwort auf Google finden: Wie stelle ich eine Verbindung zu meinem Replikat mit der Mongo-Shell her?

    
James 11.03.2013, 18:09
quelle

7 Antworten

8

Wenn Sie eine Verbindung zu einem Knoten in einem Replikatsatz herstellen, der nicht der Master ist, müssen Sie dem Client explizit mitteilen, dass es in Ordnung ist, dass Sie nicht mit einem Master verbunden sind.

Sie können dies tun, indem Sie

aufrufen
  

rs.slaveOk ()

Sie können dann Ihre Abfrage durchführen.

Beachten Sie, dass Sie nur dann Abfragen durchführen und keine Änderungen am Repository vornehmen können, wenn Sie mit einem Slave-Knoten verbunden sind.

    
grillp 05.08.2013 05:04
quelle
8

Ich habe das gleiche Problem und löste es mit

%Vor%     
Andres 27.12.2013 18:42
quelle
6

Sie sind mit einem Knoten verbunden, der weder sekundär noch primär ist. Dieser Knoten könnte im Wiederherstellungsmodus ein Arbiter oder möglicherweise ein sekundärer Knoten sein. Wenn ich zum Beispiel einen Replikatsatz von 3 Knoten hätte (wo es einen primären, einen sekundären und einen Arbiter gibt), würde ich denselben Fehler erhalten, wenn ich mit dem Arbiter verbunden wäre und eine Abfrage ausgegeben hätte, selbst nachdem ich slaveOK auf true gesetzt habe . Die Befehlszeilenaufforderung der Shell sollte angeben, in welchem ​​Status sich der Knoten befindet, mit dem Sie verbunden sind:

%Vor%     
Bryan Reinero 11.03.2013 18:52
quelle
0

haben Sie versucht: db.getMongo (). setSlaveOk (true)

    
Martin Klosi 31.07.2013 23:01
quelle
0

Ich habe auch den Fehler bekommen. Aber als ich versuchte, eine Verbindung zum sekundären Knoten unter Verwendung des Computernamens anstelle von 'localhost' oder 127.0.0.1 herzustellen, ging der Fehler verloren.

    
rajkamal 15.08.2013 06:35
quelle
0

Dieser Fehler wird nur angezeigt, wenn Sie eine Instanz ausführen, die Teil eines Replikats im eigenständigen Modus ist, ohne es vollständig aus dem Replikatsatz zu entfernen. z.B. Sie starten Ihre Instanz an einem anderen Port neu, entfernen aber nicht die Option --repSet beim Starten. Dies beginnt aber weder als primäres noch als sekundäres, daher der Fehler nicht Master oder sekundär;

Je nachdem, was Sie ursprünglich tun wollten, starten Sie die Instanz entweder am richtigen Port und mit der richtigen Option --repSet neu. Dies fügt es dem Replikatset hinzu und beseitigt diesen Fehler

Wenn Sie beabsichtigen, die Instanz für einige Zeit als Standalone auszuführen (zB um einen Index zu erstellen), dann starten Sie sie an einem anderen Port OHNE die Option --repSet

    
kakoma 30.10.2015 00:05
quelle
0

Ich habe den gleichen Fehler beim Ausführen von aggregate () auf dem Staging-Server mit zwei Replikat-Sätzen erhalten. Ich denke, dass Sie die Lese-Präferenz zu 'secondaryPreferred' ändern müssen.

Schreiben Sie einfach .read ('secondaryPreferred') nach der Abfragefunktion.

    
Rony Cherian 04.02.2016 10:28
quelle

Tags und Links