2013-05-13 10 views
5

Ich versuche, eine Verbindung zu einem Remote-Mongodb herzustellen. Ich habe meine Anwendung mit dem lokalen mongodb entwickelt. Jetzt habe ich die Anwendung auf dem Dev bereitgestellt und den dev mongodb konfiguriert. Ich bekomme die folgende Ausnahme. mongodb Java-Treiber - com.mongodb.MongoException: kann keinen Master finden

Caused by: com.mongodb.MongoException: can't find a master 
    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:509) 
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:266) 
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:289) 
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:274) 
    at com.mongodb.DBCursor._check(DBCursor.java:368) 
    at com.mongodb.DBCursor._hasNext(DBCursor.java:459) 
    at com.mongodb.DBCursor.hasNext(DBCursor.java:484) 

Das Komische ist, dass ich an die Entwickler mongodb mit den Replikatssatz Serveradressen von meinem lokalen Anwendung anschließen kann, aber wenn ich versuche, um die Anwendung zu haben (deplyed in die dev) eine Verbindung zu dem Entwickler mongodb, Ich sehe den Fehler oben.

Ich frage mich, ob es jemanden gibt, der das gleiche Problem konfrontiert und es gelöst hat.

+0

Übergeben Sie im mongoURI den richtigen primären Host des Replikatclusters? –

+0

ja. es ist. Vielleicht hängt es mit dem Verbindungsproblem und nicht mit dem Konfigurationsproblem zusammen. Der Fehler msg sieht irreführend aus. – user826323

+0

Verbindungsproblem, können Sie leicht überprüfen, indem Sie eine Verbindung zu Remote-MongoDB mit Mongo-Shell, von dem Host, auf dem die Anwendung ausgeführt wird. –

Antwort

1

Dieser verwirrende Aspekt des Mongodb kollidiert mit den Prinzipien der Politikwissenschaft in seiner voting policy.

Hier ist, wie es passiert.

  • Ein Replikatsatz existiert; es muss eine ungerade Anzahl von Voting-Knoten haben.
  • Der primäre Knoten schlägt fehl, weil der Server/das Netzwerk ausfällt oder heruntergefahren wird. Andere Knoten können auch fehlschlagen, aber am wichtigsten ...
  • Eine gerade Anzahl von Knoten bleibt ohne Primär.
  • Die verbleibende gerade Anzahl von Knoten kann sich nicht auf einer Primärseite niederlassen und befindet sich in einem politischen Stillstand (aka hung parliament ohne Mehrheit).
    • Eine Wiederwahl erfolgt, aber die primäre ist immer noch nicht aktiv; es ist eine weitere Sackgasse. Schleife hier.

Eine Lösung ist die Wahl durch die Zuweisung Gewicht zu Stimmen, so dass Kandidaten nicht mehr gleich schwanken. In der Mongo-Welt geschieht dies, indem man Mitgliedern priority zuweist.

Prioritätsvergleiche Die Prioritätseinstellung wirkt sich auf Wahlen aus. Mitglieder bevorzugen es, für Mitglieder mit dem höchsten Prioritätswert zu stimmen.

Man tut dies, indem die Schale mongo Eingabe (auf admin) und Aktualisieren des rs.conf

cfg = rs.conf() 
cfg.members[0].priority = 100 
cfg.members[1].priority = 99 
cfg.members[3].priority = 98 
rs.reconfig(cfg) 

Bei dieser Konfiguration wird, wenn primäre Mitglied 0 versagt, dann Element 1 wird als primäre abgestimmt werden.

Hier sind einige gute Verbindungen:

http://docs.mongodb.org/manual/core/replica-set-elections/

http://docs.mongodb.org/manual/core/replica-set-architecture-four-members/

Schließlich Diese Situation auf einer Cloud-Architektur mit Techniken wie Verfügbarkeit Sets sehr häufig, dass sie die Skalierung nach oben und unten - durch Zeit, CPU, Last oder andere Metriken - und sollte wirklich durch eine zufällige oder unfaire diskriminierende Richtlinie für alle Standard-Replikatsätze behandelt werden. Auch ohne Techniken wird ein primärer Standard-Replikatsatz irgendwann zu einem Deadlock, wodurch er nicht mehr verfügbar ist. Ein bedeutender Misserfolg meiner Meinung nach.

Verwandte Themen