Stoję przed zadaniem zaprojektowania architektury taniego klastra dla działającej firmy. Obecnie całość mieści się na 4 serwerach dedykowanych (2-rdzeniowe Opterony, 8GB ram) i coraz bardziej widoczne są problemy wydajnościowe. Dodatkowo konieczne jest zapewnienie HA dla jednego z elementów. W skład "inwentarza" nad jakim muszę zapanować wchodzą aktualnie:
- Poczta (aktualnie dovecot i postfix) (s1).
- Dwa średnie serwisy (Nginx, PHP, MySQL) (s1 i s2).
- OpenX dla powyższych (Nginx, PHP, MySQL) (s3).
- Firmowy serwis intranetowy (kilka mniejszych aplikacji, Nginx, PHP, MySQL, PostgreSQL) (s4) - krytyczny dla działania firmy!
W internecie jest niby pełno materiałów o budowaniu klastrów pod aplikacje webowe, jednak większość z nich sprowadza się do HAProxy dla PHP i ewentualnie MySQL Cluster jako DB. Problemy zaczynają się jak chce się zaprojektować wszystko całościowo z uwzględnieniem zastanego kodu.
Aktualnie mam wymyślone:
Dwa serwery z keepalive/heartbeat oraz najpewniej HAProxy dla zapewnienia HA i LB na warstwie web (do tego tanie nody z Nginx/php).
Na tych samych serwerach dovecot i Postfix (konta w bazie MySQL, magazyn danych (ang. storage) - wykorzystanie dalej wspomnianego DFS lub osobny DRBD pomiędzy tymi konkretnymi maszynami).
Nody - tanie serwery z nginx i php-fpm. Osobna pula dla serwisów internetowych, osobna dla intranetowych.
Problemy:
- Baza danych
Jak wspomniałem, są to zastane aplikacje często dość mocno wykorzystujące MySQL (wyzwalacze ang. trigger, specyficzne możliwości, klucze obce, usuwanie kaskadowe itp.), stąd też migracja MySQL Cluster z NDB jest niemożliwa. Z przeszukania internetu z pomocą Google jedyne co mi przychodzi do głowy to replikacja Master-Master MySQL Galera na 3-4 serwerach i do tego LB poprzez wykorzystanie HAProxy (a może coś lepszego?) Pytanie, czy ktoś ma (miał) już z tym praktyczne doświadczenie, i czy rzeczywiście zapewnia to jakiś stopień skalowalności oraz stabilności? - Magazyn na dane
Tutaj kompletnie nie mam pomysłu co zrobić? Mogę wykorzystać albo NAS (ale tworzy to problem ang. Single Point of Failure) albo DFS. Po odsianiu zamkniętych oraz nie obsługujących POSIX zostaje praktycznie tylko Lustre i GlusterFS. Czy ktoś ma jakieś doświadczenia z nimi i może konkretnie wskazać, który z nich będzie bardziej elastyczny i pewny?
Byłbym wdzięczny za wszystkie rady i pomysły, zwłaszcza dotyczące DB i magazynu na dane.