2013-04-30 12 views
21

Używam MongoDB replikę ustawiony na 3 węzły, pozwala ich adresy IP są 192.168.1.100, 192.168.1.101,192.168.1.102MongoDB Jak poznać podstawowy serwer ip bazy danych w zestawie replik?

teraz w obecnym zestawu replik 192.168.1.100 jest podstawowym i 192.168.1.101 i 192.168.1.102 są wtórne, moja aplikacja łączy się z 192.168.1.100 dla operacji zapisu .now po 2 dniach 192.168.1.100 jest wyłączony i mongodb wybrał 192.168.1.101 jako podstawowy. jak moja aplikacja wie, że 192.168.1.101 jest podstawowa.

to ich pływająca koncepcja ip w mongodb, więc nie trzeba wykonywać żadnej pracy ręcznej, gdy serwer główny jest przełączany w zestawie replik.

Odpowiedz

7

Gdy klient łączy się z dowolnym członkiem zestawu replik ("seed"), wysyła zapytanie do zestawu replik dla pozostałych członków zestawu. Więc jeśli połączysz się z .100, zapyta on zestaw i odkryje, że .101 i .102 są poprawnymi członkami zestawu.

Jeśli kierowca utraci połączenie z .100, przejdzie przez inne znalezione nasiona i spróbuje znaleźć połączenie. Gdy to zrobi, wyśle ​​zapytanie do zestawu replik, sprawdzi, kto jest aktualnym wzorcem, i połączy się z nim. Wszystko to dzieje się w sposób przejrzysty.

Można to sprawdzić logując się do pana i uruchamiając następujące:

rs.stepDown(60) 

To spowoduje, że maszyna do ustąpienia jako master (i spowodować nowy mistrz, który zostanie wybrany). Nie będzie się kwalifikować do ponownego wyboru na 60 sekund. Możesz użyć tego do przetestowania działania aplikacji w okolicznościach, w których węzeł podstawowy został zmieniony.

Podczas konfigurowania połączenia z zestawem replik zazwyczaj określasz wiele hostów, z którymi chcesz się połączyć. Wszystkie te elementy są źródłami, których sterownik może użyć do odwzorowania zestawu replik, dzięki czemu nie ma jednego punktu awarii w przypadku ponownego uruchomienia aplikacji, gdy skonfigurowany pojedynczy host nie działa. Specyfika tego będzie zależeć od tego, którego sterownika używasz - sprawdź dokumentację sterownika.

+0

Cześć wszystkim, jak przetestować to rzeczy za pomocą wiersza poleceń Mongo.Jak chcę przetestować to za pomocą wiersza poleceń mongo, czy istnieje sposób, w jaki mogę połączyć zestaw replik za pomocą wiersza poleceń mongo. – Rajnish

+0

Jeśli używasz wiersza poleceń, upewnij się, że łączysz się przy użyciu połączenia z zestawem replik, np. mongo "replSetName/member1: 27017, member2: 27017, member3: 27017". – slee

17

Najwyraźniej powinieneś być w stanie użyć swojego "sterownika" (narzędzia mongo cli lub preferowanego wiązania językowego, ex node-mongo), aby połączyć się z dowolnym członkiem zestawu replik. Po nawiązaniu połączenia, wystarczy poprosić obecny mongod służyć do innych członków zestawu:

> 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 
} 

Dla mojego użytku, jest to ważne, aby nie podłączać do pierwotnego. Podobnie jak OP, chcę zminimalizować liczbę połączeń wymaganych do znalezienia członka zastępczego. Ta metoda powinna zadziałać, ale dokumentacja tutaj może być trochę przestarzała.

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

3

Aby dowiedzieć się, jakie jest IP prądu pierwotnego serwera z linii poleceń uruchomić:

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

zależności od stosu danej aplikacji i kierowcy, może być konieczne, aby określić wszystkie hosty w replice na to, aby automatycznie wybrać główny dla zapisu.

1

rs.isMaster().primary

Jeśli do jednej wkładki, dostać się na którykolwiek z przypadków Mongo i uruchom że

Powiązane problemy