Az előadás célja, röviden bemutatni egy saját fejlesztésű megoldást arról, hogyan végezzük a táblák alterelését online, a világ egyik legnagyobb mysql clusterén.
dolgozom (MySQL Infrastructure Operations Engineering) ▪ Minden adat, aminek perzisztensnek kell lennie ▪ Petabyte méretű adattárház ▪ Több ezer instance amire 60m+ lekérdezés jut másodpercenként ▪ 10 fős csapat, ezért főleg fejlesztéssel foglalkozunk
kézzel (tool-ok) ▪ Borzalmasan sok idő ▪ Rengeteg a hibalehetőség ▪ A gépek gyakran cserélődnek, a hostname irreleváns ▪ Nehéz jegyezni hol készült el, az ellenőrzés költséges ▪ Leggyengébb láncszem problémája (slave/master, egy tábla egy időben) ▪ Az egyszerű és gyors alter 2hét volt (inkább 3 hónap)
Instance aktuális állapotának tárolása ▪ Helyi státuszok összegyűjtése ▪ Alter management ▪ Helyi állapotok összegyűjtése ▪ Queue összeállítása ▪ Alter elindítása
MySQL: - allowed_alters - current_alters - finished_alters ▪ Allowed_alters az egyetlen tábla amihez ember/alkalmazás kivülről hozzányúlhat ▪ A gépek cserélődése miatt, minimum 3x24 óráig várunk ha a gépeket konzisztensnek ítéltük ▪ A harmadik probálkozás után, az aosc_brain ellenőrzi, hogy valóban mind rendben van-e ellenorzes aosc_checksu m CREATE TABLE `current_alters` ( `group`, `table_name`, `status` enum('DONE','IPR','HOLD’), `priority`, `server_list` enum('default','custom’) )) ENGINE=InnoDB DEFAULT CHARSET=latin1 (‘udb', ‘tabla1’, ‘IPR', 10, 'default');
MySQL: - allowed_alters - current_alters - finished_alters - alter_udb_tabla1 aosc_checksu m aosc_collector (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); pmysql CREATE TABLE `alter_udb_tabla1`( `host`, `port`, )) ENGINE=InnoDB DEFAULT CHARSET=latin1 (‘udbxx.snc’, 3306); ▪ A collector hozza létre az alter_$tier_$table táblát ▪ Amennyiben nem talál inkonzisztens instance-ot, kezeli a finished_alters táblát is ▪ A server lista, a csoport neve alapján egy központi rendszerünkből jön ▪ Pmysql > paralell mysql query 1. 2. 3. 4.
aosc_brain aosc_db MySQL: - allowed_alters - current_alters - finished_alters - alter_db_tabla1 - running_alters aosc_checksu m aosc_collector aosc_scheduler Queue paraméterek (‘udbxxsnc’, 3306); gépek táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); ▪ Figyelembe veszi a tier/csoport egyéni tulajdonságait (pl maximális alterek száma) ▪ Host/instance alapú teljesítmény elosztás ▪ Queue karbantartás ▪ Datacenter alapján elosztja a terhelést ▪ Figyelembe veszi a prioritást ▪ Replikaciós sorrendet kezel (master/slave) ▪ súlyozást is támogatja
- aosc_osc_ww aosc_brain aosc_db MySQL: - allowed_alters - current_alters - finished_alters - alter_udb_tabla1 - running_alters aosc_checksu m aosc_collector aosc_scheduler (‘udbxx.snc’, 3306); gépek táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); ▪ Ellenőrzi a queue státuszokat ▪ Nem várunk-e túl régóta az alter indítására ▪ Nem fut-e túl régóta ▪ Létezik-e egyáltalán még az instance ▪ Ha egy instance-ot elvesztünk, nem törődünk vele, töröljük aosc_osc_ww