Linux trükkök

Linux tippek és trükkök

Amazon EC2/S3 – fogalmak, előkészületek

Több netes fórumot és tutoriált végigolvatam, mire találtam megoldást webes projektek Amazon EC2/S3 rendszerében való futtatására. Az egyik partner cégünknél kellett az általuk fejlesztett rendszert a felhőben üzembe helyeznünk úgy, hogy az a lehető leghatékonyabban működjön és a legolcsóbb legyen.

Mi a Cloud Computing?

Pontos meghatározás nincs, az alábbi tulajdonságok írják le a Cloud Computing lényegét:

  • Elsősorban egy bérleti konstrukció
  • Nem a vas, vagy a legalsó rétegek az érdekesek, csak a szolgáltatás.
  • Teljesítményt lehet bérelni számítási egységenként (virtuális szerverenként) meghatározva.
  • A számítási egységeket általában CPU, memória és tárhely vonatkozásban árazzák.
  • A számítási egységek nem tipizáltak, azaz lehet egy csomó különböző szervertípust készíteni (pl. adatbázis-szerver, alkalmazásszerver).
  • A számítási egységek virtualizáción keresztül futnak, minden szabadon konfigurálható
  • Tetszés szerint indíthatók és leállíthatók a különböző számítási egységek, bármekkora számban.
  • A felhasznált erőforrások alapján kell fizetni

Az internetes fórumok és vélemények szerint jelenleg a fentieket egyedül az Amazon EC2-es szolgáltatása valósítja meg.

Mi az az S3?

Simple Storage Service. Fájlokat tud biztonságosan tárolni és kiszolgálni. A fájlok a felhőben tárolódnak, a kapacitás korlátlan (tényleg). Minden redundáns (nem kell vele foglalkozni), nagyon kicsi az adatvesztés esélye (persze nem 0, érdemes backupolni). Sok rendszer az S3-ban tárolja a backupot.

Működése:

Az S3 nem fájlokat, hanem “objektumokat” tárol. Egy objektum mérete maximum 5 giga lehet. Minden objektum mellé metaadatokat is lehet tárolni.

Az objektumokat “vödrökbe” lehet tenni. Az S3-on nincs mappaszerkezet, csak vödrök. Gyakorlatilag a vödör egy olyan mappa, amibe nem lehet almappákat létrehozni.

Fontos, hogy a vödrök neve az egész S3-on belül egyedi kell, hogy legyen.

Ezekre a vödrökre és objektumokra lehet hivatkozni az alkalmazásból, de ha engedélyezett, közvetlenül az internetről is.

Az egyes objektumokra jogosultsági beállításokat lehet alkalmazni.

Mi az az Amazon EC2?

Elastic Compute Cloud. Az EC2-vel szervertípusok készíthetők, és utána az igényeknek megfelelően bármennyi példányt lehet belőlük futtatni. Akár másodpercenként indíthatók és leállíthatók a példányok a terheléstől függően. Ehhez van egy API felület, amivel lehet nézni a terhelést és ezen keresztül lehet indítani a szervereket akár külső programokból is.

Ezek a szerverek tetszés szerinti operációs rendszert futtathatnak, de jellemzően Linux v. OpenSolaris rendszert használnak (újabban Windowst is lehet).

Az EC2-n tárolt adatok elvesznek újraindításkor, vagy esetleges lefagyáskor, ezért az S3-mal együtt kell használni. (A jól elkészített Linux rendszerek nem fagynak le, újraindítani pedig évente, ha kell…)

Az S3-at és az EC2 állítólag Magyarországról is nagyon gyors elérést biztosít.

Az Amazon EC2-ről bővebben itt lehet olvasni: http://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud

Hol tárolhatók az adatok?

