Sziasztok!
Az lenne a feladat, hogy kettő különböző szerveren a MySQL adatbázisok ugyanúgy nézzenek ki.
Ugyanazok az adatbázisok, ugyanolyan adatokkal, ugyanolyan felhasználói nevekkel.
Az egyik gép az éles szerver, a másik meg lesz a 'pót'.
Most eddig eljutottam, de persze lehet, hogy rossz úton járok:
Az éles gépen megvannak külön fájlokban az sql fájlok, de megvan egy nagyban is, mert minden este megcsinálja automatikusan.
A 'pót' szerverre lehúzom a . gz fájlokat, csak az a kérdés, hogy milyen scripttel? parancssorral? töltsem vissza?
Ti mit javasoltok erre a feladatra?
- 77021 megtekintés
Hozzászólások
A replikáció nem járható út?
Fuszenecker_Róbert
- A hozzászóláshoz be kell jelentkezni
+1, amit te szeretnél, azt replikációnak hívják.
- A hozzászóláshoz be kell jelentkezni
legjobb erre a galera http://codership.com/content/using-galera-cluster
van mariadb-ből https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/
- A hozzászóláshoz be kell jelentkezni
Köszönöm szépen a tippeket.
Lesz mit átnéznem.... Remélem, hogy sikerülni fog!
- A hozzászóláshoz be kell jelentkezni
Ha egyfajta failover megoldásként szeretnéd ezt használni, akkor javaslom, használj DRBD-t a két szerver között (feltéve, hogy gyors hálózati kapcsolat van köztük, a legjobb, ha direktben össze vannak drótozva gigabites kapcsolattal).
A DRBD-n létrehozol egy ext3 vagy ext4 fájlrendszert, majd erre (a mysql leállítását követően) átpakolod a /var/lib/mysql könyvtárat, utána az eredeti helyről symlinkelsz a DRBD-s elérésre.
Ha érdekel, tudok küldeni egy általam készített részletes step-by-step leírást a folyamatról.
Előnyök:
* nem igényel extra konfigurálást a MySQL-ben (bár egyáltalán nem körülményes egy active-passive replikációt beállítani)
* mivel a DRBD szinkron módon működik, mindig a legfrissebb adatok lesznek elérhetők mindkét szerveren
* pillanatok alatt át lehet állni a tartalék szerverre (DRBD-t felcsatolod és elindítod a mysql-t)
* heartbeat/pacemaker segítségével automatizálható az átállás az éles szerver leállása esetén
Hátrányok:
* ha nincs direkt kapcsolat a két szerver közt (pl. csak neten keresztül látják egymást), akkor lelassíthatja a MySQL működését
* nincs loadbalance lehetőség (mindig csak az egyik szerver futhat, nincs lehetőség a tartalék szervert read-only műveletek kiszolgálására használni, mint a sima master-slave replikációnál)
* ha a szerverek elvesztik a kapcsolatot egymással, split-brain állapot alakulhat ki, de ez redundáns hálózattal (pl. 2 cross kábel használata trönkben) orvosolható
* a konfigurálásnak van néhány buktatója, amire oda kell figyelni (pl. azonos UID/GID használata a két szerveren a mysql futtatásához)
Nemrégiben egy 2 szerveres failover környezetben csináltam ilyet, ahol mivel csak 2 node van, nem lehetett rendes cluster-t építeni. Egyelőre úgy tűnik, jól bevált, és praktikusabb mint a master-slave replikáció.
- A hozzászóláshoz be kell jelentkezni
Miert praktikusab?
tompos
- A hozzászóláshoz be kell jelentkezni
Nekem például emiatt:
* mivel a DRBD szinkron módon működik, mindig a legfrissebb adatok lesznek elérhetők mindkét szerveren
Mikor körbejártam a témát, az első opció a master-slave replikáció volt, de mégsem tetszett benne, hogy inkonzisztencia lehet az adatokban a replikáció aszinkron volta miatt.
- A hozzászóláshoz be kell jelentkezni
Igen, de nem mind1, a replikacioban marad le v. a block szintu szinkronizacioban vagja el magat?
Amugy vmi olyasmi remlik h. vagy a mysql 5.6-ban vagy a maradb-ben mar javitottak a helyzeten.
tompos
- A hozzászóláshoz be kell jelentkezni
Könnyen lehet, hogy igazad van, valójában nem használtam még élesben mysql replikációt, csak elolvastam a doksiját, illetve tesztkörnyezetben beállítottam, a mariadb-t pedig csak nevében ismerem.
- A hozzászóláshoz be kell jelentkezni
Plusz hatrany:
A table corruption gyonyoru szepen atreplikalodik, amig a MySQL replikacioval statement-based replicationnel meguszhato.
- A hozzászóláshoz be kell jelentkezni
Az ellen nem véd. A table corruption ellen egyedül a szünetmentes táp és a RAID-vezérlőbe épített battery backed-up gyorsítótár védhet meg. :)
- A hozzászóláshoz be kell jelentkezni
Vagy az alkalmazásszintű tranzakciós log (.txt-ben) :D
- A hozzászóláshoz be kell jelentkezni
Plusz hátrány 2:
A szinkron replikálás növeli az adatbázis műveletek késleltetését. Minél messzebb van egymástól hálózatilag a két gép (lassabb net), annál durvább lesz ez a jelenség.
Az általam látott, valamirevaló rendszerek jelentős részében az adatbázis i/o teljesítménye a "leggyengébb láncszem", és már replikálás nélkül is a teljesítményre vinnyog az ügyfél.
- A hozzászóláshoz be kell jelentkezni
Igazad van, de ezt én is megemlítettem az eredeti posztomban:
* ha nincs direkt kapcsolat a két szerver közt (pl. csak neten keresztül látják egymást), akkor lelassíthatja a MySQL működését
Az általam konfigolt kétszerveres környezetben nem a teljesítmény növelése vagy az ötkilences rendelkezésre állás volt a cél, hanem hogy egy viszonylag megbízható failover megoldást ki tudjak hozni az ügyfél által kifizetett 2 szerverből (korábban egy négyszerveres MySQL Cluster üzemelt itt). Sajnos jelen esetben a pénz beszélt, nem a technológia. :(
- A hozzászóláshoz be kell jelentkezni
Akkor kijavítom pontosabban:
Akár direkt kapcsolat van a két szerver között, akár nem, biztosan lelassítja a Mysql működését. Hogy mennyire, az függ a hálózati késleltetéstől. De alsó hangon minimum a duplájára nő a dupla diszkvárakozás miatt. Ha a hálózat nagyon lassú, esetleg csomagok vesznek el, akkor látványos (akár másodperces!) is tud ez lenni.
Pontosan ismert tény, hogy szinte minden ügyfél szarból akar várat építeni :D
- A hozzászóláshoz be kell jelentkezni
"mivel a DRBD szinkron módon működik, mindig a legfrissebb adatok lesznek elérhetők mindkét szerveren"
A replikacio 3 lepesben tortenik:
1, master szerver irja binlog-ba az iras muveletet (pl: 'insert into kutyafule (a,b) values (1,2)' utasitas) ami vegrehajtott
2, slave szerver masolja magahoz binlog file-ok tartalmat szinten csak local file-ba
3, slave szerver az atmasolt file-okbol vegrehajtja az irasmuveleteket
Ebbol a harmadik lehet lassu igazabol (bar 5.6-ban mar van paralell replika betoltes, de csak kulonbozo adatbazisokkal, de ez is csak erosen iras intenziv kornyezetben szamit).
Elso megtortenik azonnal, masodik pedig hacsak nincs 10M-s linkkel osszekotve vagy nagyon lassu diszken tarolva a binlog szinten lenyegeben azonnal, vagyis ha meg is all a master szerver kb annyi adatvesztes lehet mint magabol a megallasbol hogy utolso muveletek ki tudja befejezodtek-e vagy hogyan.
"pillanatok alatt át lehet állni a tartalék szerverre (DRBD-t felcsatolod és elindítod a mysql-t)"
Ezzel majd akkor lesz gondod ha innodb-ben tarolsz tobb adatot, ami miatt maga az sql szerver leallitasa/elindiitasa lassu, foleg ha nem sikeres a leallitas, mert akkor redo logokbol kell helyreallitani amig te malmozhatsz.
"heartbeat/pacemaker segítségével automatizálható az átállás az éles szerver leállása esetén"
Master-slave replikabol is konnyen lehet csinalni master-master replikat akar, amihez szinten lehet heartbeat/pacemaker resource kezelest beallitani, hogy ip-t atbillentse replika figyelessel (percona is ajanl ilyet ha jol tudom mmm helyett, bar egyszerubb helyekre mmm is eleg lehet)
Ha esetleg szethullik a replika, mert peldaul elfogyott a hely es nem tudta kiirni binlogot vagy valami akkor nem fogja automatan kijavitani de vannak ra tool-ok amivel lehet ellenorizni es javitani akar hasznalat kozben is, illetve par dolgot be kell allitani hozza valoban mysql-ben, de nem nehezebb mint drdb-t osszerakni jol mysql ala.
- A hozzászóláshoz be kell jelentkezni
Köszi a lenyűgözően részletes választ. :)
A master-slave replikációval kapcsolatban köszi az infókat, én azt tapasztaltam a tesztnél, hogy kellett pár másodperc, amíg a slave-en megjelentek a master-en módosult adatok, persze lehet, hogy csak a konfig nem volt tökéletes. Nyilván nem egetrengető probléma ez a néhány másodpeces késlekedés, de számomra valahogy szimpatikusabb volt a DRBD működése, ahol gyakorlatilag csak az az adat létezik, amelyik mindkét szerveren le van tárolva.
InnoDB-t nem használunk, úgyhogy a mysql indítása közben (hacsak nincsenek sérült táblák) nem lehet fennakadás. Ettől függetlenül természetesen jogos, amit írsz.
Szempont volt az is, hogy ne legyen "gányolásos" a megoldás, illetve a "keep it simple, stupid" elvet követve minél egyszerűbb legyen. Nem akartam saját szkripteket írogatva megoldani, amik éles helyzetben vagy lefutnak úgy, ahogy kéne, vagy nem.
- A hozzászóláshoz be kell jelentkezni
Igen. "failover" megoldásként szeretnék egy másik szerver. Ha valami tönkre megy az éles gépben, akkor beslattyogok a 'pót' szerverrel, s a hiba kijavításáig ez üzemelne. Persze a legutolsó mentési adatokkal.
Addig már eljutottunk az egyik ismerősömmel, hogy a 'pót' gépen már - majdnem - ugyanaz a rendszer van. (debian, squirrelmail, ispconfig). S most jönne az adatok áthúzása és beállítása. Ennek az egyik lépése a MySQL adatok áthúzása.
Egyébként nem 'online' adatkapcsolat lenne a két gép közt, hanem naponta 1-szer történne az adatok replikációja.
- A hozzászóláshoz be kell jelentkezni
Ezt az apróságot mondjuk említhetted volna a topic indító hozzászólásban is. Úgy valószínűleg leginkább mysqldump és mysql parancsok érkeztek volna válaszul.
- A hozzászóláshoz be kell jelentkezni
Ilyenkor (is) jó ötlet virtualizálni, így el lehet kerülni a "jajj, milyen csomagok vannak fent a másik gépen" mókát, szimplán át kell rsyncelni az éles gépet, gépeket és jónapot kívánok. A napi egyszer mentésre meg tényleg van pár lehetőség.
- A hozzászóláshoz be kell jelentkezni
sub
--
PtY - www.onlinedemo.hu
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni