2013-10-08 5 views
17

Mam serwer z 5 lub 6 niewielkimi aplikacjami Rails. Wszystkie załączone pliki są na S3 i wszystkie używają MySQL jako bazy danych. Każda aplikacja ma własnego użytkownika i działa trochę ciąć. Istnieje serwer nginx, który wykonuje równoważenie obciążenia i routing w domenie.Architektura serwera Docker dla wielu aplikacji dotyczących bazy danych

Mam zamiar zastąpić ten serwer przez instalację Docker: jeden serwer z jednym kontenerem na aplikację, z nginx z przodu.

Moje pytanie brzmi: gdzie umieścić część bazy danych?

Głównie zobaczyć 4 możliwości:

1) jeden MySQL wewnątrz każdego pojemnika aplikacji. To chyba nie jest filozofia Dockera. Wymagałoby to indywidualnego archiwizowania danych każdego kontenera.

2) Unikalny kontener MySQL dla wszystkich aplikacji.

3) Standardowa instalacja MySQL na serwerze Docker.

4) Oddzielny serwer MySQL dla wszystkich aplikacji.

Co byś zrobił?

PS: Wiem, że Docker nie jest jeszcze gotowy do produkcji, zamierzam go wykorzystać do wykonania w danej chwili i zmienić, jeśli jestem z niego zadowolony.

Odpowiedz

22

To zależy od kilku czynników. Oto kilka pytań, które pomogą Ci podjąć decyzję.

  • Czy 5-6 aplikacje bardzo podobne (czyli w warunkach Döcker, można je oprzeć na wspólnym obrazie), a myślisz o wdrożeniu więcej z nich, i/lub migracji niektóre z nich inne serwery?

    • TAK: to ma sens, aby umieścić serwer MySQL w każdej aplikacji, ponieważ będzie „trzymać się” z aplikacją, przy minimalnym wysiłku konfiguracyjnym.

    • NIE: wtedy nie ma żadnego powodu, aby osadzić serwer MySQL.

  • Chcesz, aby móc skalować te aplikacje (czyli prośby balansowanie obciążenia dla jednej aplikacji na wielu pojemnikach), lub do skalowania serwera MySQL (na przykład do master/slave replikowane konfiguracji)?

    • TAK: to nie można umieścić serwer MySQL, w przeciwnym razie, skalowanie jedną kondygnację by skalować drugą kondygnację, co doprowadzi do chociaż bóle głowy.

    • NIE: wówczas nic nie stoi na przeszkodzie w osadzeniu serwera MySQL.

  • Czy sądzisz, że na co najmniej jedną z tych aplikacji wystąpi znaczące obciążenie bazy danych?

    • TAK: to może chcesz używać oddzielnych serwerów MySQL, ponieważ pojedyncza aplikacja mogłaby utrudniać innym.

    • NIE: możesz użyć jednego serwera MySQL.

Osadzanie serwer MySQL jest w porządku, jeśli chcesz super łatwy do wdrożenia setup, gdzie nie trzeba skalowalności, ale chcesz, aby móc kręcić nowe instancje bardzo łatwo i chcesz móc bez problemu przenosić instancje.

Najbardziej elastyczną konfiguracją jest ta, w której wdrażasz jeden kontener aplikacji + jeden kontener MySQL dla każdej aplikacji. Jeśli chcesz to zrobić, proponuję zaczekać na Docker 0.7, który zaimplementuje linki, co pozwoli ci mieć podstawowy mechanizm wykrywania usług, dzięki czemu każdy kontener aplikacji może łatwo wykryć host/port swojego kontenera bazy danych .

Nie wdrożyłem MySQL na hoście; jeśli chcesz mieć pojedynczą instalację MySQL, możesz osiągnąć ten sam wynik, uruchamiając pojedynczy kontener MySQL i uruchamiając go pod numerem -p 3306:3306 (spowoduje to przekierowanie portu hosta 3306/tcp do portu kontenera MySQL o numerze 3306/tcp).

+0

Dzięki! Tak, aplikacje są podobne, z wyjątkiem ich wersji Rails i Ruby, to tylko standardowe aplikacje Railsowe i ich zależności. Nie ma potrzeby skalowania ani replikacji, tylko podstawowe (prawie starsze) witryny internetowe z niewielką liczbą funkcji. – aurels

1

Od 5 lub 6 aplikacji są małe, jak to opisano, na pewno wykluczyć możliwość instalowania osobnego MySQL na pojemniku z dwóch powodów:

  1. To marnotrawstwo zasobów serwerowych, to jest prawie równoważna zainstalować MySQL 5 lub 6 razy na tym samym serwerze.
  2. Jest mniej elastyczny (nie można skalować bazy danych niezależnie od aplikacji) i trudniej wykonać kopię zapasową.

Mając dedykowany pojemnik MySQL lub instalacji MySQL na komputerze bezpośrednio (czyli nie dockerizied) powinny mieć niemal taką samą wydajność (w końcu trzeba będzie natywną proces mysql na komputerze niezależnie od tego czy jest to w pojemnik lub nie).

Jedyna różnica polega na tym, że należy zamontować wolumin, aby przechowywać dane poza kontem MySQL , więc posiadanie dedykowanego kontenera MySQL jest lepszym rozwiązaniem.

+0

Wybierając opcję uruchamiania MySQL bezpośrednio na hoście Docker, czy kontenery będą mogły się z nim łatwo łączyć? Po prostu przez 127.0.0.1? – aurels

+0

Tak, przez "woluminy". Używam 1 kontenera mysql dockera z wieloma aplikacjami, które go używają, także w kontenerach. Host ma zainstalowane tylko okno dokowane. – majkinetor

+0

Tak, wystarczy przekazać adres IP/port MySQL jako zmienne środowiskowe do kontenera dokera, który go użyje (nie 127.0.0.1). @majkinetor, on pyta o uruchamianie MySQL bezpośrednio na hoście, tj. Poza kontenerem dokowania – iTech