Novi google patch – globalni transakcioni id

N

Novi google patch koji ce biti prezentovan na MySQL korisnickoj konferenciji donosi „global transaction ID“
Ovaj patch omogucava dva nacina za lagan slave failover a maste-master failover moze biti kompletno automatizovan.
Slave failover je proces gde iz sistema uklanjamo master a server i novi server (najcesce neki koji je do tada bio slave) postavljamo za master. Ako je ovo planirana izmena onda ovo moze da se izvede sa jako malim prekidom u radu, ali ako je ovo ne planirana akcija – onda to uopste nije tako jednostavno. Slave cuva ime binlog fajla i poziciju sa masterovog binloga da bi znao dokle je stigao, kada novi server postane master ta informacija postaje „pogresna“ na svim slave serverima kojima se promenio master.

Par resenja:

  • switch & hope, izvrsi „CHANGE MASTER“ da promenis slave server na novi master. Transakcije su izgubljene na slave-u kada je bio iza novog mastera relativno na poziciju sa starog mastera. Slave ce imati extra transakcije ako je bio ispred novog mastera relativno na poziciju prema starom masteru.
  • check and lose, nemoj da izvrsis „CHANGE MASTER“ na slave serverima koji nisu prestali sa replikacijom sa starog mastera u istom trenutku kada i novi master. Ovi slave serveri moraju da se „naprave iz pocetka“
  • check and fix, Promovisi u mastera onaj slave koji ima najvise transakcija sa starog mastera i manualno izvrsi transakcije sa njega na ostale slave servere koji kasne

Nijedno od ovih resenja nije idealno i jedan od nacina da se to resi je implementacija global transaction id-a.

sa global transaction id-evima, svaki binlog event dobija „globalni id“ koji je 64bitni integer koji se inkrementira za svaku grupu binlog evenata i odrzava se prilikom failovera. Slave serveri cuvaju pored binlog fajla i ofseta i global id. Prilikom failover-a slave server moze da se konektuje na novi master koristeci global id – ovo ne zahteva manualni rad i resava jedan od problema.

Slave serveri koje zelimo da u buducnosti potencijalno promovisemo u mastere treba da trce sa „log-slave-updates“ opcijom kako bi cuvali binlog evente primljene sa mastera u svom binlog-u. Ovi eventi su sacuvani zajedno sa global id-om sa mastera. Ako se desi master failover, novi master ima binlog evente sa starog mastera sa global id-om sa starog mastera. Samim tim slave server koji kasni moze da se okaci na novi master i pokupi evente koji nije stigao da pokupi. Ovo resava i drugi problem.

Konacno, bekap napravljen sa starog mastera moze biti vracen koristenjem novog mastera ako bekap ukljucuje i globalni id starog mastera. SHOW MASTER STATUS je promenjen da prikazuje i tu informaciju.

O autoru

Bogdan Kecman

Dodaj komentar

Ključne Reči

Kategorije

Blog