Az Amazon nyújt egy SimpleDB nevű szolgáltatást, ami egy hash formában (nem relációs adatbázis) tárolt adatbázis, direkt felhőkhöz kitalálva. Írtak hozzá egy API felületet, amivel SQL szerű nyelvvel lehet lekérdezni az adatokat. A SimpleDB előnye, hogy az adatok elosztva tárolódnak. Emiatt nagyon jól skálázható és gyors. Hátránya, hogy nem lehet bonyolult relációkat és kapcsolatokat kezelni benne. A tranzakciókat is programból kell megvalósítani.

Egy tavaly megjelent új szolgáltatás a Amazon Relational Database Service (RDS) (MySQL On-demand), amivel az EC2-höz hasonló módon lehet konfigurálni és használni a MySQL-t. Ennek előnye az, hogy nem kell az adatbázis mentéssel, karbantartással foglalkozni (persze backupolni kell). Szerintem nekünk ez a megoldás a Smartnet kapcsán.

A másik megoldás, hogy az EC2-n saját szerveren futtatunk RDBMS-t. Ennek a hátránya, hogy újraindításkor elveszti az adatokat. Ezért folyamatosan szinkronizálni kell az S3-hoz. Ennek egyik megoldása lehet a MySQL cluster, amivel folyamatosan duplikálva vannak az adatok. Elég kicsi a valószínűsége, hogy a két szerver egyszerre áll le. Az adatbázisról rendszeres mentést kell készíteni. Ez a megoldás hosszabb kísérleteket igényel, bár vannak leírások a neten. A másik megoldás, ha valami S3-ra épülő Block Storage megoldást használunk, például az Amazon EBS-t. Vannak ezen kívül más megoldások is, amikkel lehet akár olcsóbbra is kihozni a tárolást, de az EBS-hez nagyon egyszerű felület áll rendelkezésre.

Előkészületek

Amazon Web Services (AWS) fiók létrehozása

Fiókot az aws.amazon.com címen lehet létrehozni egy egyszerű regisztrációs folyamaton keresztül. A fiók létrehozása után a Security Credentials alatt találjuk az Access Key fülön a fiók azonosítókat. Ezt fontos eltenni, mert szükség lesz rá.

EC2 előfizetés

Ahhoz, hogy az EC2-t használhassuk elő kell rá fizetni. Fent a Products fülre kell kattintani, a lenyíló menüből válasszuk az EC2-t. Ez elnavigál egy oldalra, ahol az árakat láthatjuk, továbbá a lap alján meg lehet adni a bankkártya adatokat. Fontos, hogy ellenőrizzük, hogy https protokollon menjen és a Kulcs ellenőrzötten az Amazoné legyen. Ha minden sikerült, akkor el is lehet kezdeni a rendszer használatát.

Firefox plugin

A Google keresőbe az “Amazon EC2 UI” kifejezést írva az 1. találat lesz a Firefox plugin. Azért így írom, mert az amazon
weboldala sokszor változik, így amit most leírnék lehet, hogy nem lenne pár hónap múlva érvényes.

A download gombra kattintva letöltődik, nem települ. A telepítéshez rá kell húzni a fájlt a Firefox extension ablakára (legalábbis Linuxon).

Telepítés után az Eszközök menüben lesz egy Elasticfox nevű menüpont. Ez lesz az AWS kezelőfelülete. Innen tudjuk majd menedzselni a szolgáltatásokat.

Az első indításakor kérni fogja az Access Key adatokat. A rendszer használatának nem feltétele a Firefox és az Elasticfox használata. Minden abban elvégezhető művelet megoldható az AWS weboldalakon is.

WS Management Console (AWSMC)

Ez a hivatalos kezelőfelület. Ez egy webalkalmazás, nagyon profi kezelőfelülettel. Ugyanarra jó, mint a Firefox plugin. Mindenki eldöntheti, hogy melyik megoldás tetszik neki jobban. (Nekem ez a megoldás kicsit átláthatóbbnak tűnt.)

Parancssori eszközök

