Fórumok
Szeretnék egy master-slave replikációt kialakítani, de olyat, hogyha szétesik a replikáció, akkor a master leállítása nélkül lehessen azt folytatni, újraépíteni.
Úgy tűnik itteni fórumbejegyzésekből és más és saját tapasztalatokból is, hogy a mysql erre nem képes.
Azonban, azt állítják, hogy a MariaDb a saját GTID kezelésével már képes erre.
Gyakorlati tapasztalatok érdekelnének olyanoktól, akik MariaDb master-slave replikációt használnak, GTID alapon, hogy ez valóban így van-e?
Alternatívaként érdekelne még olyan módszer is, ami egy megszakadt és nem folytatható replikációt helyretesz a master LOCK-ja nélkül, bár eddig én ilyen nem találtam sehol.
Hozzászólások
Bár megoldást nem nagyon tudok adni, de szeretnék kitekinteni a saját buborékomból, ezért érdeklődnék a körülményekről.
Mik azok az üzleti körülmények (cégméret, piac, IT csapat méret, satöbbi) vagy igények, amiért ezt megéri vagy szükséges házon belül reszelgetni menedzselt megoldás, például RDS Aurora helyett?
3 adatbázisnál biztosan megéri. 300-nál már nem látom ezt egyértelműnek. Amúgy egyelőre a technológia érdekel inkább. Fel vagyok rá készülve, hogy a MySql/MariaDb két szerveres környezetben nem tud ilyen megbízhatóságot nyújtani. De azért szeretnék utánajárni.
Elvi akadályát nem látom egy szinkronizációs programnak, ami megszakadt szinkron esetén helyreállítaná a szinkronitást. (Természetesen, ha a slave read-only módban van.)
Ha csak sima 2 node-os master-slave felallasrol van szo akkor GTID nem fog sokat javitani neked.
Helyreallitashoz nezd meg percona toolkitben pt-table-checksum es pt-table-sync -et, roviden azzal tudsz annyit csinalni hogy ellenorizni tablankenti szinkront, illetve ha szinkronizalni akarod akkor masteren meglevo adatokat replace-el bekuldi modositas nelkul es igy replace utasitas lejut slave-re hogy azon is ugyanaz az adat legyen. (Ehhez nem art slave-en arra az idore skip error-okat berakni hogy ne alljon meg, illetve elotte tabla strukturat kezzel szinkronizalni ha az is elterne.)
A pt-table-sync-et megtaláltam, de sajnos az is csak lock-olt táblánál képes szinkronizálni.
Amúgy a MySql és MariaDb GTID különbéségél ezt írják a MariaDb GTID-jérő:
Emiatt reménykedtem, hogy ez a replikáció megbízhatóbb, és ezért keresek erről gyakorlati tapasztalatot.
Mariadb tartozéka a Galera. Az ilyen. Leállítom a másik node-ot, ami akár szintén master és megy tovább ez, majd ha azt ismét elindítom akkor felkapcsolódik ide és átrántja a változást.
Egyedül a mindkettő egyidejű leállása okoz manuális indítási feladatot.
No meg ha emlékezetem nem csal, akkor a galera nem master - slave, hanem master - master replikációt végez, így váltáskor nincs olyan móka, hogy a slave-t master-ré kell előléptetni, a kiesett master-t meg slave-ként visszalptetni amikor már elérhető. Galera esetén csak node kilép, node belép van.
Nem fogalmaztam pontosan. Szétesés alatt nem azt értem, hogy az egyiket leállítom, és emiatt esik szét a replikáció. Mert innen a mysql is szokta tudni folytatni. A MySql-lel az a baj, hogy ha valamilyen kapcsolati probléma miatt megszakad a replikáció, akkor néha úgy szakad meg, hogy egyáltalán nem képes folytatni.
De jól hangzik, hogyha használod a Galerát, és még nem tapasztaltál ilyen folytathatatlan szakadást. Mindenképp megnézem, köszönöm!
Nekünk 3 node-os percona xtradb van, ami Galera megoldást használ. Ott ha kiesik 2 node, akkor is vígan elvan a harmadik, de sajnos ha visszajönnek a node-ok, sem az IST (incrementált) sem az SST (teljes) 'restore' sem hajlandó értelmesen (gyorsan, stabilan) helyreállni a node-okon, így inkább xtradb-vel húzzuk újra manuálisan a teljes instanceokat.
Néztem ezt a Galerát, de azt mondja, csak innodb-re képes. MyIsam táblákat ez sem tud kezelni.
Ez így van, de léteznek még myisam táblák? Milyen előnye van innodb-hez képest, amiért maradásra kell bírni?
Egy jut eszembe, lehet kompaktálni.
Előnyök, hátrányok, konverzió:
https://phoenixnap.com/kb/myisam-vs-innodb
vagy szintet lepsz ebbol az avitt sql vilagbol, es hasznalsz olyan rendszereket, amik kapasbol clusterezettek, mint pl. mongo. Kiesik egy node -> valasztas -> uj master, megy tovabb.
Ugyanigy az azure/aws megfelelo megoldasai is lehetnek elorelepesek. Ott nincs kieses, cserebe nem te futtatod a szervert, hanem csinalsz egy db-t. 300db eseten tul sokba kerulne, de miert is van 300db-d?
Amugy nem kerul tul sokba?
Egy valamire való aurora rds (16cpu, 128gb ram) árából kijön itthon egy jóval komolyabb server bérlet. Nyilván kell egy ember aki viszi a rendszert.
Ez hozzaallas kerdese. Gondozasmentes uzemeltetes penzbe kerul. Ha nincs hozza embered, eroforrasod ($1000/ho), akkor mashol koltod el a penzt.
Szoval akkor igen v. nem v. mivan?
Nem lehet, h gombhoz akarod igazitani a kabatot?
ahhoz a szoftvert is minimum újra kell gondolni. és ott is lesznek problémák, csak másmilyenek.
Gábriel Ákos
Fun fact: nem overkomplikalt adatmodell eseten (mint pl. egy microservice) sokkallta egyszerubb lesz az eleted. Egy dokumentumba befer szepen minden, nincsenek tranzakciok vagy lock-ok, egy roundtrip a beolvases, egy roundtrip a kiiras. Szep az elet.
percona xtradb (dropin mysql igazából) megoldja ezt neked, akár két nodedal is. slave elhal, visszajön, master működik tovább.
Azonban a Galera/xtradb megoldásoknál az online DDL/alter elég 'nehézkes':
https://www.percona.com/blog/2020/10/06/various-ways-to-perform-schema-…
Galera nem oldja meg két node-dal, páratlan számú kell a quorum miatt. Igaz, harmadiknak elég egy garbd is valahova.
Meg az nem is master-slave, hanem multi-master (azaz bármelyikre írhatsz). Bár jobb, ha csak egyet használsz írásra.