2013-04-30 9 views
21

Sono in esecuzione replica MongoDB disposta su 3 nodi, permette il loro IP di 192.168.1.100 sono, 192.168.1.101,192.168.1.102MongoDB Come conoscere l'IP del server di database primario in un set di repliche?

ora in replica corrente impostare 192.168.1.100 è primaria e 192.168.1.101 e 192.168.1.102 sono secondaria, la mia applicazione si connette con 192.168.1.100 per le operazioni di scrittura. Ora dopo 2 giorni 192.168.1.100 è giù e mongodb seleziona 192.168.1.101 come primario. come la mia applicazione sa che il 192.168.1.101 è primario.

è il loro è un qualsiasi concetto di IP floating in mongodb in modo che nessun lavoro manuale necessario quando il server primario è passato in un set di repliche.

risposta

7

Quando il client si connette a un determinato membro nel set di repliche ("seed"), interrogherà il set di repliche per gli altri membri nel set. Quindi, se ti connetti a .100, interrogherà il set e scoprirà che .01 e .102 sono membri validi del set.

Se il driver perde la connessione a 100, verrà eseguito attraverso gli altri semi che ha scoperto e tenterà di trovare una connessione. Una volta eseguito, interrogherà il set di repliche, scoprirà chi è il master corrente e si collegherà ad esso. Questo succede tutto in modo trasparente.

È possibile verificare questo accedendo al master e eseguendo il seguente:

rs.stepDown(60) 

Questo farà sì che la macchina a dimettersi come master (e causare un nuovo padrone per essere eletti). Non potrà essere rieletto per 60 secondi. Puoi utilizzare questo per testare il comportamento della tua app in circostanze in cui il nodo primario è cambiato.

Quando si imposta una connessione del set di repliche, generalmente si specificano più host a cui connettersi. Questi servono da semi per il driver da utilizzare per mappare il set di repliche, in modo da non avere un singolo punto di errore nel caso in cui si riavvii l'applicazione mentre il singolo host configurato è inattivo. Le specifiche di questo dipenderanno dal driver che stai usando, però - controlla la documentazione del tuo driver.

+0

Ciao a tutti, Come testare queste cose utilizzando riga di comando mongo.Come voglio testare questo usando la linea di comando mongo, c'è un modo attraverso il quale posso collegare il set di repliche usando la linea di comando di mongo. – Rajnish

+0

Se si utilizza la riga di comando, assicurarsi di connettersi utilizzando una connessione di set di repliche, ad es. mongo "replSetName/member1: 27017, member2: 27017, member3: 27017". – slee

17

Apparentemente, dovresti essere in grado di utilizzare il tuo "driver" (il tool mongo cli o il tuo binding lingua preferito, ex node-mongo) per connettersi a QUALSIASI membro di un set di repliche. Una volta connesso, basta chiedere il mongod corrente servire per gli altri membri del set:

> db.runCommand("ismaster") 
{ 
    "ismaster" : false, 
    "secondary" : true, 
    "hosts" : [ 
      "ny1.acme.com", 
      "ny2.acme.com", 
      "sf1.acme.com" 
    ], 
    "passives" : [ 
      "ny3.acme.com", 
      "sf3.acme.com" 
    ], 
    "arbiters" : [ 
     "sf2.acme.com", 
    ] 
    "primary" : "ny2.acme.com", 
    "ok" : true 
} 

per il mio uso, è importante non per la connessione al primario. Come l'OP, voglio ridurre al minimo il numero di connessioni richieste per trovare un membro secondario. Questo metodo dovrebbe funzionare per te, ma la documentazione qui potrebbe essere un po 'datata.

http://docs.mongodb.org/meta-driver/latest/legacy/connect-driver-to-replica-set/

3

di capire quale è IP del server primario corrente dalla linea di comando di marcia:

rs.status().members.find(r=>r.state===1).name 

A seconda dello stack e il driver dell'applicazione, potrebbe essere necessario specificare tutti gli host nella replica per per selezionare automaticamente il primario per le scritture.

1

rs.isMaster().primary

Se siete in uno liners, ottenere su qualsiasi delle istanze mongo ed eseguire che

Problemi correlati