Az AWS-hez nagyon jó parancssori eszközkészlet állEnnek előnye, hogy nagyon jól scriptelhető. Az összes funkció elérhető, lekérdezhető különböző parancssori eszközökkel. Az Ubuntu Linuxnak tárolókban megtalálható, így nagyon egyszerűen telepíthető.
A parancssori scriptelhetőség mellett nagyon sok programnyelvhez (és scriptnyelvhez) létezik API felület. Így saját fejlesztésű programokba is beilleszthető AWS kezelési lehetőség.

Hitelességi tanúsítvány (X.509)

Ahhoz, hogy a rendszert elérhessük parancssori alkalmazásból, vagy egyéb programból, szükségünk van a titkosításhoz és hitelesítéshez egy kulcsra és egy hitelességi tanúsítványra. Ez akár alkalmazásonként is lehet különböző.

Az AWS a jelszavas módszer helyett egy biztonságosabb kulcsos hitelesítést használja. Ha egy kulcsot ellopnak, akkor egyszerűen le lehet tiltani.

A kulcs generálás az AWS honlapon az Account menü Security Credentials almenü alatt található. Itt egy külön fülön lehet generálni az X.509-es tanúsítványt és a kulcsot. A “Create a new Certificate”-re kattintva lehet mindkettőt elkészíteni. Ekkor feljön egy ablak, ahonnan le lehet tölteni mindkettőt. Figyelem: a kulcsot csak 1x lehet letölteni, ezért vigyázni kell rá. Ha valamilyen olból elveszett, v. a letöltés nem sikerült, újat kell generálni és a régit le kell tiltani.

Kulcspár generálása

A kulcspár való arra, hogy bejelentkezhessünk a virtuális gépünkbe. Itt sem használnak jelszavakat.

Lépjünk be az Elasticfoxba. Válasszuk a “Key Pairs” fület. A kis kulcs ikonra kell kattintani, majd megadni a kulcspár nevét. Ezután feljön egy mentési ablak, hogy mentsük el a legenerált kulcsot.

Ezt lehet majd az alkalmazásokban használni azonosításra. Nem kell a jelszót tárolni. A legenerált kulcs biztonságosan kezelendő. Ha illetéktelenek kezébe jut, újat kell generálni.

Ugyanez elvégezhető az AWSMC-n is a NETWORKING & SECURITY részen.

Ha a Putty programot használjuk menedzselésre, akkor a PuttyGen program segítségével tudunk a kapott kulcsfájlból Putty számára használható kulcsot generálni.

Biztonsági csoportok (Security Groups)

Itt állítható, hogy milyen szolgáltatások legyenek elérhetők és honnan. Ez tulajdonképpen egy tűzfal beállítás.

Érdemes engedélyezni a HTTP, HTTPS, SSH portokat.

EC2 Instance telepítése

Az Instance-ok un. AMI-kból (Amazin Machine Image) indíthatók.

Az instances alatt lehet elindítani egy virtuális szervert. Lehet választani egy már meglévő, közösség v. Amazon által készített lemezképet.

Figyelem: Az instance-ok leállítás v. valamilyen hiba miatt bekövetkezett leállás után elvesztik az adatokat. Olyan adatot nem szabad bennük tárolni, amikre hosszútávon szükség van. Több megoldás is létezik:

  • EBS (ld. később)
  • PersistentFS (ld. később)
  • Több instance clusterezése

Ha nem akarunk nagyon eltérni egy AMI-tól, akkor nem kell saját AMI-t készítenünk. Egyszerűen eltároljuk a parancsokat, amik a telepítéshez szükségesek és egy “user script” formájában minden induláskor lefuttatjuk.

Ez pl. az Ubuntu server esetében igen gyorsan lefut, mivel a frissítési és telepítési fájlok tükrözve vannak az amazon rendszerében. A “winchester” is nagyon gyors. Kb. 5x gyorsabb, mint egy “hagyományos” szerveré. Ennek a módszernek többek között az alábbi előnyei vannak:

  • nem kell tárolni az AMI-t, annak költsége nem terhel minket
  • a frissítésnél kiválaszthatok egy újabb kiindulási AMI-t, az userscript apróbb módosításával azzal is futni fog.
  • A script a legjobb rendszertelepítési dokumentáció lehet, ha ki van egészítve kommentekkel. Ez a módszer rákényszeríti a fejlesztőt a dokumentálásra :-)

