2012-11-13 12 views
6

Mam jeden podstawowy i dwa wtórne na aws przy użyciu ELB. Jaka jest najlepsza praktyka czytania i pisania?MongoDB Replikuj zestawy i ELB

1) Czy utworzyć pojedynczy LB ze wszystkimi węzłami w ELB z podstawowymi i wtórnymi i pozwolić pythonowi (pymongo) radzić sobie z sortowaniem do odczytu i zapisu?

2) Czy można umieścić wszystkie części wtórne pod ELB i przypisać pierwotne do elastycznego adresu IP? Będzie to wymagać skryptu do śledzenia typu węzła i ponownego przypisania go, jeśli wystąpi awaria.

Mam nadzieję na wariant 1.

Dzięki

+1

Dlaczego w ogóle korzystasz z systemu równoważenia obciążenia - zazwyczaj podajesz klientowi listę wszystkich członków zestawu, a dowiesz się, jaki jest status każdego z członków, a następnie bezpośrednio zapyta: –

+0

Witaj Frederick, dziękuję, twój zwięzły komentarz powyżej naprawdę oświetlił to dla mnie - proszę szybko sprawdzić moją odpowiedź poniżej, aby upewnić się, że jest poprawna. – danday74

+0

@FrederickCheung Co powiesz na przypadek, w którym masz instancje mongo w sieci prywatnej i musisz odsłonić mongo bez udostępniania instancji z Internetu? – Jonathan

Odpowiedz

5

To zależy od sytuacji. W przypadku sterowników mongodb nie trzeba śledzić, z którym węzłem łączy się klient - wystarczy tylko poinformować go o zestawie replik i automatycznie połączyć się z przełączaniem awaryjnym podstawowym i awaryjnym.

Jeśli chcesz dystrybuować ładowanie odczytane, możesz ustawić preferencję odczytu, aby umożliwić aplikacji odczyt z części wtórnych, ale zawsze będziesz w stanie pisać do głównej. Oznacza to, że ustawienie ELB dla wszystkich połączeń przychodzących jest niepotrzebne, a nawet może cię skrzywdzić, ponieważ może spowodować wysłanie zapisów do drugorzędnych (gdzie zawiodą). Korzystanie z preferencji czytania pozwala na rozpowszechnianie odczytów, więc w twoim przypadku nie polecałbym używania ELB.

Ogólnie rzecz biorąc, chciałbym rzucić okiem na http://www.slideshare.net/jrosoff/mongodb-on-ec2-and-ebs. Może się to okazać pomocne.

+1

Więc ... jeśli mam trzy węzły w zestawie rep ... i łączę się z mongo ... jaki adres IP podam? Zakładając, że każdy może być nieczynny. Czy powinienem dołączyć elastyczny adres IP do bieżącego podstawowego i zawsze monitorować kto w podstawowym? – Tampa

1

Jestem w tej samej łodzi, ale używam 3 instancji mongo w jednej replicaset, 2 default i 1 arbiter. Konfigurowanie ElasticIP jest złym pomysłem b/c, co oznacza, że ​​twój serwer mongo będzie miał publiczne połączenie, którego nie chcesz.

Zakończyłem tworzenie ELB, który nasłuchuje na 27017 i przekazuje do obu domyślnych członków replicaset, ale nie do faktycznego równoważenia obciążenia, raczej do odporności na uszkodzenia. Jeśli więc test 27017 nie powiedzie się, tryb gotowości może obsłużyć kolejne żądania. Dodatkowo z ELB możesz utworzyć rekord CNAME DNS i wskazać aplikację, aby z niego korzystać, w moim przypadku używam "docstore". W ten sposób nie musisz określać rzeczywistych instancji mongo, takich jak docstore-1 i docstore-2, itp.

+0

Proszę wyjaśnić, mam 3 instancje mongo w prywatnej podsieci i muszę je udostępnić i najlepiej by było, gdyby zrobiono to za pomocą jednego cname/ip, czy to możliwe? – Jonathan

0

Myślę, że odpowiedź brzmi: nie korzystasz z systemu równoważenia obciążenia. Twój klient podaje szczegóły wszystkich członków zestawu replik (podstawowego i dodatkowego) i łączy się z bieżącą podstawową, w zależności od tego, która z nich jest.

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

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

Tutaj używamy klienta wiersza polecenia, aby połączyć się z zestawu replik (nie indywidualny węzeł), ale może to być nodeJS, MongoChef (wsparcie zestawów replik) lub każdym klientem łączysz się z.