Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Table alter at scale Aosc története István Pödör MySQL Ops. Eng. Oct, 20. 2012.

Hasonló előadás


Az előadások a következő témára: "Table alter at scale Aosc története István Pödör MySQL Ops. Eng. Oct, 20. 2012."— Előadás másolata:

1

2 Table alter at scale Aosc története István Pödör MySQL Ops. Eng. Oct, 20. 2012

3 1 Alapok 2 Rendszerek felépítése és a problémák 3 Manuális megoldások és a múlt 4 Automatizált megoldás 5 Q&A Agenda

4 Db ops team ▪ A csapat amiben én magam is dolgozom (MySQL Infrastructure Operations Engineering) ▪ Minden adat, aminek perzisztensnek kell lennie (1milliárd aktív felhasználóhoz) ▪ Petabyte méretű adattárház ▪ Több ezer instance amire 60m+ lekérdezés jut másodpercenként ▪ 8(+2+3(perf/eng)) fős csapat, ezért főleg fejlesztéssel foglalkozunk

5 Alapok ▪ Kérdezz! (jobb egy érdekes beszélgetes, mint egy unalmas előadás) ▪ Minden külön gép > host ▪ Minden futó mysql egy host-ton > instance ▪ Shard vagy dbid, replikáció lánc (gépcsoport) ▪ Tier egy gépcsoportokat összefogó lista (pl dbid, dbname, services/instances)

6 OnlineSchemaChange (OSC) ▪ Downtime nem elfogadható és a masterek váltása nem elég biztonságosan automatizálható, túl drága ▪ Kellett egy online megoldás (OSC) ▪ Új tábla az új schema-val ▪ Triggerek létrehozása ▪ Adatok átemelése ▪ Kicserélni a régit az újjal

7 Megoldás és a problémák ▪ Futtatni minden gépen és db-n 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 (és nem teljesen megbízható) ▪ Leggyengébb láncszem problémája (slave/master, egy tábla egy időben) ▪ Az egyszerű és gyors alter 2hét volt (sok instance)

8 Fejlesztők manual-OSC dba Manuálisan

9 A szükség ▪ Alter automatikusan, ember nélkül ▪ Maximális kihasználtság ▪ szabályozhatóan, concurrency, prioritás ▪ Failsafe működés ▪ Nyomonkövethető, bármikor szüneteltethető, leállítható ▪ _automatikusan_

10 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens tábla szerkezetek ▪ 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

11 Mielőtt elkezdjük… ▪ Végigmegyünk egy példán ▪ Kérdezz, vitatkozz bátran! ▪ jobb egy érdekes beszélgetes, mint egy unalmas előadás…

12 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens tábla szerkezetek tárolása (svn) ▪ Aktuális állapotok tárolása (mysql, local/central) ▪ Helyi státuszok elkészítése (aosc_cheksum) ▪ Alter management (aosc_brain) ▪ Helyi állapotok összegyűjtése (aosc_collector) ▪ Queue összeállítása (aosc_scheduler) ▪ Alter elindítása (aosc_osc_ww)

13 CREATE TABLE `tabla1` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 (minden gepen van checkout) svn - tier/tabla1 Schema tárolás

14 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens tábla szerkezetek tárolása (svn) ▪ Aktuális állapotok tárolása (mysql, local/central) ▪ Helyi státuszok elkészítése (aosc_cheksum) ▪ Alter management (aosc_brain) ▪ Helyi állapotok összegyűjtése (aosc_collector) ▪ Queue összeállítása (aosc_scheduler) ▪ Alter elindítása (aosc_osc_ww)