Elastic IP

Az Amazon rendszerben pár kattintással lehet publikus és fix IP-t kérni, ami azonnal használható. Erre lehet aztán domain neveket irányítani. Az IP-k érdekessége, hogy amíg hozzá van rendelve egy instance-hoz, addig nem kell fizetni érte, csak a használaton kívüli IP címekért kérnek pénzt.

Adatok tárolási lehetőségei

Mivel az EC2 instance nem tárol semmit tartósan, újraindításkor minden adat elveszik. Erre többféle megoldás létezi:

  • lehet clusterezni, így duplikálva az instanceokat, csökkentve a kockázatot
  • amazon EBS (Elastic Block Storage): ez egy fájlrendszer, de drágább.
  • PersistentFS (Linuxra), S3FS, ElasticDrive
  • MySQL adatbázis tárolható az RDS szolgáltatásban

PersistentFS

Ez egy fájlrendszer, amivel lehet S3-ba tárolni fájlokat, úgy hogy a Linux rendszer normál fájlrendszerként lássa. Elvileg alklalmas MySQL adatfájlok tárolására is.

Honlap: http://www.persistentfs.com/.
Egy leírás, hogy miért olcsóbb a legtöbb esetben: http://developer.amazonwebservices.com/connect/thread.jspa?messageID=98719&tstart=0#98719.

A PersistentFS 2011-01-11-ig ingyenesen használható utána is használható lesz, amig nincsenek teljesen készen. Ha megjelenik a kereskedelmi változat, akkot kb. 5$ lesz havonta és fájlmennyiség alapján egyéb díjai is lesznek.

EBS

Ez az Amazon saját szolgáltatása.Jelenleg $0.10/GB. Az S3 $0.15/GB. Viszont az EBS teljes foglalására fizetni kell, függetlenül attól, hogy azt használjuk-e v. nem. Továbbá mentéseket (Snapshot) kell készíteni időközönként az S3-ba, mert ez nem annyira biztonságos tárolási módszer. Így ugyanazt az adatmennyiséget többszörösen fizetjük.

A virtuális meghajtó létrehozása és csatolása néhány kattintással, nagyon kényelmesen pár perc alatt elvégezhető.

A rendszeres adatmentések elvégezhetők kézzel a webfelületen, v. saját scripttel is. Szintén nagyon profi lehetőségeink vannak erre.

Szerintem a legtöbb feladatra ez a legegyszerűbb és leghatékonyabb megoldás.

S3FS

Olyan, mint a PersistentFS, csak szabad forrású. Igazából nem ajánlják adatbázisokra, csak biztonsági mentésekre.

ElasticDrive

Az elasticdrive többek között képes S3-ba is menteni. Ami az előnye a többivel szemben, hogy rendes block eszközként működik, vagyis formázható (EXT2/3/4, FAT32, NTFS…). Alkalmas adatbázisok tárolására.

RDS

Ez simán egy MySQL szolgáltatás az Amazonon belül. 0.11$/óra. Egyelőre jobb megoldásnak tűnik nekem, valamelyik fenti perzisztens tárolási forma+MySQL.


A cikknek készül a folytatása, amiben egy gyakorlati példát mutatok arra, hogyan lehet egy Ubuntu szervert scripttel létrehozni és kezelni (szerintem) leghatékonyabban…


Hozzászólások

Szóljon hozzá!

Szóljon hozzá elsőként!

RSS hírcsatorna a bejegyzéshez kapcsolódó hozzászólásokról.

Elnézést, de a bejegyzéshez egyelőre nem lehet hozzászólni.