Linux LAMP szerver migráció OpenVZ virtualizációra
Az alábbiakban igyekszem összefoglalni azokat a szempontokat és teendőket, melyek egy LAMP szoftverekkel használt, több külsős cég számára teljes internetes megjelenést biztosító Linux szerveren az OpenVZ „konténer alapú” virtualizációs technológia bevezetésével járnak.
Miből
Kiindulási rendszerünk tehát egy általános Linux web- és mail-kiszolgáló. Egy ilyen gép jellemzően számos - egymástól részben független - feladat ellátására szolgál. Ezek jelen dokumentum tekintetében a következők:
HTTP - a gép elsődleges feladata a rajta futó céges weblapok kiszolgálása, ez gyakran több virtuális hostot jelent. Jelen dokumentumban az Apache web szerver felhasználását feltételezem.
FTP/WebDAV - a webfejlesztőknek és tartalomfelelősöknek lehetőséget kell biztosítani a weblapok anyagának kezelésére illetve fejlesztés alatt álló webtartalmak elkülönítésére. Több felületen is elérést biztosíthatunk ezekhez a tartalmakhoz. Közös követelmény, hogy a webszerver kiszolgálási környezetét a lehető legkisebb mértékben legyenek képesek módosítani, vagyis lehetőleg egy adott felhasználó ne férjen hozzá mások adataihoz és saját anyagainak Linux jogosultságait se legyen lehetősége befolyásolni - ezek miatt a követelmények miatt az SSH/SCP rendszer használatát ezen a területen nem vesszük számításba.
PHP - a rendszeren futó weblapok elsődleges motorja, a szerver oldali alkalmazások virtuális hostokra elkülönített kiszolgálásáért felelős.
SMTP - a rendszer egyéb felhasználói általában levelezési rendszert igényelnek, amihez gyakran társul spam- és vírusszűrés, POP3 és IMAP mailboxok valamint esetlegesen egy webmail felület is. A levelezési rendszer kialakításához a Postfix és Dovecot szoftverek felhasználása mellett a ClamAV, MailScanner, procmail és SpamAssassin kerül majd terítékre.
MySQL - a rendszer hátterét képző adatbázis kezelésére is szükség van. Jelen dokumentum nem foglalkozik más SQL rendszerek (PostgreSQL, Firebird, stb…) konfigurációs problémáival.
DNS - a weblapokhoz és céges levelezéshez általában saját domain nevek is társulnak, ezek kiszolgálását el kell végezni. Esetünben a bind9 kiszolgáló kerül számításba.
Miért
Mire jó ez az egész? Miben különbözik egy klasszikus módon telepített Linux webszerver egy OpenVZ alapú rendszertől? Első sorban az alábbi szempontok alapján javaslom az áttérést:
Biztonság - a fent felsorolt szoftverekhez tartozó adminisztratív és felhasználói teendők a lehetőségekhez mérten elkülönítendők. A legtöbb esetben biztonsági szempontból az a célszerű, ha a rendszer különböző elérési pontjai eleve elkülönítve futnak, vagyis például egy hibásan megírt weblapon történő kódfuttatás közvetlenül nem érintheti a levelező rendszert vagy az adatbázis kezelő szoftvereket. A biztonság egy másik aspektusa a szolgáltatásbiztonság. Virtualizáció mellett könnyen nyílik lehetőségünk az egyes szolgáltatások komplett archiválására és szükség esetén másik fizikai számítógépen való újraindítására.
Adminisztráció - egy elkülönített szoftverek karbantartása egy bizonyos összetettség felett egyszerűbbé válik ha az egyes alkalmazási területek operációs szempontból is külön virtuális gépekben foglalnak helyet. Könnyebbé válik a rendszer frissítése, konfigurációja, ráadásul az egyes változtatások előzetesen körültekintően tesztelhetők is.
Terheléselosztás - egy bizonyos terhelés fölött egyes szolgáltatások prioritását a többiekéhez képest csökkenteni lehet. Például a természeténél fogva kötegelt feldolgozást végző SMTP szolgáltatás prioritása egy streaming web tartalomhoz képest jóval alacsonyabb is lehet. Az OpenVZ segítségével lehetőség nyílik a Linux adta natív erőforrás-megosztási eszközöknél jóval finomabban szabályozni, melyik szolgáltatásnak mennyi erőforrás jusson. Szükség szerint jóval egyszerűbbé válik az egyes szolgáltatások külön dedikált számítógépre való költöztetése is.
Mit
Az elkészíteni kívánt rendszer elsődleges operációs rendszere („Hardware Node” - HN1)) csak a virtuális gépek futtatását és az alapvető rendszergazdai felületet nyújtó SSH szolgáltatást végzi, a HN által futtatott virtuális környezet az alábbi részekből áll (minden egyes pont egy külön virtuális gépet („Virtual Environment” - VE2)) jelöl) - a felsorolás egyben a VE-k standard indítási sorrendjét is megadja:
LDAP felhasználói adatbázis - feladata a rendszerben ismert felhasználók központi tárolása és adminisztrációja. Erre azért van szükség, mert az egyes VE-k karbantartása meglehetősen nehéz lenne, ha egy konkrét személyez tartozó nevet és jelszót az összes szolgáltatás esetében külön kellene felvenni és módosítani. Az LDAP segítségével hálózati azonosítási szolgáltatást nyújtunk a VE-ken futtató helyi - virtuális - hálózaton. Ez későbbiekben lehetővé teszi az egy darab HN-ről a több párhuzamosan futó HN-re való könnyebb áttérést is (vö: terheléselosztás).
DNS szolgáltatás - elkülönítése azért is célszerű, mert általában nem igényel a központi adminisztrátoron kívül más felhasználók (pl. ügyfelek) számára hozzáférést.
SMTP szolgáltatás - egybekötve a SPAM- és vírusszűréssel, valamint a felhasználói mailboxok POP3 és IMAP protokollon való szolgáltatásával. A levelek fogadását (Dovecot) és küldését (TLS + SASL auth) LDAP alapú azonosítás előzi meg.
MySQL (és más SQL szerverek) - Linux operációs rendszer szinten - a
DNS-hez hasonlóan - ez sem igényel külön felhasználói hozzáférést, hiszen az SQL szerver saját felhasználó-adminisztrációval rendelkezik. A MySQL sajnos jelenleg nem támogat semmilyen más (pl. LDAP) azonosítást, ezért ezen a ponton mindenképp kettős felhasználó-adminisztrációra kell számítani (ahogy egyébként „normál” esetben is).
HTTP - az előző VE-k szolgáltatásaira építve ezen a ponton megkezdődhet a weblapok kiszolgálása. Ebben a VE-ben fut az Apache és a PHP, biztonsági okokból célszerűen kiegészítve az
ITK MPM workerrel. Az esetleges WebDAV elérés az LDAP szolgáltatás segítségével valósítható meg.
FTP - a céges tartalomfelelősök számára nyújtott fájlátviteli szolgáltatás célszerűen egy újabb VE-be kerül. A jogosultságkezelésről az
FTP szerver az LDAP alapján gondoskodik.
Hogyan
A dokumentumnak ez a része még fejlesztés alatt áll. Az itteni változtatások feltehetőleg visszahatnak majd a fenti szövegrészekre is!
Előkészület
A rendszer előkészítésének első lépése az OpenVZ virtualizációs technológia telepítése. Ehhez legalább a kernel lecserélésére és a szükséges adminisztrációs eszközök (vzctl, stb…) feltelepítésére van szükség.
Ezt követően szükség van a tervezett virtualizált rendszer alapjainak lefektetésére. Első feladat az LDAP VE létrehozása és a rendszer felhasználóinak átemelése az LDAP adatbázisba. Ezt a virtualizált rendszer építése során még többször meg kell tenni, hogy az eredeti felhasználói adatbázis változásait követni lehessen, ezért ehhez egy migrációs script megírására lesz szükség.
A következő lépés a DNS szerver külön VE-be való költöztetése, mely nem okozhat elvileg különösebb problémát, mivel egy elég zárt konfigurációval rendelkező, önálló szolgáltatásról van szó. A DNS szerver konfigurációját ki kell egészíteni a helyi VE-k privát IP címeit tartalmazó forward és reverse címeket tartalmazó segédzónával, mely segítségével a VE-k egymás közti kommunikációja függetleníthető azok IP címétől.