ããã«ã¡ã¯ãHabrïŒ ä»æ¥ã¯ãTarantool Meetupã«é¢ããç§ã®ã¬ããŒãã«åºã¥ããŠæžãããèšäºãå ±æããŸãã MambaãTarantoolã®äœ¿çšãéå§ããçç±ã«ã€ããŠã®å°ããªç©èªã MySQLããTarantoolãžã®ã¬ããªã±ãŒã·ã§ã³ãè¡ãã®ã¯ãªãã§ããïŒ æåã®çç±ã¯ãããæç¹ã§MySQL 5.7ãžã®åãæ¿ããéå§ããå¿ èŠããã£ãããMySQL 5.6ã®ãµãŒããŒã§ã¢ã¯ãã£ãã«äœ¿çšããããã³ãã©ãœã±ããããªãã£ãããã§ãã PerconaããŒã ã«ãé£çµ¡ãåãã5.6ãcãã³ãã©ãœã±ããã®ææ°ããŒãžã§ã³ã§ããããšã確èªããŸããã
2çªç®ã®çç±ã¯ãTarantoolã®è©Šçšãéå§ããããšãšãäœæ¥ã®é床ãæ°ã«å ¥ã£ãããã§ããmemcacheãšTarantoolãããŒ/å€ã¹ãã¬ãŒãžãšããŠæ¯èŒãããšãããåãããŒããŠã§ã¢ã§ããã©ãŒãã³ã¹ã0.6ã0.3 msåäžããŸããã çžå¯ŸçãªèŠ³ç¹ã§ã¯ãTarantoolã¯2åã®éãã§ãã絶察çãªèŠ³ç¹ã§ã¯ãããã»ã©ã¯ãŒã«ã§ã¯ãããŸããããããã§ãã§ãã 3çªç®ã®çç±ã¯ãçŸåšã®æ§é ãå®å šã«ä¿åããããšããé¡æã§ããMySQLServerãã¹ã¿ãŒãšãã®ã¹ã¬ãŒãããããäœãæžãçŽããããããŸããã§ããã ãã³ãã©ãœã±ããã䜿çšããMySQL 5.6ã¹ã¬ãŒãã®ä»£ããã«ãä»ã®äœããé©çšãã巚倧ãªã¢ãŒããã¯ãã£å šäœãå®å šã«æžãæããªãããã«ããã«ã¯ã©ãããã°ããã§ããããïŒ
Mail.Ru GroupããŒã ã«ã¯ãç¬èªã®ç®çã§äœæããã¬ããªã±ãŒã¿ãŒãããããšãããããŸããã å ã ãMySQLããTarantoolã«ããŒã¿ãè€è£œããããšã圌ãã®ã¢ã€ãã¢ã§ããã 1.7ã§ã¯ãªãMySQL 5.1ãšTarantool 1.5ã§åäœãããããããçŽããªããã°ãªããªãã³ãŒããäŸé ŒããŸããã ã¬ããªã±ãŒã¿ãŒã¯ããªãŒãã³ãœãŒã¹éçºã®libslaveã䜿çšããŠãMySQL MasterãµãŒããŒããã€ãã³ããèªã¿åããŸãã å®å šã«éçã«ã³ã³ãã€ã«ãããã·ã¹ãã mysql libã䜿çšããªãã¬ããªã±ãŒã¿ãŒã MySQLããTarantoolãžã®ã¬ããªã±ãŒã¿ãŒã¯ãBSDã©ã€ã»ã³ã¹ã®äžã§ãªãŒãã³ãœãŒã¹ã§å©çšã§ããŸãã å®å šã«ç¡æã§äœ¿çšã§ããŸãã ãœãŒã¹ã¯æ¬¡ã®ãšããã§ããhttps ïŒ //github.com/tarantool/mysql-tarantool-replication
ãã®ã¬ããªã±ãŒã·ã§ã³ã®å¶é
ãŸãããã¹ã¿ãŒã®binãã°ã¯è¡ããŒã¹ã®ã¿ã§ããå¿ èŠããããŸãã ã¹ããŒãã¡ã³ããæ··åãè¡ããŸãããè¡ããŒã¹ã®ã¿ã§ãã 第äºã«ãã¬ããªã±ãŒã¿ãŒã¯Tarantoolã®ç¹å®ã®ã¢ãžã¥ãŒã«ã§ã¯ãªããåå¥ã®ããŒã¢ã³ã§ãã ã€ãŸãããã®ããŒã«ã¯ãååãšããŠãTarantoolãŸãã¯MySQLã®ãããã«ãé¢é£ä»ããããŠããŸããã 第äžã«ãå¿ èŠã§ããã°ã1人ã®ãã¹ã¿ãŒã10åã®ã¹ã¬ãŒããæã£ãŠãããšããŸãããã10åã®ããŒã¢ã³ãå®è¡ããå¿ èŠããããŸãã 1ã€ã®ã¬ããªã±ãŒã¿ãŒã¯ã1ã€ã®Tarantoolã§ã®ã¿è€è£œã§ããŸãã ãããŠç¬¬4ã«ãã¬ããªã±ãŒã¿ãŒã¯MariaDBã§åäœããŸããã 5.6ãš5.7ã®äž¡æ¹ã§è©ŠããŠã¿ãŸããããããã¯Oracleããã®ãã«ããŸãã¯Perconaã®ãã«ãã®ããããã§ãããæŽå²çã«ã¯Perconaã®ããŒãžã§ã³ã䜿çšããŠããŸãã MariaDBã®ã¬ããªã±ãŒã·ã§ã³ãããã³ã«ãå€æŽãããŸããã
ã¬ããªã±ãŒã·ã§ã³ã®ä»çµã¿
MySQLã¯Tarantoolãç¥ãããTarantoolãMySQLãç¥ããŸããã ã¬ããªã±ãŒã¿ãŒã¯binãã°ãMySQLãã¹ã¿ãŒããèªã¿åããããã¯ãã¹ãŠTarantoolã«æžã蟌ãŸããŸãã
ã¬ããªã±ãŒã¿ãŒã¯äœãã§ããŸããïŒ
èµ·åæã«ãã¬ããªã±ãŒã¿ãŒã¯èšå®ã«åºã¥ããŠãã¹ã¿ãŒããããŒã¿ãå®å šã«ååŸããŸããããã¯ã©ã®ããŒã¿ããŒã¹/ããŒãã«ãè€è£œããå¿ èŠããããã瀺ããŸããã€ãŸããèµ·åããã«ã¯ã空ã®ã¹ããŒã¹ãæã€ã¿ã©ã³ãã¥ã©ãååŸããã ãã§ããããã¯éåžžã«äŸ¿å©ã§ãã
ã·ã¹ãã 管çè ã¯ãã¬ããªã±ãŒã·ã§ã³ããŸã£ããæ©èœããŠãããã©ãããã¬ããªã±ãŒã¿ãŒãçŸåšèªã¿åã£ãŠãããã³ãã°ããã®äœçœ®ãäœã§ãããããã¡ãããããç解ããå¿ èŠããããŸãã å¥ã®ã¹ããŒã¹ããããããã«ã¯3ã€ã®å€ã®ã¿ããããŸãããã³ã®ãã°åãšçŸåšèªã¿åãããŠããäœçœ®ã§ããã€ãŸããéåžžã®ã¹ã¬ãŒãç¶æ ã®è¡šç€ºã«äŒŒãŠããŸãã
10.5.2.17:5000> box.space.ReplicationLog:select() [0, 'db-bin.024218', 916925355]
ã¬ããªã±ãŒã¿ãŒãå±éããåŸã2ã€ã®ãµãŒããŒã§ã®ã¿å®è¡ããã7ã€ã®Tarantoolã€ã³ã¹ã¿ã³ã¹ãå±éããŸããã1ã€ã®Tarantoolã€ã³ã¹ã¿ã³ã¹ã§ã¯ãã¹ãŠã®ãã·ã³ã³ã¢ãå©çšã§ããªãããã§ãã ã¿ã©ã³ãã¥ã©ã®ã¢ãŒããã¯ãã£ãå°ãæãåºããŠã¿ãŸãããã1ã€ã®ã€ã³ã¹ã¿ã³ã¹ã¯3ã€ã®ã³ã¢ããæ¶è²»ã§ããŸãã1ã€ä»¥äžã®ã³ã¢-ãããã¯ãŒã¯ãæ£ç¢ºã«1ã€ã®ã³ã¢-ãã©ã³ã¶ã¯ã·ã§ã³éšåãæ£ç¢ºã«1ã€ã®ã³ã¢-walãã¡ã€ã«ã§åäœããŸãã
è² è·
ã¬ããªã±ãŒã¿ãŒãèµ·åãããã³ãã©ãŒãœã±ãããåäœããMySQLã¹ã¬ãŒãã®è² è·ãæ¥æ¿ã«äœäžããŸãã-ã»ãŒãŒãã«ãªããŸããã
ãã®åŸãçŸåšã®8ã€ã®MySQLã¹ã¬ãŒããµãŒããŒã®ä»£ããã«1ã€ã ããæ®ãããšããŸããããã§ã«1ã€ã®ãµãŒããŒãè² è·ãå®å šã«ä¿æããŠããŸããã MySQLã¹ã¬ãŒããµãŒããŒãå®å šã«æŸæ£ããã®ã§ã¯ãªãããã³ãã©ãœã±ãããªãã§æ©èœããã¯ãšãªãæ®ããŸãããã€ãŸããå®å šã«5.7ã«åãæ¿ããããšãã§ããŸãã ãã®çµæãå°ãªããšã7å°ã®ãµãŒããŒããããã§åäœãããšã³ã¿ãŒãã©ã€ãºSSDãã©ã€ããã©ãã¯ã¹ããŒã¹ãé»æ°ãããã³ãéãç¯çŽããŸããã
å¿çæéã«ã€ããŠèå³æ·±ãããšã¯äœã§ããïŒ Mambaã«ã¯ç¬èªã®BTPãªãŒãã³ãœãŒã¹è£œåããããŸããããã«ã°ã©ãããããŸãã
ãã³ãã©ãœã±ããã«ã¯éåžžã«çããAPIããããŸãã æåã«Connectã¡ãœããã次ã«Open Indexã¡ãœããã次ã«Executeã¡ãœãããåŒã³åºãå¿ èŠããããŸãã 3ã€ã®ã¡ãœãããã¹ãŠã®åèšæéãå³ã«ç€ºãããŠããŸãããã³ãã©ãœã±ãããžã®èŠæ±ã®æéã¯1ç§ã«éããå¯èœæ§ããããŸãã
ãããŠä»ã§ã¯ãã¹ãŠãåãã§ããããã¹ã¿ãŒããåãããŒã¿ããŒã¹ãè€è£œãããTarantoolã®ãµãŒããŒã§ã¯ïŒ
çç±ã¯éåžžã«åçŽã§ããTarantoolã¯ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ã§ãããMySQLã¯SSDã§åäœãããããã¡ããŒã«ãµã€ãºã§å²ãåœãŠããããããã¡ã¡ã¢ãªã¯ããŒã¿ããŒã¹ãµã€ãºãããå°ãªããªããŸããã ããã«ã¯å®å šãªã€ã³ã¡ã¢ãªãããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã§ããwal-filesã¯ãªãã«ãªã£ãŠããŸããã€ãŸãããã£ã¹ã¯ã§ã®äœæ¥ã¯ãªããã¡ã¢ãªã®ã¿ãæŠéèŠæ±ã«è¡ããªãåå¥ã®ã€ã³ã¹ã¿ã³ã¹ããããwal-filesãå«ãŸããŠããŸãã¹ãããã·ã§ããã¯ãããããäœæãããŸãã
èªè»¢è»ã§ããïŒ
ä»ã®èª°ããããã«ã€ããŠãã¹ãŠè©±ããŠããããç§ã¯èªåããŸãã ãããããããªãã¯èªè»¢è»ãçºæããŸãããïŒ MySQLã®ãŠãŒã¶ãŒã¯ãTarantoolã§äœããè€è£œããŠããŸãã ã¯ãã5.7ã«ã¢ããã°ã¬ãŒããããã®ã§ããã³ãã©ãœã±ãããããããããããšãèããŠããŸãã ããããããã¯äœã®ããã§ããïŒ ãã³ãã©ãœã±ãããªãã§ãã«ããªãå Žåã¯ãããå°ããµãŒããŒãè¿œå ããŸãã 確å®ã«ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ãå¿ èŠãªå Žåã¯ãããŒãããŒãã«ãäœæããããããŒã¿ããŒã¹ãã¡ã€ã«ãTMPFSã«è»¢éããã·ã³ããªãã¯ãªã³ã¯ãäœæãããšããã¹ãŠã®ããŒãã«ãåã³ã¡ã¢ãªã«æ ŒçŽããããã¹ãŠæ£åžžã«åäœããŸãã
ããããããã¯ããã§ã¯ãããŸããã
ã¬ããªã±ãŒã¿ãŒã®äž»ãªæ©èœã¯ããã§ãã ããšãã°ãã¬ããªã±ãŒããããã¹ã¿ãŒäžã«ããããŒã¿ããŒã¹ã«ã¯çŽ100åã®ããŒãã«ããããŸãããã¹ã¬ãŒãã§ã¯ãã¹ãŠã®ããŒãã«ã圹ã«ç«ããªããããå¿ èŠãªããŒãã«ã®æ°ã¯ããã7åã§ãã ãããã£ãŠãéå°ãªããŒã¿ã®è€è£œã«ãªãœãŒã¹ãè²»ãããããããŸããã MySQLã§ã¯ããããã®7ã€ã®ããŒãã«ãè€è£œããããã«æå®ã§ããŸãã ãããã7ã€ã®ããŒãã«ã«120ã®ãã£ãŒã«ãããããã¹ã¬ãŒãã§ã®ã¿äœ¿çšãããã¯ãšãªã®å Žåã120ã®ãã£ãŒã«ãã®ãã¡21ã ããå¿ èŠã§ãããšä»®å®ããŸãã MySQLã§ã¯ã7ã€ã®ããŒãã«ãã¹ãŠãè€è£œããŸããããã®å Žåã¯çŽ80 GBã®ã¡ã¢ãªãå æããŸãã ãŸããã¬ããªã±ãŒã¿ãŒã§ã¯ããããã®ããŒãã«ã®ãã£ãŒã«ãã»ããã®ã¿ãæå®ã§ããŸããã€ãŸãã7ã€ã®ããŒãã«ãã120ãã£ãŒã«ãã§ã¯ãªãã21ãã£ãŒã«ããã¬ããªã±ãŒããããTarantoolã§ã¯20 GBãå æããŸãã
ã¬ããªã±ãŒã¿ãŒã®å¥ã®æ©èœïŒå®éããããã®7ã€ã®ããŒãã«ã®ãã¹ãŠã®ãã£ãŒã«ãã¯1ã€ã®ã¹ããŒã¹ã«ããŒãžãããŸããã€ãŸããçµåããã«1ã€ã®ã¯ãšãªã§éžæã§ããŸãã
åºåã¯äœã§ããïŒ
Tarantoolã¯éåžžã«é«éã§ãã ç§ã¯åœŒãMySQLãããæå©ã§ããããšã瀺ãã°ã©ãã瀺ããŸãã-æ倧3åã
ç§ãã¡ãæã£ãŠããTarantoolã®ã¬ããªã±ãŒã·ã§ã³ã¯ãMySQLãããéãåäœããŸãããã®ããã§ãã ç§ãã¡ããããéå§ãããšããããã«çããæåã®è³ªåã¯ãè€è£œãäžè²«ããŠãããã©ããã§ããã ç§ãã¡ã¯éåžžã«ã·ã³ãã«ãªPHPã¹ã¯ãªãããäœæããŸããããã®ã¹ã¯ãªããã¯ã1ãæã§ã¢ã¯ãã£ããªãªãŒãã£ãšã³ã¹ãç²åŸããMySQLãã¹ã¿ãŒãšTarantoolã¹ã¬ãŒãã«èª¿åããŸãã ã¢ã¯ãã£ããªãªãŒãã£ãšã³ã¹ãã¢ã³ããŒãããããã®ãã®ã¹ã¯ãªããã¯ã1ç§æªæºåã«ç»é²ãããŠãŒã¶ãŒã䜿çšããããšãå€æããå ŽåããããŸããã MySQLã¹ã¬ãŒãã§ã¯ãŸã ååšããŠããŸããããTarantoolã§ã¯æ¢ã«ååšããŠããŸããããMySQLã®Slave in Showã¹ã¬ãŒãã¹ããŒã¿ã¹ã§ã¯ã©ã°ã¯åžžã«ãŒãã§ãããã¹ã¬ãŒããé ããããšã¯ãããŸããã ãããåæã«ãæ å ±ã¯ã¯ããã«é«éã«Tarantoolã«å±ããŸãã ç¹°ãè¿ããŸãããTarantoolã¯å®å šãªã€ã³ã¡ã¢ãªããŒã¹ã§ãã
ã¿ã©ã³ããŒã«ã®å©ç¹
MySQLãµãŒããŒããé»æºã±ãŒãã«ãåŒãåºããŠããããµãŒããŒãåèµ·åãããšã©ããªããŸããïŒ éå§æã«ãInnoDBãªã«ããªããã»ã¹ãéå§ããããã®çµæãããŒã¿ããŒã¹ã埩å ãããŸãã ããããã³ã³ãããŒã©ãŒããã£ã¹ã¯ãžã®é©åãªæ å ±ã®æžã蟌ã¿ãåæ¢ããæç¹ã§ãã³ã³ãããŒã©ãŒé害ã®ããã«ãµãŒããŒãã«ãŒãã«ãããã¯ã«ã¯ã©ãã·ã¥ããåèµ·ååŸã®innodbãªã«ããªããã»ã¹ãCore Dumpã§çµäºããããšãäœåºŠãèµ·ãããŸããã Tarantoolã§ã¯ããã°ã®å èªã¿ã¡ã«ããºã ãéåžžã«ããèããããŠãããããäœããã®çç±ã§ã³ã³ãããŒã©ãŒãwal-fileã«ãã³ã»ã³ã¹ãæžã蟌ãã ãšããŠããTarantoolãäžæããªããããåã«wal-fileãç Žæ£ããŸãã ãŸãã¯ããã¡ã€ã«ãéããŠãTarantoolãèµ·åãããŸã§1è¡ãã€èšé²ããŒã¿ãåé€ããŸãã ããã«ãwal-fileã«èšé²ããããã©ã³ã¶ã¯ã·ã§ã³ã®å¿ èŠãªæ°ãå°ãªããšã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ãæå®ã§ããŸãã äžèšã§åŒçšããMySQLã®äŸã¯ããµãŒããŒããŒããŠã§ã¢é害ã®çµæã§ãããéåžžã®ç¶æ ã§ã¯innodbãªã«ããªã¯æèšã®ããã«æ©èœããŸãã
ãŸããTarantoolãéåžžã«ã·ã³ãã«ã§ããããšãæ°ã«å ¥ã£ãŠããŸãã ããã§ã¯ãã¹ãŠãäœãã©ã®ããã«è¡ãããæ確ã§ãã MySQLã®æ°ããããŒãžã§ã³ãåºãŠãããšããŸããããæŽæ°ããŸããããèµ·åããŸããã ãšã©ãŒãã°ã«ç»ããç解ããŸãã my.cnfã®äžéšã®èšå®ã¯æ¢ã«å»æ¢ãããŠããŸãã ããã¥ã¡ã³ããéããŠããŸã å€ãã®èšå®ãããããšã確èªããŸãã次ã«ãããã©ãŒãã³ã¹ãæ¹åããããã«æ°ããmy.cnfãèšè¿°ããæ¹æ³ãç解ããå¿ èŠããããŸãã ã¿ã©ã³ããŒã«ã«ã¯ããã¯ãããŸããã ããã§ã¯ãã¹ãŠãã·ã³ãã«ã§æ確ã§ãæå°éã®èšå®ã§ãã
Tarantoolãšã®å ±åäœæ¥ã§æ¬¡ã«æ¥œããã ã®ã¯ãã¯ãŒã«ãªã³ãã¥ããã£ã§ãã Telegramã«ã¯ãã£ããã«ãŒã ããããDenis AnikinããæåŸ ç¶ãåãåã£ãŠã質åã«çããŠããã«ãã°ãä¿®æ£ã§ããŸãã
Tarantoolã¹ãããã·ã§ããã¯çŽ æŽãããã§ãã ãã®ã¡ã«ããºã ã¯éåžžã«éãé床ã§åäœããŸã-800 Mbit /ç§ãå Žåã«ãã£ãŠã¯1 Gbitã§ãã 1ã€ã®ãã¡ã€ã«ã«é çªã«æžã蟌ãŸããŸãã ããã§ã¯ã¹ãŒããŒãã£ã¹ã¯ã¯å¿ èŠãããŸãããæãå®äŸ¡ãªSATAã§ãããã¹ãŠãéåžžã«è¿ éãã€é©åã«æ©èœããŸãã 20ã®ã¬ãã€ãã®ããŒã¹ã®ã¹ãããã·ã§ãããäœæããã®ã«5åãããããŸããã ç§ã¯ãã§ãã¯ããŸããããMySQLã§ã¯ãã£ãšé ããªããŸããã
çæ
æåã®æ倧ã®æ¬ ç¹ã¯ãç¹ã«MySQLã®åŸã«Tarantoolã䜿çšãå§ããå ŽåãTarantoolã®å€§æåãšå°æåãåºå¥ããã€ã³ããã¯ã¹ãéåžžã«äžäŸ¿ã§ããããšã§ãã
2çªç®ã®æ¬ ç¹ã¯ã³ã³ãœãŒã«ã§ãã ããšãã°ãMySQLã§ã¯ãã¬ããªã±ãŒã·ã§ã³ãæ©èœããããšãç解ããã«ã¯ã©ãããã°ããã§ããïŒ ã¹ã¬ãŒãã¹ããŒã¿ã¹ã®è¡šç€ºã2åèšé²ããæ°åãå®è¡ãããŠããããšã確èªããŸããã åæã«ãMySQLã³ã³ãœãŒã«ã§ãShow slaveã¹ããŒã¿ã¹ã2åã§ã¯ãªã1åæºããããŸãã Show slave statusã100åé£ç¶ã§èšå ¥ããŠããHistory MySQLã³ã³ãœãŒã«ã§ããã1åã ãè¡ã£ãããšãèŠããŠããŸãã ãã ããTarantoolã§ã¯ãEnterã100åå ¥åããããšãããšãã³ã³ãœãŒã«ã§Enterã100åå ¥åã§ããŸããç¹°ãè¿ãæŒãåã®ç¶æ ã«ã¹ã¯ããŒã«ããŠã¹ã¯ããŒã«ãããšãèŠãããããŸãã
ãããã«
Tarantoolã¯äœ¿çšããã®ã«æ¬åœã«è¯ã補åã§ãã ã¯ããæ¬ ç¹ããããŸããã補åã¯éçºäžã§ãã MySQLããã®ã¬ããªã±ãŒã·ã§ã³ãç»å ŽããåŸãããã«éãéçºãããããšãé¡ã£ãŠããŸãã ãã¡ãããã¿ã©ã³ããŒã«ã®æãéèŠãªå©ç¹ã¯ãã®é床ã§ãã ç¶ç¶ããã