2015-08-02 11 views
5

stworzyłem następujące zestawy replik Mongo Mongo za pomocą CLI:Czy replika pymongo ustawia automatyczną awarię obsługi połączenia klienta?

> 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); 

Wszystkie serwery Mongo działać prawidłowo.

>>> 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'] 

Po zabiję lokalnego serwera MongoDB, to pokazuje mi błąd połączenia timeout:

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

wydaje nie ma automatycznego przełączania awaryjnego, chociaż zdefiniowane serwery MongoDB. Zastanawiam się, czy uchwyty pymongo ulegają awarii automatycznie lub jak ta sytuacja jest obsługiwana poprawnie?

Z góry dziękuję.

+1

Jaka wersja pymongo używasz? – ThrowsException

+3

pymongo == 3.0.3 Myślę, że popełniłem błąd: xc = MongoClient() powinien być xc = MongoClient (serwery). Wtedy działa dobrze. –

Odpowiedz

0

w Pymongo 3.x możesz wyraźnie określić zestaw replik, z którym się łączysz. Wiem, że Pymongo 3.x włączył niektóre sposoby, którymi się zajmuje, dając szereg serwerów. Mam ten off Pymongo API o połączeniach do repliki i automatycznego przełączania awaryjnego

+0

To nie dlatego OP ma błąd i nie odpowiada na pytanie. Powinieneś przeczytać komentarz OP. – styvane

+0

Odpowiedź brzmi: tak, że pymongo obsługuje automatyczne przełączanie awaryjne. Jednak sugeruję alternatywny sposób łączenia się z jego zestawem replik, który może złagodzić problem. Tablica serwerów zmieniła zachowanie w Pymongo 3.x. Jednak OP znalazł swój problem z powodu błędu kodowania, który został pominięty. – ThrowsException

0

w kodzie:

MongoClient (serwerów) Powyższa linia nie jest przypisany do każdej zmiennej. Należy przypisać do zmiennej (w przypadku, gdy ponownie utworzony co powoduje wystąpienie błędu.)

proszę dodać następujące linii

>>> #MongoClient(servers)    # remove this line 
>>> #xc = MongoClient()    # remove this line 
>>> xc = MongoClient(servers)   # add this line 
Powiązane problemy