[BSD] Failover cluster dinamikus adatokkal dolgozo webserverhez
Attila Nagy
bra at fsn.hu
2005. Ápr. 25., H, 13:50:19 CEST
Feczak Szabolcs wrote:
> Ok ez a level mar megjarta a freebsd-questions@ es a freebsd-hackers@
> listakat, ugyhogy elkeseredesemben, hogy senki nem valaszol ide is
> elkuldom.
Te notórius cross poster spammer :)
> A feladat: ket gep cluster-be allitasa oly modon, hogy
> a ketto kozul barmely kiesik a masik viszonylag zavartalanul
> folytassa a keresek kiszolgalasat. A webszerver Apache,
> a programok php-ben irodtak az adatbazisszerver Postgresql.
> Nem feladat a 100%-os rendelkezesreallas hajszolasa, csupan
> annyi, hogy automatikusan detektalva legyen a hiba es
> a meg jol mukodo fel atvegye a feladatokat, "kozel" (kis - ~1 perc -
> szinkronkulonbseg megengedett) abban az allapotban ahol a masik megallt.
Egyszerű kérdés, számos megközelítés ismert :)
> Olvastam a hup-on a CARP-rol, 5.4-ben mar lesz is, de ahogy a
> hozzaszolasokat olvastam a cikk alatt rajottem, hogy nem is biztos
> erre van nekem szuksegem. Ahogy irtak ez csak arra garancia, hogy
> TCP szinten rendbe van-e a dolog, de ha valami alkalmazas szinten
> hasal el, akkor nem fogjak latni a weblapot. Igy a TCP SYN-re
> adott valasz nem kielegito, sokkal inkabb a szolgaltatas ellenorzesere
> iranyulo "pingek" HTTP GET, SQL SELECT ... Ahogy olvastam erre
> a DNS-LB megoldas lehet ...
A DNS alapú failover és load balancer a legtöbb esetben problémás, főleg
a webszerverek esetében, mivel a browserek nagy ívben tesznek a DNS
rekord TTL-jére, így ha megváltozik a rekord, a régi szervert fogják
lekérdezni.
A failover és load balancingra valamilyen hardveres eszközt szokás
betenni (vagy minimum két PC-t), némelyik hosting szolgáltató tud is
neked ilyet adni.
Ezzel biztosított, hogy terheléskiegyenlítés és alkalmazás szintű
(legalábbis az elterjedtebb protokollokra: ftp, smtp, pop, http, stb)
failover legyen.
Értelemszerűen megoldhatod te is, de ahhoz kell még legalább két gép (ha
csak nem magukkal a szerverekkel csinálod a failovert és a load
balancingot).
> A filerendszer adatteruletenek szinkronizalasara
> elso otletem az volt, hogy GEOM-al keszitek egy felemas tukrot,
> azert felemas mert egyik fele lokalis, masik fele nfs. Mint
> kiderult lehet is ilyet csinalni geom_mirror + geom_gate-val,
> de sajnos a szinkron egyiranyu lesz, es olyan "layer"-t senki
> nem tudott ajanlani, amit ket gep meg tud valositani es
> azt elerve mindket gepben levo tarolon parhuzamosan megtortennek
> az iras muveletek, az olvasas lehet csak egyikrol is.
Tipikusan erre valók a clustering fájlrendszerek. Linuxhoz pld. opengfs,
lustre, intermezzo használható ilyen célra.
Másik lehetőség, hogy csinálsz RAID-et, de egyszerre csak egy gépen
húzod fel és ha az meghal, felmountolod és elindítod az alkalmazásokat a
másikon. Ez kicsit macerásabb és sokkal több a hibalehetőség, mint az
elsőnél.
> Tulajdonkeppen nem akkora problema ez, hogy egyiranyu a szinkron,
> csak a master kiesese es visszaallitasa utan esetleg kezzel kell
> szinkronizalni. Bar igazabol nem ertem, mivel tudomasom szerint egy
> szamlalo erteke alapjan dol el, hogy melyik komponens a frissebb,
> es a magasabb ertekkel rendelkezohoz szinkronizalja a masik osszetevot.
A gmirrorra gondolsz? Ott nem ez a gond, hanem az, hogy az UFS-t
egyidejű írásra, olvasásra tervezték.
Emiatt már az sem működik, hogy egy RW felmountolt fájlrendszert egy
másik gépen RO csatolj fel, mert bizonyos metaadatokat a gép memóriában
tarthat, becache-elhet és ennek a cache-nek a működésére nincs ráhatása
a másik (RW-s) gépnek.
Csak RO mountolt UFS, csak ez nem hiszem, hogy megoldás neked :)
Egyirányú szinkront csinálhatsz cvsup-pal, rsync-kel, stb, stb.
> Az adatbazist Slony-val probaljuk szinkronban tartani, sajnos
> nem sok szerencsevel jartunk eddig. A Slony listara meg is irtuk,
> hogy minden jonak tunik, kommunikal is a ket node, de megsem
> tortenek update eseten valtozas a masikon. Sajnos onnan sem jott valasz
> par napja ...
Postgres esetében meg lehet még próbálkozni a pgreplicatorral is.
Ha tényleg fontos az adatbázis és pénzed is van rá, használhatsz Linuxot
és azon Oraclet OCFS-sel. Sajnos ilyen, ezzel egyenértékű, vagy akár azt
megközelítő megoldásról nem tudok OS adatbáziskezelők tekintetében.
> Ha a fenti harom dolog osszeallna: dns-lb-vel a hibadetektalas es
> valtas, kozos fajlrendszer geom local+nfs, adatbazis szinkron slony-val,
> tulajdonkeppen mukodhetne is a dolog, de sajnos semmi tapasztalatom
> nincs ezekkel, igy elegge akadozva haladnak a dolgok, valamint
> fogalmam sincs mennyire fog ez mukodni, veszelyezteti-e az adatok
> konzisztenciajat ... es ha igen milyen mertekben (a kieseskor
> elveszett nehany rekord elvesztese toleralhato, ha az adatbazis
> teljes egeszeben ep marad es a tovabbi uj rekordok rogzulnek).
Minél "fejlebb" mész a failoverbe, annál több hiba lehet. Blokkszinten
(cluster FS) a konzisztencia kevésbé probléma, alkalmazás szinten
(rsync, hasonlók), már annál inkább.
> Tudom a jo megoldas az lenne ha venne egy HA hardware switchet, vagy
> berelne ket portot, de ez momentan nem fer bele a koltsegvetesbe,
> viszont azt sem szeretnem, ha ugy menjek pihenni/szorakozni hogy tiszta
> para barmikor jon egy SMS mehetek dolgozni, vagy rosszabb esetben
> utazhatok Budapestre szervert buheralni. A cel tehat hogy a hiba
> at legyen hidalva, jojjon ertesites, aztan megoldom amint tudom hogy
> visszalljon a normal allapot.
Magát az LB-t és a failovert az "Internet felől" szerintem bízd a
szolgáltatóra, keress olyat, akinek van ilyen szolgáltatása.
A gépek esetében használhatsz közös diszkdobozt, Linuxszal és valamilyen
CFS-sel, de itt a DB replikációt és failovert még mindig meg kell
oldanod (a Postgres és a Mysql sem támogatja a CFS-eket, legjobb
tudomásom szerint).
Alternatív megoldásként vehetsz egy fájlszerver appliancet, amelyet
NFS-sel érsz el, vagy ugyanezt a funkcionalitást megoldod saját NFS
szerverrel és megpróbálod azt minél megbízhatóbbá tenni. Appliance
esetében később lesz lehetőséged failoverre (megfelelő doboz esetében),
saját NFS szerver esetében kevésbé (bár ott is bejátszik a CFS, de akkor
már csinálhatnád a frontendeken is).
--
Attila Nagy e-mail: Attila.Nagy at fsn.hu
Adopt a directory on our free software phone @work: +361 371 3536
server! http://www.fsn.hu/?f=brick cell.: +3630 306 6758
További információk a(z) BSD levelezőlistáról