2011-02-08 15 views
7

Se in Mongo è impostato un set di repliche con solo due nodi, un arbitro needs to be added per garantire che vi sia sempre una maggioranza in un voto per un nuovo master. L'arbitro non diventa mai il maestro in sé, è puramente lì per fornire il voto decisivo in un'elezione altrimenti collo-e-collo.È necessario includere un arbitro MongoDB nella configurazione della connessione client?

Quando si collega un client (nel mio caso Java) a un cluster MongoDB, che siamo tenuti a specify all the nodes of the cluster nella progettazione del collegamento:

List addrs = new ArrayList(); 
addrs.add(new ServerAddress("localhost" , 27017)); 
addrs.add(new ServerAddress("localhost" , 27018)); 

Mongo mongo = new Mongo(addrs); 

caso l'arbitro essere inclusi nella progettazione del collegamento? Direi non come:

non hanno una copia dei dati e non sarà mai il nodo primario (o anche un leggibile secondaria)

(Tratto da here)

... ma volevo solo ricontrollare!

risposta

6

No, non è necessario includere arbitri nella connessione.

Dopo tutto, come sospettavate, non ci sarebbe molto senso nel vostro codice cercando di connettersi a uno di quelli in quanto non ci sono dati lì. Fanno solo le loro cose dietro le scansioni per aiutare il failover automatico.

Non è nemmeno necessario specificare tutti i server nella configurazione della connessione (nemmeno il master): finché uno dei server citati restituisce una risposta, può trovare il master da lì. Anche se IMHO, più si chiama il migliore, solo in caso un numero di loro andare giù.

1

L'elenco è solo una lista di semi. I membri effettivi del set di repliche vengono determinati dopo essersi connessi a uno. Si potrebbe semplicemente specificare quello a 27017 (ma sarebbe male se quello fosse inattivo).

Problemi correlati