2013-03-11 7 views
7

Ho un'istanza Mongo autonoma che esegue un set di repliche. Tuttavia, non riesco a connettermi ed eseguire query nella shell di Mongo. Ottengo il seguente:Connessione a Mongo in modalità set di replica

error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

ho impostato SlaveOk in questo modo:

db.getMongo().setSlaveOk()

..ma ancora ottengo un errore:

error: { 
"$err" : "not master or secondary; cannot currently read from this replSet member", 
"code" : 13436 
} 

Non riesco per trovare una risposta diretta su Google: come posso collegarmi al mio set di repliche usando la shell mongo?

+1

Si dice di avere Mongo "standalone" e di eseguire un set di repliche. Quelli sono identificatori in conflitto. O è autonomo o è un set di repliche. Se si tratta di un set di repliche, devi fornire la sua configurazione (rs.conf()) e lo stato (rs.status()). –

risposta

6

Si è connessi a un nodo che non si trova nello stato secondario o primario. Questo nodo potrebbe essere un arbitro o possibilmente un secondario in modalità di ripristino. Ad esempio, se avessi un set di repliche di 3 nodi, (dove c'è un primario, un secondario e un arbitro) otterrei lo stesso errore se mi fossi connesso all'arbitro e avessi emesso una query anche dopo aver impostato lo slaveOK vero . riga di comando della shell dovrebbe indicare in quale stato il nodo si è connessi è in:

foo:ARBITER> db.test.find() 
error: { 
    "$err" : "not master or secondary; cannot currently read from this replSet member", 
    "code" : 13436 
} 
0

Hai provato:. db.getMongo() setSlaveOk (true)

8

Se si connette a un nodo un set di repliche che non è il padrone, è necessario dire esplicitamente il cliente che è ok che il tuo non sono collegati ad un master ..

si può fare questo chiamando

rs.slaveOk()

È quindi possibile eseguire la query.

Si noti che sarà possibile eseguire query, non apportare modifiche al repository, se connesso a un nodo slave.

+0

Cosa succede se ci si sta connettendo al database principale nel set di repliche?!?! –

+0

@omouse Se ci si connette al DB primario in un set di repliche, non si otterrà il messaggio di errore e sarà possibile leggere o scrivere. – grillp

+0

il mio problema è stato che era in "ripristino" invece di essere "primario" –

0

Ho anche ricevuto l'errore. Ma quando ho provato a connettermi al nodo secondario usando il nome della macchina invece di "localhost" o 127.0.0.1 l'errore è andato via.

7

ho avuto lo stesso problema e risolto utilizzando

rs.initiate() 
+0

Questa è quasi certamente la cosa sbagliata da fare. O stai già lavorando con un set di repliche (nel qual caso non fa nulla) o non lo sei, ma non vuoi esserlo, nel qual caso ti sei procurato dei problemi perché tornare indietro è difficile. –

0

Questo errore viene visualizzato solo quando si esegue un'istanza che fa parte di un set di repliche in modalità standalone senza rimuoverlo completamente dal set di repliche. ad es. Riavvia l'istanza su una porta diversa ma non rimuovi l'opzione --repSet all'avvio. Questo lo avvia ma né come primario né come secondario, quindi l'errore non master o secondario;

In base a ciò che si intendeva fare inizialmente, riavviare l'istanza sulla porta corretta e con l'opzione --repSet corretta. Questo lo aggiunge al set di repliche e si sbarazza di questo errore

Se si intendeva eseguire l'istanza come indipendente per un po 'di tempo (ad esempio per creare un indice), avviarlo su una porta diversa SENZA l'opzione --repSet

0

Ho ricevuto lo stesso errore durante l'esecuzione di aggregate() sul server di staging con due serie di repliche.Penso che sia necessario modificare la preferenza di lettura su "secondaryPreferred".

Basta mettere .read ('secondaryPreferred') dopo la funzione di query.

Problemi correlati