Radeći kao MySQL Cluster inženjer često se srećem sa različitim interpretacijama značenja reči klaster. Imam jednog drugara koji već jedno godinu dana ne može da prihvati da „klaster“ nije „mnogo mašina koje se vide kao jedna“… to je nekada neko tako predstavio ovde na ovim našim Balkanskim prostorima i vrlo je teško osloboditi se te pogrešne postavke koju ljudi imaju onog trenutka kada čuju reč klaster.
Dakle, klaster nije „nekoliko računara koji se vide kao jedan“.
Šta je onda klaster?
Klaster: grupa istih ili sličnih elemenata grupisanih blizu jedni drugih – gomila.
To kaže rečnik, ako primenimo to na računarsku tehniku, klaster je skup umreženih računara koji rade zajedno na istom poslu.
Šta to sad u stvari znači, ja imam moj php server i moj rdbms server i oni rade na istom poslu (serviraju moj blog), jel to sad klaster – nije. Ali oni su grupa, i rade jedan posao? Gde je greška? Greška je u „jedan posao“, ne rade ga, oni zajedno prikazuju blog, ali rade dva posla, opsluzuju korisnike i generisu html sa jedne i cuvaju podake sa druge strane.
Drugi setup … imam 2 mysql servera u cirkularnoj replikaciji + web server – i opet, sve to zajedno servira moj blog – da li je to klaster? Da i ne :D … ona 2 servera u cirkularnoj replikaciji – to je klaster. Ta dva servera čine klaster mysql servera (obrati pažnju to nije proizvod MySQL Cluster – to je klaster mysql servera) i oni zajedno odradjuju posao čivanja podataka. Šta je još primer za klaster, load balancer + 2 web servera. Te tri mašine zajedno čine klaster… Dakle, nekoliko računara koji rade zajedno isti posao + poneki računar koji ih kontroliše (na primer onaj load balancer u drugom primeru) čine klaster.
Kakvi sve onda klasteri postoje? Realno – klaster je preširok pojam da bi imao neku kvalitetnu klasifikaciju ali možemo, ako malo zažmurimo na jedno oko, da ih podelimo na:
- HA klastere (high availability). To je klaster koji za cilj ima da pruži servis velike dostupnosti. Šta znači velika dostupnost, znači da sistem radi i da je otporan na kvarove, da se svo održavanje izvršava bez prekida servisa. HA klasteri u osnovi funkcionisu tako da su svi sistemi duplicirani i dok jedan sistem radi drugi je na čekanju te ako onaj prvi rikne, drugi vrlo brzo preuzima posao na sebe kako bi servis bio neprekinut (ili vrlo kratko prekinut). Osnovni primer HA klastera je set od 2 servera sa identicnim programima koji koriste npr deljeni disk, i ako prvi server crkne, drugi nastavlja da radi sa istim podacima sa kojima je radio prvi.
- HPC odnosno LB klastere (high performance computing / load balanced). To je klaster koji za cilj ima povećanje opterećenja koje sistem može da podnese. Uglavnom radi tako što ima load balancer (računar/aplikacija) koji razbacaju opterećenje po nekoliko istih servera. Tipičan primer bi bio load balancer + 2 http servera. Zahtevi za stranicama dolaze na load balancer a on ih prosledjuje na „slobodniju od dve mašine“ kako bi ona izgenerisala i vratila stranu korisniku.
- Računaljke (distributed computing). Ovde spadaju beowulf i kompanija. Ovi klasteri su sistemi koji teraju specifično dizajniran software koji omogućuje distribuirano računanje. Neke varijante vam daju API preko koga zadajete klasteru „zadatke“, drugi vam daju biblioteke sa kojima kompajlirate svoju aplikaciju kako bi ona umela da se izvršava na takvom klasteru i slično. Najjednostavniji primer ovde je SETI gde svako ko na svoj računar instalira SETI klijent postaje deo velike računaljke, kada se inicijalizuje klijent na vašem računaru kontaktira SETI centralni „management nod“, kaže ko je, šta je i traži da dobije neki svoj ID, potom traži zadatak. Kada izvrši zadatak (neko složeno računanje) on se javi nazad tom istom management nodu, kaže ja završio, evo rezultat, daj mi sledeći zadatak. Drugi primer je farma za 3d renderovanje, imate gomilu mašina sa Soft Image-om koji imaju klijent i čekaju na „zadatak“. Svi imaju pristup istim fajlovima koji čine projekat (preko network diska), i tamo neki operator u nekom management klijentu na jednom „master“ nodu zada ručno ili dozvoli samom management nodu da rasporedi posao te ovaj posalje komandu svim mašinama u farmi „rendaj ove frame-ove i snimi tamo“.
Ovo su neke najopštije grupe ali opet postoje razni preseci tako da je teško definisati tačno svaki scenario. Na primer ako imamo sistem:
masina1: MySQL
masina2: Apache+PHP
masina3: Apache+PHP
…
masina9: Apache+PHP
masina10: load balancer
to bi bio LB klaster. Šta će se desiti ako crknu mašine 5,6,7,8,9? Ništa strašno, klaster će da izgubi na performansama pošto će load balancer da shvati da tih mašina više nema i neće im slati „poslove“. Ali ako crkne mašina1 – ceo klaster pada u vodu, pošte svi ovi ostali serveri zavise od tog jednog da bi pravilno radili.
Zamislimo sada drugi scenario:
masina1: MySQL master
masina2: MySQL slave
masina3: Apache+PHP
masina4: Apache+PHP
masina5: load balancer
Mašina 1 i mašina 2 su u replikaciji, ako mašina1 rikne mašina2 se promoviše u mastera. Load balancer i dalje šalje upite i na 3 i na 4. Dakle ovo je sada i LB i HA klaster pošto imamo failover na database serveru i load balancing na apache-u. Na žalost ovde imamo „single point of failure“ a to je load balancer koji ako rikne klijenti ne mogu prići serveru, no to bi lako rešili tako što bi stavili dva load balancera i dodali oba u dns no to je priča za neki drugi put. Ovo možemo gledati i kao 2 klastera koji čine sistem (i to je realno pravilnije ali nije baš uobičajeno) gde prvi klaster (HA) čine 2 mysql servera a drugi 2 apache servera sa load balancerom.
Ono što je značajno za klastere je klaster management sistem koji svaki klaster mora da ima. U slučaju HA klastera, taj management sistem brine o failover-u kada jedan nod više nije u funkciji i raznim drugim problemima koji se javljaju u klaster okruženju. Na unix sistemu trenutno su Heartbeat/Pacemaker ekipa najpopularniji, tu su naravno i mnogi drugi, opet jedne gura RedHat, druge gura Novell .. izgleda podele nisu samo na Balkanu. Vezano za load balancing klastere, load balancera ima mnogo i obično su vezani za servis koji klaster treba da pruži.
Neki dan pisah o MySQL Cluster-u. Bitno je primetiti da je to proizvod koji u svom imenu ima reč klaster. MySQL Cluster uopšte ne mora da bude klaster – ceo može da sedi na jednoj jedinoj mašini. Dakle to je proizvod koji nudi high availability i high reliability i high performance ali je i dalje proizvod i različit je od „klasra mysql servera“, pošto MySQL ima više od jednog HA rešenja i svako može da se zove „klaster“.
ovako kontam klaster (vidm i da ne gresim): kao grozd :)
lepo si obajsnio, jos da si ubacio slicice bilo bi savrseno :D
kakve bre slicice? mogao sam da stavljam slike grozdja ili tako nekih bobica, ili nekog cveca ili jos gore slike rekova sa serverima … ne vidim da bi to bilo sta „pojasnilo“ .. ko ne razume tekst – slikovnica mu nece mnogo pomoci :( .. a sto se tice „vizualnog dela“ – ja se ponosim sto nisam dizajner :D
u DIA izaberes nekoliko kompova, pvoezes ih, das im nazive i sve je ljudima jasno (bez citanja :D ) :)
uradicu ja cim nadjem malo vremena
ma jok … nema potrebe, ko ne konta reci necu da mu crtam… :)
a slicice ce da idu uz jedan od sledecih postova (HA resenja sa mysql-om)