1 / 44

Table alter at scale Aosc története

Table alter at scale Aosc története. István Pödör MySQL Ops. Eng. Oct, 20. 2012. Agenda. 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 )

kathy
Download Presentation

Table alter at scale Aosc története

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Table alter at scaleAosctörténete IstvánPödör MySQL Ops. Eng. Oct, 20. 2012

  2. Agenda

  3. Db ops team • A csapatamibenénmagam is dolgozom (MySQL Infrastructure Operations Engineering) • Minden adat, aminekperzisztensnekkelllennie(1milliárd aktívfelhasználóhoz) • Petabyte méretűadattárház • Többezer instance amire 60m+ lekérdezés jut másodpercenként • 8(+2+3(perf/eng)) főscsapat, ezértfőlegfejlesztésselfoglalkozunk

  4. Alapok • Kérdezz! (jobbegyérdekesbeszélgetes, mint egyunalmaselőadás) • Minden különgép> host • Minden futómysqlegy host-ton > instance • Shard vagydbid, replikációlánc (gépcsoport) • Tier egygépcsoportokatösszefogólista (pldbid, dbname, services/instances)

  5. OnlineSchemaChange (OSC) • Downtime nemelfogadhatóésa masterekváltásanemelégbiztonságosanautomatizálható, túldrága • Kellettegy online megoldás(OSC) • Újtáblaazújschema-val • Triggereklétrehozása • Adatokátemelése • Kicserélnia régitazújjal

  6. Megoldásés a problémák • Futtatnimindengépenésdb-n kézzel(tool-ok) • Borzalmasansokidő • Rengeteg a hibalehetőség • A gépekgyakrancserélődnek, a hostname irreleváns • Nehézjegyezniholkészültel, azellenőrzésköltséges (ésnemteljesenmegbízható) • Leggyengébbláncszemproblémája(slave/master, egytáblaegyidőben) • Azegyszerűésgyors alter 2hét volt (sok instance)

  7. Fejlesztők manual-OSC dba Manuálisan

  8. A szükség • Alter automatikusan, ember nélkül • Maximáliskihasználtság • szabályozhatóan, concurrency, prioritás • Failsafe működés • Nyomonkövethető, bármikorszüneteltethető, leállítható • _automatikusan_

  9. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetek • Instance aktuálisállapotánaktárolása • Helyistátuszokösszegyűjtése • Alter management • Helyiállapotokösszegyűjtése • Queue összeállítása • Alter elindítása

  10. Mielőttelkezdjük… • Végigmegyünkegypéldán • Kérdezz, vitatkozzbátran! • jobbegyérdekesbeszélgetes, mint egyunalmaselőadás…

  11. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetektárolása(svn) • Aktuálisállapotoktárolása(mysql, local/central) • Helyistátuszokelké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)

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

  13. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetektárolása(svn) • Aktuálisállapotoktárolása(mysql, local/central) • Helyistátuszokelké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)

  14. checksum svn - tier/tabla1 kivántschema aosc_checksum (oscsegítségével) 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

  15. checksum svn - tier/tabla1 kivántschema aosc_checksum (oscsegítségével) összehasonlítás udbxx.snc:3306 udbxx.snc:3306 • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 udbxx.snc| 3306 | dbid1 | tabla1 | abcd| efgh| INC udbxx.snc| 3306 | dbid2 | tabla1 | efgh | efgh| OK udbxx.snc| 3306 | dbid3 | tabla1 | NULL| efgh| NA 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

  16. checksum svn - tier/tabla1 kivántschema aosc_checksum (oscsegítségével) összehasonlítás udbxx.snc:3306 tárolás udbxx.snc:3306 • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 udbxx.snc| 3306 | dbid1 | tabla1 | abcd | efgh | INC udbxx.snc| 3306 | dbid2 | tabla1 | efgh | efgh | OK udbxx.snc| 3306 | dbid3 | tabla1 | NULL| efgh | NA 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

  17. checksum svn - tier/tabla1 1. kivántschema aosc_checksum (oscsefítségével) 2. összehasonlítás udbxx.snc:3306 3. tárolás udbxx.snc:3306 • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 udbxx.snc| 3306 | dbid1 | tabla1 | abcd | efgh | INC udbxx.snc| 3306 | dbid2 | tabla1 | efgh | efgh | OK udbxx.snc| 3306 | dbid3 | tabla1 | NULL| efgh | NA 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 • osc_wrapper.php –dry_runopcióval • checksum md5() function-nelphp-ból • Lekérdezés 1 query-vel(select database from aosc_local_status where table_name = ‘tabla1’ and status <> ‘OK’)

  18. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetektárolása(svn) • Aktuálisállapotoktárolása(mysql, local/central) • Helyistátuszokelké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)

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

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

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

  22. brain (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); svn - tier/tabla1 CREATE TABLE `current_alters` ( `group`, `table_name`, `status` enum('DONE','IPR','HOLD’), `priority`, `server_list` enum('default','custom’) )) ENGINE=InnoDB DEFAULT CHARSET=latin1 aosc_db udbxx.snc:3306 • MySQL: • allowed_alters • current_alters • finished_alters MySQL: - aosc_local_status aosc_brain ellenorzes aosc_checksum • Allowed_altersazegyetlentáblaamihez ember/alkalmazáskivülrőlhozzányúlhat • A gépekcserélődésemiatt, minimum 3x24 óráigvárunkha a gépeketkonzisztensnekítéltük • A harmadikprobálkozásután, azaosc_brainellenőrzi, hogyvalóbanmind rendben van-e

  23. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetek (svn) • Aktuálisállapottárolása(mysql, local/central) • Helyistátuszokösszegyűjtése(aosc_cheksum) • Alter management (aosc_brain) • Helyiállapotokbegyűjtése(aosc_collector) • Queue összeállítása(aosc_scheduler) • Alter elindítása(aosc_osc_ww)

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

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

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

  27. collector svn - tier/tabla1 aosc_brain aosc_db udbxx.snc:3306 • MySQL: • allowed_alters • current_alters • finished_alters • - alter_udb_tabla1 MySQL: - aosc_local_status (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); 1. pmysql 3. aosc_collector aosc_checksum 2. (‘udbxx.snc’, 3306); • A collector hozzalétreazalter_$tier_$tabletáblát • Amennyibennemtalálinkonzisztens instance-ot, kezeli a finished_alterstáblátis • A server lista, a csoportnevealapjánegyközpontirendszerünkbőljön • Pmysql > paralellmysql query 4. CREATE TABLE `alter_udb_tabla1`( `host`, `port`, )) ENGINE=InnoDB DEFAULT CHARSET=latin1

  28. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetek (svn) • Aktuálisállapottárolása(mysql, local/central) • Helyistátuszokösszegyűjtése(aosc_cheksum) • Alter management (aosc_brain) • Helyiállapotokbegyűjtése(aosc_collector) • Queue összeállítása(aosc_scheduler) • Alter elindítása(aosc_osc_ww)

  29. scheduler svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_db aosc_collector gépek (‘udbxx.snc’, 3306); udbxx.snc:3306 • MySQL: • allowed_alters • current_alters • finished_alters • alter_db_tabla1 • running_alters • MySQL: • - aosc_local_status • - aosc_osc_ww paraméterek aosc_scheduler Queue aosc_checksum

  30. scheduler svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_db aosc_collector gépek (‘udbxxsnc’, 3306); udbxx.snc:3306 • MySQL: • allowed_alters • current_alters • finished_alters • alter_db_tabla1 • running_alters • MySQL: • - aosc_local_status • - aosc_osc_ww paraméterek aosc_scheduler Queue aosc_checksum • Datacenter alapjánelosztja a terhelést • Figyelembeveszi a prioritást • Replikacióssorrendetkezel (master/slave) • (hamarosan) súlyozástis támogatja • Figyelembeveszi a tier/csoportegyénitulajdonságait(plmaximálisalterekszáma) • Host/instance alapúteljesítményelosztás • Queue karbantartás

  31. scheduler svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_db aosc_collector gépek (‘udbxx.snc’, 3306); udbxx.snc:3306 • MySQL: • allowed_alters • current_alters • finished_alters • alter_db_tabla1 • running_alters • MySQL: • - aosc_local_status • - aosc_osc_ww aosc_scheduler parameterek Queue aosc_checksum (‘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`) 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| tabla1| OK| WAITING | 0 | NULL |0|10| NULL | udb|

  32. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetek (svn) • Aktuálisállapottárolása(mysql, local/central) • Helyistátuszokösszegyűjtése(aosc_cheksum) • Alter management (aosc_brain) • Helyiállapotokbegyűjtése(aosc_collector) • Queue összeállítása(aosc_scheduler) • Alter elindítása(aosc_osc_ww)

  33. scheduler svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_checksum aosc_db aosc_collector gépek (‘udbxx.snc’, 3306); aosc_scheduler • MySQL: • allowed_alters • current_alters • finished_alters • - alter_udb_tabla1 • running_alters queue (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); udbxx.snc:3306 • MySQL: • - aosc_local_status • - aosc_osc_ww • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 aosc_osc_ww Inkonzisztens db-k jogosultság 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|

  34. scheduler svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_checksum aosc_db aosc_collector gépek (‘udbxx.snc’, 3306); aosc_scheduler • MySQL: • allowed_alters • current_alters • finished_alters • - alter_udb_tabla1 • running_alters queue (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); udbxx.snc:3306 jogosúltság • MySQL: • - aosc_local_status • - aosc_osc_ww • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 ellenörzés aosc_osc_ww

  35. scheduler svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_checksum aosc_db aosc_collector gépek (‘udbxx.snc’, 3306); aosc_scheduler • MySQL: • allowed_alters • current_alters • finished_alters • - alter_udb_tabla1 • running_alters queue (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); udbxx.snc:3306 jogosúltság • MySQL: • - aosc_local_status • - aosc_osc_ww • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 ellenőrzés aosc_osc_ww status> alter inditása alter aosc_osc_ww (osc_wrapper.php)

  36. scheduler svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_checksum aosc_db aosc_collector gépek (‘udbxx.snc’, 3306); aosc_scheduler • MySQL: • allowed_alters • current_alters • finished_alters • - alter_udb_tabla1 • running_alters queue (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); udbxx.snc:3306 • MySQL: • - aosc_local_status • - aosc_osc_ww • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 aosc_osc_ww befejezés

  37. scheduler svn - tier/tabla1 aosc_brain tablak (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_checksum aosc_db aosc_collector gepek (‘udbxx.snc’, 3306); aosc_scheduler • MySQL: • allowed_alters • current_alters • finished_alters • - alter_udb_tabla1 • running_alters queue (‘udbxx.snc’, 3306,’udb’,’tabla1’,’READY’, NULL); udbxx.snc:3306 jogosultsag • MySQL: • - aosc_local_status • - aosc_osc_ww • dbid1.tabla1 • dbid2.tabla1 • dbid3.tabla1 ellenorzes aosc_osc_ww befejezes alter inditasa alter aosc_osc_ww (osc_wrapper.php)

  38. Scheduler - karbantartás svn - tier/tabla1 aosc_brain táblák (‘udb', ‘tabla1’, ‘IPR', 10, 'default'); aosc_db aosc_collector gépek (‘udbxx.snc’, 3306); udbxx.snc:3306 • MySQL: • allowed_alters • current_alters • finished_alters • - alter_udb_tabla1 • running_alters • MySQL: • - aosc_local_status • - aosc_osc_ww aosc_scheduler aosc_checksum aosc_osc_ww • Ellenőrzia queue státuszokat • Nemvárunk-e túlrégótaaz alter indítására • Nemfut-e túlrégóta • Létezik-e egyáltalánmégaz instance • Ha egy instance-otelvesztünk, nemtörődünkvele, töröljük

  39. Mitkelltudnunkazautomatizáláshoz? • Konzisztenstáblaszerkezetek(svn) • Aktuálisállapottárolása(mysql, local/central) • Helyistátuszokösszegyűjtése(aosc_cheksum) • Alter management (aosc_brain) • Helyiállapotokbegyűjtése(aosc_collector) • Queue összeállítása(aosc_scheduler) • Alter futtatása(aosc_osc_ww)

  40. Jelenlegiállapot • Működik • Nemtökéletes a queue-ing (nincssúlyozás)

  41. Have an impact! • Dolgozználunk! (www.facebook.com/careers) • Move Fast! • Dba-ként, egyhétután a newsfeedben volt a kódom... • Személyeskedvenceim: • Zseniálismunkatársak • Nincspozícióvalkapcsolatosversengés • Korlátlanmennyiségűredbull… • “Teddamihezértesz, itt van hozzáminden”

  42. Kérdések? • (UI: ingyenajándékokittnálam)

More Related