2017-01-27 8 views
0

Ein bisschen Hintergrund: Ich habe Bitnami verwendet, um einen 3-Knoten-Mongo-Cluster auf Azure (1 Arbiter) zu spinnen, wobei jeder Mongod auf separaten VMs gehostet wird. Ich habe bestätigt, dass der Replikatsatz vorhanden ist und dass jeder Knoten eine Verbindung herstellen kann. Ich habe bestätigt, dass, wenn ich meinen primären Knoten herunterziehe, der sekundäre Knoten hochsteigt. Wenn der primäre Knoten zurückkehrt, nimmt er die primäre Position wieder an.PyMongo MongoClient-Replikat-Set wird nicht verbunden

Mein Problem ist, dass ich bei der Angabe von Replicaset keine Verbindung zu meinem MongoDB-Replikat mit MongoClient herstellen kann. Ich würde diesen Fehler:

pymongo.errors.ServerSelectionTimeoutError: ArbiterIP:27017: [WinError 10061] No connection could be made because the target machine actively refused it,PrimaryIP:27017: [WinError 10061] No connection could be made because the target machine actively refused it,SecondaryIP:27017: timed out

Mit MongoClient, wenn ich tun:

connection = MongoClient('MyIP1:27017', w=2)

, es verbindet in Ordnung. Wenn ich mache

connection = MongoClient('MyIP1:27017', w=2, replicaset="repsetname") 

, das ist, wenn ich den Fehler bekomme.

Würde es damit zusammenhängen, dass der Arbiter-Knoten keine Benutzerinformationen zur Authentifizierung hat?

Antwort

0

Eine Stichprobe: Wenn Sie sich mit der Shell verbinden und db.isMaster() ausführen, sind die Hostnamen, die Sie in der Konfiguration sehen, dieselben wie die Hostnamen wie "MyIP", die Sie an PyMongo übergeben?

Es klingt wie, wenn Sie "replicaset =" übergeben, nimmt PyMongo die Hostnamen aus der Antwort isMaster und verbindet sich mit denen anstelle von MyIP, aber die Art, wie Ihr Replikat gesetzt ist, ist dieser Satz von Hostnamen nicht verfügbar.

Für weitere Informationen darüber, warum PyMongo wirkt auf diese Weise:

https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#clients-use-the-hostnames-listed-in-the-replica-set-config-not-the-seed-list

+0

In der Fehlermeldung, die aufgeführten IP-Adressen sind die Host-IP-Adressen in db.isMaster gezeigt(). In meinem Python-Code ist mein "MyIP" die IP der VM, die den primären Knoten hostet. Wenn ich versuche, die Host-IP für die Verbindung zu verwenden, habe ich eine Zeitüberschreitung. –