15 svn - tier/tabla1 checksum udbxx.snc:3306 MySQL tábla: aosc_local_status CREATE TABLE `aosc_local_status` ( `host`, `port` int(4), `database`, `table_name`, `hash_current`, `hash_desired`, `status` enum('OK','NA','INC’), `last_run` timestamp) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 aosc_checksu m (osc segítségével) kivánt schema

16 svn - tier/tabla1 udbxx.snc:3306 MySQL tábla: aosc_local_status CREATE TABLE `aosc_local_status` ( `host`, `port` int(4), `database`, `table_name`, `hash_current`, `hash_desired`, `status` enum('OK','NA','INC’), `last_run` timestamp) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 udbxx.snc:3306 -dbid1.tabla1 -dbid2.tabla1 -dbid3.tabla1 aosc_checksu m (osc segítségével) udbxx.snc | 3306 | dbid1 | tabla1 | abcd | efgh | INC udbxx.snc | 3306 | dbid2 | tabla1 | efgh | efgh | OK udbxx.snc | 3306 | dbid3 | tabla1 | NULL| efgh | NA kivánt schema összehasonlítá s checksum

17 svn - tier/tabla1 udbxx.snc:3306 MySQL tábla: aosc_local_status CREATE TABLE `aosc_local_status` ( `host`, `port` int(4), `database`, `table_name`, `hash_current`, `hash_desired`, `status` enum('OK','NA','INC’), `last_run` timestamp) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 udbxx.snc:3306 -dbid1.tabla1 -dbid2.tabla1 -dbid3.tabla1 aosc_checksu m (osc segítségével) udbxx.snc | 3306 | dbid1 | tabla1 | abcd | efgh | INC udbxx.snc | 3306 | dbid2 | tabla1 | efgh | efgh | OK udbxx.snc | 3306 | dbid3 | tabla1 | NULL| efgh | NA kivánt schema összehasonlítá s tárolás checksum

18 svn - tier/tabla1 udbxx.snc:3306 MySQL tábla: aosc_local_status CREATE TABLE `aosc_local_status` ( `host`, `port` int(4), `database`, `table_name`, `hash_current`, `hash_desired`, `status` enum('OK','NA','INC’), `last_run` timestamp) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 udbxx.snc:3306 -dbid1.tabla1 -dbid2.tabla1 -dbid3.tabla1 aosc_checksu m (osc sefítségével) udbxx.snc | 3306 | dbid1 | tabla1 | abcd | efgh | INC udbxx.snc | 3306 | dbid2 | tabla1 | efgh | efgh | OK udbxx.snc | 3306 | dbid3 | tabla1 | NULL| efgh | NA 1. kivánt schema 2. összehasonlítás 3. tárolás ▪ osc_wrapper.php –dry_run opcióval ▪ checksum md5() function-nel php-ból ▪ Lekérdezés 1 query-vel (select database from aosc_local_status where table_name = ‘tabla1’ and status <> ‘OK’) checksum

19 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens tábla szerkezetek tárolása (svn) ▪ Aktuális állapotok tárolása (mysql, local/central) ▪ Helyi státuszok elkészítése (aosc_cheksum) ▪ Alter management (aosc_brain) ▪ Helyi állapotok összegyűjtése (aosc_collector) ▪ Queue összeállítása (aosc_scheduler) ▪ Alter elindítása (aosc_osc_ww)

20 svn - tier/tabla1 brain udbxx.snc:3306 MySQL: aosc_local_status aosc_db MySQL: -allowed_alters -current_alters dba CREATE TABLE `allowed_alters` ( `group`, `table_name`, `allowed_by`, `allowed_at`, `priority`, `server_list` enum('default','custom’), ) ENGINE=InnoDB DEFAULT CHARSET=latin1 insert into allowed_to_alter values (‘udb', ‘tabla1’, 'istvan', NULL, 10, 'default');

21 svn - tier/tabla1 brain udbxx.snc:3306 MySQL: aosc_local_status aosc_brain aosc_db MySQL: -allowed_alters -current_alters -finished_alters CREATE TABLE `allowed_alters` ( `group`, `table_name`, `allowed_by`, `allowed_at`, `priority`, `server_list` enum('default','custom’) )) ENGINE=InnoDB DEFAULT CHARSET=latin1 (‘udb', ‘tabla1’, 'istvan', NULL, 10, 'default'); CREATE TABLE `finished_alters` ( `group`, `table_name`, `finished_at`, `tries` )) ENGINE=InnoDB DEFAULT CHARSET=latin1 ?

22 svn - tier/tabla1 brain udbxx.snc:3306 MySQL: aosc_local_status aosc_brain aosc_db MySQL: -allowed_alters -current_alters -finished_alters CREATE TABLE `allowed_alters` ( `group`, `table_name`, `allowed_by`, `allowed_at`, `priority`, `server_list` enum('default','custom’) )) ENGINE=InnoDB DEFAULT CHARSET=latin1 (‘udb', ‘tabla1’, 'istvan', NULL, 10, 'default'); 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'); CREATE TABLE `finished_alters` ( `group`, `table_name`, `finished_at`, `tries` )) ENGINE=InnoDB DEFAULT CHARSET=latin1 ? – 3x24h sleep 1. 2. 3.

23 svn - tier/tabla1 brain udbxx.snc:3306 MySQL: - aosc_local_status aosc_brain aosc_db 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');

24 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens tábla szerkezetek (svn) ▪ Aktuális állapot tárolása (mysql, local/central) ▪ Helyi státuszok összegyűjtése (aosc_cheksum) ▪ Alter management (aosc_brain) ▪ Helyi állapotok begyűjtése (aosc_collector) ▪ Queue összeállítása (aosc_scheduler) ▪ Alter elindítása (aosc_osc_ww)

25 svn - tier/tabla1 collector udbxx.snc:3306 MySQL: - aosc_local_status aosc_brain aosc_db MySQL: -allowed_alters -current_alters -finished_alters - alter_udb_tabla1 aosc_checksu m aosc_collector (‘udb', ‘tabla1’, ‘IPR', 10, 'default');

26 svn - tier/tabla1 collector udbxx.snc:3306 MySQL: - aosc_local_status aosc_brain aosc_db MySQL: -allowed_alters -current_alters -finished_alters - alter_udb_tabla1 aosc_checksu m aosc_collector (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); CREATE TABLE `alter_udb_tabla1`( `host`, `port`, )) ENGINE=InnoDB DEFAULT CHARSET=latin1

27 svn - tier/tabla1 collector udbxx.snc:3306 MySQL: - aosc_local_status aosc_brain aosc_db 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);

28 svn - tier/tabla1 collector udbxx.snc:3306 MySQL: - aosc_local_status aosc_brain aosc_db 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.

29 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens tábla szerkezetek (svn) ▪ Aktuális állapot tárolása (mysql, local/central) ▪ Helyi státuszok összegyűjtése (aosc_cheksum) ▪ Alter management (aosc_brain) ▪ Helyi állapotok begyűjtése (aosc_collector) ▪ Queue összeállítása (aosc_scheduler) ▪ Alter elindítása (aosc_osc_ww)

30 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww 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 (‘udbxx.snc’, 3306); gépek táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default');

31 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww 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) ▪ (hamarosan) súlyozást is támogatja

32 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww aosc_brain aosc_db MySQL: -allowed_alters -current_alters -finished_alters -alter_db_tabla1 -running_alters aosc_checksu m aosc_collector aosc_scheduler Queue parameterek (‘udbxx.snc’, 3306); gépek táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); CREATE TABLE `running_alters` ( `host`, `port`, `group`, `table_name`, `osc_status` enum('READY','RUNNING','DONE’), `last_updated`, )) ENGINE=InnoDB DEFAULT CHARSET=latin1 (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); CREATE TABLE `aosc_osc_ww` ( `host`, `port`, `table_name`, `osc_priv` enum('OK','STOP’), `status` enum(‘WAITING’,'RUNNING’,'DONE’). `percentage`, `last_update`, `try`, `priority`, `start_time`, `group`) | udbxx.snc |3306| tabla1| OK| WAITING | 0 | NULL |0|10| NULL | udb |

33 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens tábla szerkezetek (svn) ▪ Aktuális állapot tárolása (mysql, local/central) ▪ Helyi státuszok összegyűjtése (aosc_cheksum) ▪ Alter management (aosc_brain) ▪ Helyi állapotok begyűjtése (aosc_collector) ▪ Queue összeállítása (aosc_scheduler) ▪ Alter elindítása (aosc_osc_ww)

34 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww dbid1.tabla1 dbid2.tabla1 dbid3.tabla1 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'); (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); CREATE TABLE `aosc_osc_ww` ( `host`, `port`, `table_name`, `osc_priv` enum('OK','STOP’), `status` enum(‘WAITING’,'RUNNING’,'DONE’). `percentage`, `last_update`, `try`, `priority`, `start_time`, `group`) | udb01.snc1| 3306| tabla1| OK| WAITING |0| NULL |0|10| NULL | udb | queue aosc_osc_ww jogosultság Inkonzisztens db-k

35 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww dbid1.tabla1 dbid2.tabla1 dbid3.tabla1 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'); (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); queue aosc_osc_ww ellenörzés jogosúltság

36 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww dbid1.tabla1 dbid2.tabla1 dbid3.tabla1 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'); (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); queue aosc_osc_ww (osc_wrapper.php ) ellenőrzés jogosúltság alter inditása alter status>

37 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww dbid1.tabla1 dbid2.tabla1 dbid3.tabla1 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'); (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); queue aosc_osc_ww befejezés

38 svn - tier/tabla1 scheduler udbxx.snc:3306 MySQL: - aosc_local_status - aosc_osc_ww dbid1.tabla1 dbid2.tabla1 dbid3.tabla1 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); gepek tablak (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); queue aosc_osc_ww (osc_wrapper.php ) ellenorzes jogosultsag alter inditasa alter befejezes

39 svn - tier/tabla1 Scheduler - karbantartás udbxx.snc:3306 MySQL: - aosc_local_status - 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

40 Mit kell tudnunk az automatizáláshoz? ▪ Konzisztens táblaszerkezetek (svn) ▪ Aktuális állapot tárolása (mysql, local/central) ▪ Helyi státuszok összegyűjtése (aosc_cheksum) ▪ Alter management (aosc_brain) ▪ Helyi állapotok begyűjtése (aosc_collector) ▪ Queue összeállítása (aosc_scheduler) ▪ Alter futtatása (aosc_osc_ww)

41 Jelenlegi állapot ▪ Működik  ▪ Nem tökéletes a queue-ing (nincs súlyozás)

42 Have an impact! ▪ Dolgozz nálunk! (www.facebook.com/careers) ▪ Move Fast! ▪ Dba-ként, egy hét után a newsfeedben volt a kódom... ▪ Személyes kedvenceim: ▪ Zseniális munkatársak ▪ Nincs pozícióval kapcsolatos versengés ▪ Korlátlan mennyiségű redbull… ▪ “Tedd amihez értesz, itt van hozzá minden”

43 Kérdések? ▪ (UI: ingyen ajándékok itt nálam)

44 (c) 2009 Facebook, Inc. or its licensors. "Facebook" is a registered trademark of Facebook, Inc.. All rights reserved. 1.0


Letölteni ppt "Table alter at scale Aosc története István Pödör MySQL Ops. Eng. Oct, 20. 2012."

Hasonló előadás


Google Hirdetések