2015-08-02 12 views
5

ho creato il seguente set di repliche mongo utilizzando mongo cli:La replica di pymongo imposta il supporto della connessione client con failover automatico?

> config = { _id:"repset", members:[{_id:0,host:"192.168.0.1:27017"},{_id:1,host:"192.168.0.2:27017"},{_id:2,host:"192.168.0.3:27017"}]} 

> rs.initiate(config); 

Tutti i server Mongo funzionare correttamente.

>>> import pymongo 
>>> from pymongo import MongoClient 
>>> servers = ["192.168.0.1:27017", "192.168.0.2:27017", "192.168.0.3:27017"] 
>>> MongoClient(servers) 
>>> xc = MongoClient() 
>>> print xc 
MongoClient('localhost', 27017) 
>>> print xc.database_names() 
[u'test_repsets', u'local', u'admin', u'test'] 

Dopo aver ucciso il server MongoDB locali, mi mostra il collegamento errore di timeout:

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused 

Sembra non v'è alcuna auto fail over, anche se ho definito i server MongoDB. Mi chiedo se le maniglie di pymongo falliscono automaticamente o come questa situazione viene gestita correttamente?

Grazie in anticipo.

+1

Quale versione di pymongo stai usando? – ThrowsException

+3

pymongo == 3.0.3 Penso di aver sbagliato qui: xc = MongoClient() dovrebbe essere xc = MongoClient (server). Quindi funziona bene. –

risposta

0

in Pymongo 3.x è possibile indicare in modo esplicito il set di repliche a cui ci si sta connettendo. So che Pymongo 3.x ha cambiato alcuni dei modi in cui viene gestito un array di server. Ho ottenuto questo al largo della Pymongo API sulle connessioni per le repliche e auto failover

+0

Questo non è il motivo per cui l'OP ha ricevuto l'errore e non risponde alla domanda. Dovresti leggere il commento OP. – styvane

+0

La risposta è sì che pymongo supporta il failover automatico. Tuttavia sto suggerendo un modo alternativo per connettersi al suo set di repliche che potrebbe alleviare il problema. La matrice del server ha cambiato comportamento in Pymongo 3.x. Tuttavia OP ha trovato il suo problema a causa di un errore di codifica che è mancato. – ThrowsException

0

nel codice:

MongoClient (server) Sopra la linea non è assegnato a qualsiasi variabile. Dovrebbe assegnare (esempio nel suo caso si è creato ancora una volta che causa l'errore.) Alla variabile

Si prega di aggiungere seguente riga

>>> #MongoClient(servers)    # remove this line 
>>> #xc = MongoClient()    # remove this line 
>>> xc = MongoClient(servers)   # add this line 
Problemi correlati