2011-12-14 14 views
37

Avendo qualche problema a capire il giusto approccio qui.Eccezione di AutoReconnect "master è cambiato"

Ho una connessione a un set di replica mongodb con tre membri (standard master-slave-slave). Tutto funziona perfettamente con la connessione quando il master rimane coerente.

pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test 

Per qualche ragione, quando il set di repliche fasi principali verso il basso, questo inizia a generare un'eccezione autoriconnessione che non va via, anche dopo una nuova primaria viene eletto.

Ora sono consapevole che questa eccezione deve essere catturata e gestita, molto probabilmente in attesa che venga eletto il nuovo primario. Il problema che sto avendo sembra essere che non gli interessa affatto una volta che il nuovo primario è stato scelto. Questa eccezione "master ha cambiato" continua a salire.

La stampa della connessione con __dict__ mostra tutti e tre gli host.

Ho provato a passare il kwarg replicaset alla connessione, ma questo si presenta come un argomento inaspettato.

C'è un motivo per cui questo tipo di connessione non inizia solo a interrogare il nuovo primario?

EDIT:

Questo stesso problema è a quanto pare ora manifestando sul server di distribuzione. L'eccezione di autoreconnessione viene generata se il master cambia del tutto e non scompare mai anche dopo l'elezione di un nuovo primario.

Pymongo è la versione 2.2 e la versione 2.0.2 di mongodb. Cambiare il modo in cui la connessione è definita nel codice pymongo (mongouri vs. elenco di host) non ha alcun effetto. L'unico modo per far rivivere il servizio è quello di rs.stepDown() gli altri host fino a quando il master originale è di nuovo primario.

+0

Quale versione di pymongo stai usando? C'era un bug in 1.9 o 1.10, non riesco a ricordare quale, dove potrebbe mostrare questo comportamento. È stato definitivamente risolto a partire da 1.11 e 2.0+ – dcrosta

+0

@dcrosta versione 1.11 – DeaconDesperado

+0

Quale versione di MongoDB? 2.0.x ha un problema in cui se si esegue il passaggio del primario non chiude le sue connessioni. Ciò causerà il problema con PyMongo. https://jira.mongodb.org/browse/SERVER-4405 –

risposta

2

Il comportamento che descrivi è un bug. La migliore linea di condotta possibile è assicurarsi che ci sia un bug registrato e collegarlo alla tua domanda. Poiché la domanda ha quasi un anno di vita, mi aspetto che il bug sia chiuso (controlla jira.mongodb.org/browse/SERVER-4405 per vedere se si applica).

Se si esegue l'aggiornamento a MongoDB 2.2 o versioni successive, il problema dovrebbe andare via.

Problemi correlati