MySQL z InnoDB zapewnia dobre, uniwersalne rozwiązanie, i prawdopodobnie będziesz nadążał za wymaganiami wydajnościowymi na niezbyt drogim sprzęcie. Może z łatwością obsługiwać wiele tysięcy aktualizacji na sekundę na podwójnym czterordzeniowym pudełku z porządnymi dyskami. Wbudowana asynchroniczna replikacja zapewni Ci większość możliwości związanych z dostępnością - ale możesz utracić kilka sekund danych w przypadku niepowodzenia podstawowego. Niektóre z tych utraconych danych mogą być odzyskane, gdy podstawowe jest naprawione lub można je odzyskać z dzienników aplikacji: to, czy możesz to tolerować, zależy od działania twojego systemu. Mniej stratną - ale wolniejszą - alternatywą jest użycie MySQL Innodb z dzielonym dyskiem pomiędzy jednostkami Primary i Failover: w tym przypadku jednostka Failover przejmie dysk, gdy Primary ulegnie awarii bez utraty danych - tak długo jak Primary nie miał żadnej katastrofy na dysku. Jeśli udostępniony dysk nie jest dostępny, DRBD może być użyty do symulacji tego poprzez synchroniczne kopiowanie bloków dysków do jednostki Failover, ponieważ są one zapisane: może to mieć wpływ na wydajność.
Korzystanie z Innodb i jednego z powyższych rozwiązań replikacji spowoduje, że dane zostaną skopiowane do urządzenia Failover, które stanowi znaczną część rozwiązanego problemu odzyskiwania, ale potrzebny jest dodatkowy klej do rekonfiguracji systemu w celu dostosowania urządzenia awaryjnego do trybu awaryjnego. linia. Zwykle jest to wykonywane w systemie klastrowym, takim jak RHCS lub Pacemaker lub Heartbeat (w systemie Linux) lub w MS Cluster dla systemu Windows. Te systemy to zestawy narzędziowe, a ty możesz zabrudzić sobie ręce, tworząc z nich rozwiązanie, które będzie pasować do twojego środowiska. Jednak w przypadku wszystkich tych systemów wystąpił krótki okres przestoju, podczas gdy system zauważy niepowodzenie systemu podstawowego i ponownie skonfiguruje system tak, aby korzystał z przełącznika awaryjnego. Może to być kilkadziesiąt sekund: próba zmniejszenia tego może spowodować, że twój system wykrywania błędów będzie zbyt czuły i może się okazać niepotrzebny niepotrzebny system.
Przesunięcie w górę, NDB MySQL ma na celu skrócenie czasu do odzyskania, a także w pewnym stopniu pomóc w skalowaniu bazy danych w celu zwiększenia wydajności. Jednak NDB MySQL ma dość wąski zakres zastosowania.System odwzorowuje relacyjną bazę danych na rozproszoną tablicę asocjacyjną, a więc w przypadku złożonych zapytań z wieloma połączeniami w różnych tabelach występuje duży ruch między komponentem MySQL a komponentami pamięci (węzłami NDB), co sprawia, że złożone zapytania działają wolno. Jednak dobrze pasujące zapytania działają bardzo szybko. Kilka razy przyglądałem się temu produktowi, ale moje istniejące bazy danych były zbyt skomplikowane, by pasowały dobrze i wymagałyby wielu przeprojektowań, aby uzyskać dobrą wydajność. Jednakże, jeśli jesteś na etapie projektowania nowego systemu, NDB będzie działał dobrze, jeśli będziesz mógł znieść jego ograniczenia na uwadze. Ponadto, może się okazać, że potrzebujesz kilku maszyn, aby zapewnić dobre rozwiązanie NDB: kilka węzłów MySQL plus 3 lub więcej węzłów NDB - chociaż węzły MySQL i NDB mogą współistnieć, jeśli twoje potrzeby wydajnościowe nie są zbyt ekstremalne.
Nawet NDB MySQL nie poradzi sobie z całkowitą utratą danych - pożarem w centrum danych, błędem administratora itp. W takim przypadku zwykle potrzebny jest inny strumień replikacji, który zostanie uruchomiony na stronie DR. Zwykle będzie to wykonywane asynchronicznie, więc blipy łączności w łączu między lokacjami nie zatrzymają całej bazy danych. Jest on dostarczany z opcją replikacji geograficznej NDB (w płatnej wersji telco), ale myślę, że MySQL 5.1 i wyżej mogą to zapewnić natywnie.
Niestety, niewiele wiem o Zookeeperze i Chubby. Mam nadzieję, że ktoś inny może podnieść te aspekty.
Na to pytanie trudno odpowiedzieć, nie wiedząc więcej o tym, co próbujesz osiągnąć. Jest całkiem możliwe, że prosta replikacja MySQL (nawet bez użycia NDB) może być dla ciebie wystarczająca. W większości architektur baz danych, kluczowymi pytaniami, na które należy odpowiedzieć są: 1) jaki jest mój cel dotyczący czasu przywracania (tj. Jak długo muszę odzyskiwać dane po awarii głównej bazy danych) 2) jaki jest mój cel naprawy (np. wiele danych mogę utracić w razie awarii podstawowej bazy danych). Im bardziej tolerancja dla tych celów, tym bardziej skomplikowane (i drogie) rozwiązanie. – Martin
Thanx martin ... Właśnie zaktualizowałem moje pytanie o moje wymagania. –