Websupport je obrovským “spotrebiteľom” opensource softvéru, bez ktorého by sme nemohli fungovať. Používame desiatky aplikačných serverov, rôzných verzií a nástrojov. Po rokoch pasivity sme sa však aj my rozhodli prispieť opensource komunite zverejnením zdrojových kódov aplikácií, ktoré sme vyvinuli na našej github stránke https://github.com/websupport-sk .

Práca admin tímu vo Websupporte obnáša aj nemalú dávku programovania. Vačšinou ide o jednoúčelové programy, obyčajne o migračné skripty, napísané v jazyku Bash, Python alebo C, ale pozeráme aj po jazyku Go. Stretneme sa však aj s množstvom patchov a modulov do Apache, nginx, memcached, Openstack a pod.

S príchodom novej infraštruktúry pribudlo aj množstvo programovania v jazyku CFEngine, na ktorom je prakticky celá infraštruktúra kompletne postavená, a ktorým je zároveň aj riadená.

Dnes si predstavíme dve najdôležitejšie aplikácie, na ktorých Websupport stojí:

rum

rum je MySQL query router, ktorý skrýva počet databázových serverov, ktoré používame za jednu adresu databázového servera.

V roku 2010 sme sa dostali do stavu, kedy sme museli prejsť z jedného monolitického databázového servera na viac menších, z dôvodu problematického škálovania MySQL 5.0 . Problémom bolo, že tisícky našich klientov malo napevno napísanú adresu tohto databázového servera vo svojich skriptoch ako ‘localhost’,’/tmp/mysql50.sock’,’db50.websupport.sk’ a podobne. Pri rozdeľovaní databázového servera by sme museli premigrované databázy, resp. weby k nim upravovať, čo je prakticky nemožné pri tisíckach weboch.

Preto sme museli tieto adresy databázového servera zachovať a “skryť” celú našu MySQL infraštruktúru za túto jednu adresu. V tom čase však žiadne použiteľné riešenie neexistovalo, takže sme si to museli naprogramovať sami.

Po niekoľkých týždňoch programovania, môj kolega @stanojr rozšíril svoj pôvodný rum, ktorý bol len klasický TCP/IP redirektor, o schopnosť smerovať MySQL spojenia podľa používateľského mena, na konkrétny databázový server. Z tohto dôvodu musíme udržiavať reláciu jedného používateľa na jednu databázu.

Toto bol významný krok, ktorý nám umožnil narásť do dnešných rozmerov. Za jednou adresou databázoveho servera, sa v súčasnosti skrýva viac ako 22. databázových serverov, z každej MySQL verzie 5.0 a 5.1 . Výhodou je aj to, že je možné tieto databázy migrovať medzi týmito databázovými servermi, a tým rozkladať záťaž. O toto automatické distribuovanie databáz, resp. záťaže, sa stará iný náš projekt, s názvom rrhad, z dielne Maťa Čapkoviča (@capkovic).

ocf

Projekt ocf si kladie za cieľ postaviť a udržiavať automatizovane openstackovú a virtualizovanú infraštruktúru na serveroch.

Nám sa pomocou tohto projektu podarilo postaviť hostingovú infraštruktúru Websupportu za približne tri hodiny, plne automatizovane. Proces prebiehal nasledovne:

  1. reštartovali sa prázdne servery, aby sa nabootovali cez sieť
  2. po nabootovaní sa nainštalovali z inštalačného servera, ktorý bol sám o sebe nakonfigurovaný automatizovane
  3. po nainštalovaní servera, si server ako posledný krok stiahol CFEngine predpis, ktorý zadefinoval jeho úlohu a konfiguráciu. Treba pripomenúť, že existujú dva typy serverov:
    1. openstack manažment – server, na ktorom beží API openstacku
    2. compute nodu, kde beží samotná zvirtualizovaná infraštruktúra
  4. spustila sa konfigurácia Openstacku na serveroch
  5. po úspešnej konfigurácii sa začala vytvárať zvirtualizovaná infraštruktúra zdieľaného hostingu
  6. po štarte virtuálneho servera, (napr. apache24-php53-1) si stiahol svoj CFEngine predpis
  7. na základe tohto predpisu sa nakonfiguroval celý server

ocf je teda možné chápať ako také DNA, na základe ktorého vyrastie celá IT infraštruktúra, podobne ako zo zrnka vyrastie rastlina. Netreba ho však chápať len ako nástroj na deployment Openstackovej infraštruktúry. CFEngine3 sa postará aj o udržiavanie tejto konfigurácie a akékoľvek odchýlky, vráti naspäť do pôvodnej konfigurácie.

Počas vývoja našej openstackovej infraštruktúry sme museli opatchovať aj niektoré aplikácie ako je napr. libvirt alebo nova-compute, aby fungovali tak, ako sme potrebovali. Výsledkom je mierne odlišná varianta Openstack Grizzly balíčkov na našom Ubuntu repozitári repo.websupport.sk . V tomto repozitári sa nachádza aj balíček pre rum. Ak si ho chcete pridať k svojim repozitárom, je nutné pridať

deb http://repo.websupport.sk/ubuntu precise main

do /etc/apt/sources.list alebo /etc/apt/sources.list.d . Kľúč nájdete na adrese http://repo.websupport.sk/debian/pub.txt .

O niečo detailnejší popis si môžete pozrieť na našej prezentácií, ktorú sme mali na Config Management Campe v Belgicku.

Tieto projekty môžete voľne používať v zmysle licencie GPLv3 .

Tešíme sa na vaše patche ! 🙂

Komentáre