2013-03-20 32 views
9

Mam małą grupę serwerów, które muszę utrzymywać w synchronizacji. Początkowo myślałem o tym, aby jeden serwer był "głównym" i publikować aktualizacje za pomocą funkcji pub/sub redis (ponieważ używamy już redis do przechowywania) i zezwalamy innym serwerom w klastrze, niewolnikom, ankietować za aktualizacje w długotrwałe zadanie. To wydawało się być prostą metodą, aby wszystko było zsynchronizowane, ale wtedy pomyślałem o oczywistym problemie: Co jeśli mój "mistrz" zejdzie? Tam właśnie zacząłem szukać technik, aby upewnić się, że zawsze istnieje mistrz, który doprowadził mnie do czytania o pomysłach takich jak wybory przywódców. Wreszcie, natknąłem się Apache Zookeeper (przez pytona wiązania „pettingzoo”), który podobno zajmuje dużo logiki tolerancji błędu dla ciebie. Być może uda mi się napisać własny kod wyboru lidera, ale sądzę, że nie byłby on tak dobry jak coś, co zostało sprawdzone i przetestowane, jak Zookeeper.Synchronizacja zookeepera z serwerem redis

Moim głównym problemem z użyciem Zookeeper jest to, że jest to tylko kolejny komponent, że może być dodanie do mojej konfiguracji niepotrzebnie kiedy mogę dostać się z czymś prostszym. Czy ktokolwiek kiedykolwiek używał redis w ten sposób? Czy istnieje jakaś inna prosta metoda, której mogę użyć, aby uzyskać typ funkcji, którą próbuję osiągnąć?

Więcej informacji o pettingzoo (slideshare)

Odpowiedz

13

Obawiam się, że nie ma prostej metody, aby osiągnąć wysoką dostępność. Zazwyczaj jest to trudne do skonfigurowania i trudne do przetestowania. Istnieje wiele sposobów osiągnięcia HA, które można podzielić na dwie kategorie: klastrowanie fizyczne i grupowanie logiczne.

Klastrowanie fizyczne polega na wykorzystaniu mechanizmów sprzętowych, sieciowych i poziomu systemu operacyjnego do uzyskania HA. W Linuksie możesz rzucić okiem na Pacemaker, które jest pełnoprawnym rozwiązaniem o otwartym kodzie źródłowym pochodzącym z wszystkich dystrybucji korporacyjnych. Jeśli chcesz bezpośrednio osadzić funkcje klastrowania w swojej aplikacji (w C), możesz sprawdzić Corosync cluster engine (używany również przez Pacemaker). Jeśli planujesz używać komercyjnego oprogramowania, Veritas Cluster Server jest dobrze znanym (ale drogim) wieloplatformowym rozwiązaniem HA.

Logiczne grupowanie jest o użyciu fantazyjnych rozproszonych algorytmów (np wyborach lidera, Paxos, etc ...), aby osiągnąć HA nie opierając się na konkretnych mechanizmów niskim poziomie. Oto, co zapewnia Zookeeper.

Zookeeper jest spójne, uporządkowane, hierarchiczna sklep zbudowany na protokole ZAB (bardzo podobny do Paxos). Jest dość solidny i może być użyty do implementacji niektórych narzędzi HA, ale nie jest to trywialne i trzeba zainstalować JVM we wszystkich węzłach. Dobrym przykładem może być przeglądanie biblioteki recipes i doskonałej biblioteki Curator z Netflix. Obecnie Zookeeper jest używany daleko poza czystymi kontekstami Hadoop, a także IMO, to najlepsze rozwiązanie do budowy infrastruktury logicznej HA.

Redis mechanizm pub/sub nie jest na tyle wiarygodne, aby wdrożyć logiczny klastra, ponieważ nieprzeczytane wiadomości zostaną utracone (nie ma kolejkowanie przedmiotów z pub/Sub). Aby uzyskać HA z kolekcji instancji Redis, możesz wypróbować Redis Sentinel, ale nie obejmuje ona własnego oprogramowania.

Jeśli jesteś gotowy do programowania w C, często pomijana jest struktura HA, która często jest zapominana (ale może być całkiem użyteczna), z wersją BerkeleyDB. Jest to dość proste, ale wspiera wybory lidera z półki i może być zintegrowane w każdym środowisku. Dokumentacja można znaleźć here i here. Uwaga: nie musisz przechowywać danych w BerkeleyDB, aby skorzystać z mechanizmu HA (tylko dane o topologii - te same, które umieścisz w Zookeeperze).