2012-11-13 12 views
6

Ho un primario e due secondari su aws utilizzando ELB. Qual è la migliore pratica per leggere e scrivere?MongoDB Replicate set ed ELB

1) Creo un singolo LB con tutti i nodi nell'ELB con primari e secondari e lascia che il python (pymongo) gestisca l'ordinamento per leggere e scrivere?

2) Oppure posizionare tutti i secondari in ELB e assegnare un primario a un IP elastico? Ciò richiederà uno script per tenere traccia del tipo di nodo e riassegnare in caso di failover.

spero per l'opzione 1.

Grazie

+1

Perché dovresti usare un servizio di bilanciamento del carico - tipicamente dai a un cliente l'elenco di tutti i membri del set e scoprirà qual è lo stato di ciascun membro e le richieste dirette di conseguenza –

+0

Ciao Frederick, grazie, il tuo un commento succinto di cui sopra ha fatto davvero luce su questo per me - per favore potresti controllare rapidamente la mia risposta qui sotto per assicurarmi che sia corretta. – danday74

+0

@FrederickCheung Che dire di un caso in cui si hanno le istanze di mongo in una rete privata e occorre esporre mongo senza rendere le istanze accessibili da Internet? – Jonathan

risposta

5

Dipende dalla vostra situazione. Con i driver mongodb, non è necessario tenere traccia del nodo a cui si connette il client: è sufficiente informarlo del set di repliche e si collegherà automaticamente al primario e gestirà il failover.

Se si desidera distribuire il carico di lettura, è possibile impostare la preferenza di lettura per consentire a un'applicazione di leggere da secondari, ma sarà sempre possibile solo scrivere sul primario. Ciò significa che l'impostazione di ELB per tutte le connessioni in entrata non è necessaria e potrebbe anche farti del male perché potrebbe causare l'invio di scritture ai secondari (dove falliranno). L'uso delle preferenze di lettura ti consentirà di distribuire le letture, quindi nel tuo caso, consiglierei di non utilizzare l'ELB.

In generale, vorrei dare un'occhiata a http://www.slideshare.net/jrosoff/mongodb-on-ec2-and-ebs. Potresti trovarlo utile.

+1

Quindi ... se ho tre nodi in un ripetitore .... e mi connetto con mongo ... quale indirizzo IP do? Supponendo che qualcuno possa essere giù. Dovrei collegare un IP elastip al primario corrente e monitorare sempre chi in primario? – Tampa

1

Sono nella stessa barca, ma eseguo 3 istanze di mongo in un singolo replicaset, 2 di default e 1 arbitro. Configurare un ElasticIP è una cattiva idea b/c che significa che il tuo server mongo avrà una connessione pubblica che è ciò che non vuoi.

Ho terminato la creazione di un ELB che ascolta 27017 e inoltra a entrambi i membri predefiniti del replicaset, ma non per il bilanciamento del carico effettivo, piuttosto per la tolleranza di errore. Quindi, se il controllo dello stato del 27017 non riesce, lo standby può gestire le richieste successive. Inoltre con ELB puoi creare un record CNAME DNS e indirizzare la tua app per usarlo, nel mio caso uso 'docstore'. In questo modo non è necessario specificare istanze di mongo effettive come docstore-1 e docstore-2, ecc.

+0

La prego di spiegarmelo, ho 3 istanze di mongo in una sottorete privata e ho bisogno di renderle disponibili e preferirei farlo con un singolo cname ip/elb, è possibile? – Jonathan

0

Penso che la risposta sia, non si utilizza un bilanciamento del carico. Il client fornisce i dettagli di tutti i membri del set di repliche (primario e secondario) e si connette al primario corrente, quale che sia.

Vedi How do you connect to a replicaset from a MongoDB shell?

mongo --host replicaSetName/host1[:porthost1],host2[:porthost1],host3[:porthost3] databaseToConnect 

Qui, stiamo usando il client a riga di comando per connettersi al set di repliche (non un singolo nodo), ma potrebbe essere nodeJS, MongoChef (supporto set di repliche) o qualunque cliente ti stai connettendo.

Problemi correlati