Jak zbudowałem Moodle'a
Nosiłem się z napisaniem tego artykułu jakiś czas, ale jakoś weny nie było. Minęło pół roku, tej dalej nie ma, ale gdzieś w pobliżu ją czuję. O czym to - bo przecież nie napisałem moodle, tym się zajmuje facet z Australii plus cała grupa innych koderów. Otóż na uniwerku postanowiono zmienić system wspomagania nauki. Do tej pory korzystaliśmy z WebCT, ale wsparcie się skończyło. Firma ma w ofercie inny produkt, niestety nieziemsko drogi. Z mojego, czyli dba, punktu widzenia, również bardzo skomplikowany. Nie będzie to wpis techniczny, być może kiedyś taki powstanie, z poradami jak wszystko skonfigurować i podregulować. Tyle tytułem wstępu.
Wybór systemu
Jak wielu z Was zapewne wie, tak ważnego systemu dla przedsiębiorstwa (bo uniwersytet jest jakby nie było takim tworem), nie wybiera się w pięć minut. Powstał projekt, z radą, menadżerem, doradcami, sponsorami itp. Wybrano trzy systemy, zaproszono przedstawicieli firm na prezentację. Ponieważ moodle jako taki nie jest tworzony przez firmę, zaproszono doradców z takiej, zajmującej się wdrożeniami moodle i doradztwem. Byłem w komisji oceniającej produkty. Jak się to odbywało? Jak zwykła prezentacja ze slajdami, tyle że na koniec mogliśmy wałkować prezenterów. Pytania od członków komisji dotyczyły zarówno strony funkcjonalnej, jak i technicznej (ja). Nie będę Was zanudzał szczegółami ale oczywiście interesowało mnie z jaką bazą danych to może pracować, na jakich platformach itp. Po ocenie prezentacji, przyszedł czas na następne spotkanie i bardziej szczegółowe pytania, wybraliśmy już wstępnie dwa systemy i chcieliśmy poznać więcej szczegółów. Koniec końców - wybór padł na moodle, z wielu względów, z których finansowy był jednym z najważniejszych. Wysłano oficjalne maile do kogo się dało, zatwierdzono budżet i deadline'y - startujemy.
Wybór platformy OS i bazy danych
Żeby nie zostać posądzonym o stronniczość, trzeba było przetestować różne konfiguracje. W odróżnieniu od poprzednika (WebCT działał w zasadzie na ustalonym zestawie aplikacji - weblogic plus dwie bazy do wyboru), moodle oferuje wolność wyboru. W zasadzie jest jeden sztywny wymóg - PHP. W końcu aplikację pisze się w jednym języku a nie kilku. Co do reszty - serwer www, baza danych czy system operacyjny - można to postawić na wszystkim, na co jest kompilacja PHP. Poprosiłem dział serwerowy o przygotowanie 4 vm'ów. Dwa windows, dwa linux, przy czym sam instalowałem redhata. Windows jest z gotowego szablonu, oszczędność czasu. Jeden serwer windows dostał bazę MS SQL, IIS + PHP, drugi MySQL, apache i PHP. Ponieważ nie można postawić MS SQL na liuxie, PHP z jednego z nich łączył się z zewnętrznym serwerem. Żeby zrównoważyć testy, zmieniłem później konfigurację pierwszego serwera windows, tak by PHP łączyło się również z zewnętrzną bazą microsoftu. Dodaliśmy na koniec jeszcze jeden test - z bazą MySQL na zewnętrznym serwerze. Z takim środowiskiem przeprowadziliśmy mnóstwo testów wydajnościowych, wszystko było zapisywane i porównywane. Najlepiej cały system działał na konfiguracji - linux, apache, PHP i MySQL. Ale ponieważ na uniwerku przyjęto politykę korzystania z rozwiązań MS gdzie się tylko da, postanowiliśmy stworzyć hybrydowe środowisko - serwery www na linuxie, baza na klastrze MS SQL. Zacząłem budować całość, oprócz serwera bazy, bo to już mamy. Zaczęły się poważne testy i migracja danych. Niestety z jakichś powodów system nie działał zbyt wydajnie. W pewnym momencie postanowiliśmy wykorzystać bardzo wydajny serwer, kupiony dla innych celów, i postawić na nim bazę MySQL. Ponowna instalacja moodle, konfiguracja .... i zbieraliśmy szczęki z podłóg. Decyzja - zostajemy z takim zestawem - wszystko na linuxach z MySQL.
Realizacja
Przyszedł czas na konkretne zaplanowanie infrastruktury. Z testów wynikało, że pojedyncza baza na wybranym sprzęcie spokojnie da radę. Ale oczywiście trzeba mieć jakiś serwer "stand by" - czyli taki, który można przełączyć w tryb produkcyjny, w razie awarii podstawowego. Serwer na bazę ma 96GB ram, 32 rdzenie, 4 karty sieciowe (nie korzystam ze wszystkich). Drugi jest identyczny. MySQL skonfigurowałem w zestawie Master-Slave. W razie czego, przełączenie może być zrobione w 5 minut, może mniej. Mamy plany, by zmienić tę konfigurację w klaster active-active. W systemie z WebCT działały 4 serwery www, jeden administracyjny. Postanowiłem zbudować podobny zestaw. Serwer www to klaster 3 serwerów z apache, PHP, akceleratorem, zbudowane na maszynach wirtualnych. Do tego przyłączony jest czwarty serwer administracyjny, ale nie zarządza pozostałymi - jest przeznaczony do tzw. obsługi - czyli zaplanowane zadania, czyszczenie, wysyłanie maili, skrypty przetwarzające, importujące z innych baz itp. Aby nie obciążać głównych serwerów. Ten nie jest ujęty w puli na "load balancerze". O co chodzi z tym "load balancerem"? Uniwerek ma właśnie taki rozdzielacz ruchu, który obsługuje całe mnóstwo systemów. Jeden z wirtualnych serwerów na nim to właśnie moodle. Szczegółowa konfiguracja tego cuda to nie ja ;) W każdym razie - pula serwerów dla moodle zawiera trzy serwery produkcyjne. Ruch rozdzielany jest na zasadzie obciążenia, ale z tzw. sticky sessions. WebCT zapisywało wszystkie pliki w bazie danych. To wygodne ale powoduje, że baza puchnie jak zwariowana, trzeba stosować quoty itp. Moodle zapisuje pliki w systemie operacyjnym. Ale wszystkie serwery www muszą mieć dostęp do tego samego zasobu, więc kolejny serwer - NFS. Na razie jest to osobna maszyna z linuxem, ale nasz nowy SAN ma tę funkcjonalność, z mirrorowaniem, więc w niedługim czasie się na to przerzucimy. NFS to VM, więc mamy jej mirror na drugim kampusie, LUN jest też kopiowany na lustrzany obszar, niemniej - przełączenie maszyny to kilkanaście minut. Z NFS na SAN to może być nawet nie zauważone przez serwery www.
Produkcja, testy, szkolenia ....
Środowisko produkcyjne jest, ale to nie wszystko. Prawdziwy hardcore pracuje na żywym organizmie, ale w takiej firmie potrzebujemy zestawu testowego. Mamy swoich deweloperów, tworzą dodatki, moduły, plug-iny itd. Bez testów nikt nie odważy się zainstalować tego na produkcji. A i oni muszą mieć na czym to tworzyć. A cała kadra nauczycielska musi mieć swoje środowisko treningowe, studenci coś na czym zapoznają się z systemem itd itd. Liczba serwerów rośnie.... A jeszcze mamy serwery archiwalne, zawierają surowe dane zmigrowane z WebCT. Konfiguracja systemu testowego jest najbardziej zbliżona do produkcyjnego. Ze zrozumiałych względów. Połączenia do zdalnych systemów są również zdublowane, np. do firmy sprawdzającej plagiaty. Zapomnieliście już o bazach MS SQL? Ależ łączymy się z nimi z moodle. W tych bazach jest całe mnóstwo danych agregowanych z innych systemów - student record system, financial system, HR itd. Z serwera administracyjnego łączymy się z tymi bazami i pobieramy dane. Jakie - nie mam pojęcia, to wiedzą koderzy i zainteresowane działy. Ja oczywiście musiałem zainstalować i skonfigurować potrzebne sterowniki i biblioteki.
A siódmego dnia ....
Projekt, od rozpoczęcia do zamknięcia, trwał ok. 9 miesięcy. Po drodze kupiliśmy kilka przydatnych narzędzi, jak np. Full Convert Enterprise - program do migracji danych z bazy do bazy. Moodle okazał się bardzo "wdzięcznym" produktem. Oprócz PHP, reszta składników jest dowolna, zamiast apache można wykorzystać nginx czy lighthttpd. Zamiast MySQL z oracle, można użyć MariaDB albo bazy z Percona, albo zupełnie innej - MS SQL czy PostgreSQL. Całość może chodzić na linuxie albo windowsie, czytałem o wdrożeniach z wykorzystaniem komponentów w całości prawie microsoftowych. Może to działać też w chmurze, jest dużo firm hostujących moodle dla instytucji edukacyjnych. Zagłębiając się już w funkcjonalność - moodle może wyglądać zupełnie ... nie jak moodle. Trochę to zalatuje reklamą, ale po skomplikowaniu WebCT, z nieszczęsnym weblogikiem, opartym na javie - to wydało mi się niesamowicie proste.
Panie, z czym mi tu, ja to znam
Dla wielu to pewnie opowiadanie ich własnej historii. Jednakże mam nadzieję, że komuś nie obeznanemu w temacie, albo komuś kto pracuje w małej firmie, ten wpis przybliży jak się to robi w większych przedsiębiorstwach i na obczyźnie. Choć myślę, że nie różni się to wiele od projektów w Polsce.
Ty to zbudowałeś?
Dlaczego na początku napisałem, że to ja zbudowałem moodle? Dlatego, że tak było. Jestem DBA na uniwerku już 6 rok, przejąłem WebCT od poprzednika, niejako z urzędu byłem kandydatem na wykonanie tego projektu. Nie stworzyłem systemu oczywiście zupełnie sam. Inne teamy współdziałały, koderzy z www, serwerowcy, sieciowcy, gość od Load Balancera itd. Jednakże większość robiłem ja, począwszy od projektu systemu a skończywszy na oddaniu go do użytku. I nie piszę tego żeby się chwalić, chodzi o to, że taki system może zbudować ktoś, w zasadzie, ze średnią wiedzą o systemach na linuxie.