GitHubã¯ã git
ã«é¢é£ããªããã¹ãŠã®äž»èŠããŒã¿ãŠã§ã¢ããŠã¹ãšããŠMySQLã䜿çšããŠãããããMySQLã®å¯çšæ§ã¯GitHubã®éåžžã®æäœã®éµãšãªããŸãã ãµã€ãèªäœãGitHub APIãèªèšŒã·ã¹ãã ãããã³ãã®ä»ã®å€ãã®æ©èœã«ã¯ãããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ãå¿
èŠã§ãã è€æ°ã®MySQLã¯ã©ã¹ã¿ãŒã䜿çšããŠãããŸããŸãªãµãŒãã¹ãšã¿ã¹ã¯ãåŠçããŸãã ãããã¯ãèšé²ã«äœ¿çšã§ãã1ã€ã®ã¡ã€ã³ããŒããšãã®ã¬ããªã«ã䜿çšããåŸæ¥ã®ã¹ããŒã ã«åŸã£ãŠæ§æãããŸãã ã¬ããªã« ïŒä»ã®ã¯ã©ã¹ã¿ãŒããŒãïŒã¯ãã¡ã€ã³ããŒããžã®å€æŽãéåæçã«åçŸããèªã¿åãã¢ã¯ã»ã¹ãæäŸããŸãã
ãã¹ããµã€ãã®å¯çšæ§ã¯éåžžã«éèŠã§ãã ã¡ã€ã³ããŒãããªããšãã¯ã©ã¹ã¿ãŒã¯èšé²ããµããŒãããŸãããã€ãŸããå¿
èŠãªå€æŽãä¿åã§ããŸããã ãã©ã³ã¶ã¯ã·ã§ã³ã®ä¿®æ£ãåé¡ã®ç»é²ãæ°ãããŠãŒã¶ãŒã®äœæããªããžããªãã¬ãã¥ãŒãªã©ã¯ããŸã£ããäžå¯èœã§ãã
èšé²ããµããŒãããã«ã¯ã察å¿ããã¢ã¯ã»ã¹å¯èœãªããŒããã€ãŸãã¯ã©ã¹ã¿ãŒå
ã®ã¡ã€ã³ããŒããå¿
èŠã§ãã ãã ãããã®ãããªããŒããèå¥ãŸãã¯æ€åºããèœåãåæ§ã«éèŠã§ãã
çŸåšã®ã¡ã€ã³ããŒãã«é害ãçºçããå Žåã¯ãæ°ãããµãŒããŒãè¿
éã«äº€æããŠäº€æãããã¹ãŠã®ãµãŒãã¹ã«ãã®å€æŽãè¿
éã«éç¥ã§ããããã«ããããšãéèŠã§ãã åèšããŠã³ã¿ã€ã ã¯ãéå®³ã®æ€åºããã§ã€ã«ãªãŒããŒãããã³æ°ããã¡ã€ã³ããŒãã®éç¥ã«ããã£ãæéã®åèšã§ãã

ãã®åºçç©ã¯ãGitHubã§MySQLã®é«å¯çšæ§ã確ä¿ããã¡ã€ã³ãµãŒãã¹ãçºèŠããããã®ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠèª¬æããŠããŸããããã«ãããè€æ°ã®ããŒã¿ã»ã³ã¿ãŒãã«ããŒããæäœã確å®ã«å®è¡ãããããã®ã»ã³ã¿ãŒã®äžéšãå©çšã§ããªãå Žåã«æäœæ§ãç¶æããé害çºçæã®æå°ããŠã³ã¿ã€ã ãä¿èšŒã§ããŸãã
é«å¯çšæ§ã®ç®æš
ãã®èšäºã§èª¬æãããœãªã¥ãŒã·ã§ã³ã¯ãGitHubã«å®è£
ããã以åã®é«å¯çšæ§ïŒHAïŒãœãªã¥ãŒã·ã§ã³ã®æ°ããæ¹è¯ããŒãžã§ã³ã§ãã æé·ããã«ã€ããŠãMySQL HAæŠç¥ãå€åã«é©å¿ãããå¿
èŠããããŸãã MySQLããã³GitHubã®ä»ã®ãµãŒãã¹ã«ã€ããŠãåæ§ã®ã¢ãããŒãã«åŸãããåªããŠããŸãã
é«å¯çšæ§ãšãµãŒãã¹æ€åºã®ããã®é©åãªãœãªã¥ãŒã·ã§ã³ãèŠã€ããã«ã¯ãæåã«ããã€ãã®ç¹å®ã®è³ªåã«çããå¿
èŠããããŸãã ãããã®ãµã³ãã«ãªã¹ããæ¬¡ã«ç€ºããŸãã
- ããªãã«ãšã£ãŠéèŠã§ã¯ãªãæå€§ããŠã³ã¿ã€ã ã¯ã©ããããã§ããïŒ
- é害æ€åºããŒã«ã®ä¿¡é Œæ§ã¯ã©ã®ãããã§ããïŒ èª€æ€ç¥ïŒæ©æé害åŠçïŒã¯éèŠã§ããïŒ
- ãã§ãŒã«ãªãŒããŒã·ã¹ãã ã®ä¿¡é Œæ§ é害ã¯ã©ãã§çºçããŸããïŒ
- è€æ°ã®ããŒã¿ã»ã³ã¿ãŒã§ã®ãœãªã¥ãŒã·ã§ã³ã®æå¹æ§ã¯ã©ã®ãããã§ããïŒ äœé
å»¶ããã³é«é
å»¶ãããã¯ãŒã¯ã§ã®ãœãªã¥ãŒã·ã§ã³ã®æå¹æ§ã¯ã©ã®ãããã§ããïŒ
- å®å
šãªããŒã¿ã»ã³ã¿ãŒïŒDPCïŒã®é害ãŸãã¯ãããã¯ãŒã¯ã®åé¢ãçºçããå Žåã§ãããœãªã¥ãŒã·ã§ã³ã¯åŒãç¶ãæ©èœããŸããïŒ
- ç¬ç«ããŠèšé²ããã¯ã©ã¹ã¿ãŒå
ã®2ã€ã®ã¡ã€ã³ãµãŒããŒã®åºçŸã®çµæã鲿¢ãŸãã¯ç·©åããã¡ã«ããºã ïŒããå ŽåïŒ
- ããŒã¿æå€±ã¯ããªãã«ãšã£ãŠéèŠã§ããïŒ ãããããªããã©ã®çšåºŠãŸã§ïŒ
ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ç®çã§ãæåã«ä»¥åã®ãœãªã¥ãŒã·ã§ã³ãæ€èšãããªããããæŸæ£ããããšã«ããã®ããè°è«ããŸãããã
çºèŠã«VIPãšDNSã䜿çšããããšã®æåŠ
åã®ãœãªã¥ãŒã·ã§ã³ã®äžéšãšããŠã次ã䜿çšããŸããã
ãã®å Žåãã¯ã©ã€ã¢ã³ãã¯ãããšãã°mysql-writer-1.github.net
ãªã©ã®ååã§èšé²ããŒããæ€åºããŸããã ãã®ååã«ããããã¹ãã®ä»®æ³IPã¢ãã¬ã¹ïŒVIPïŒã決ãŸããŸããã
ãããã£ãŠãéåžžã®ç¶æ³ã§ã¯ãã¯ã©ã€ã¢ã³ãã¯ååã解決ããåä¿¡ããIPã¢ãã¬ã¹ã«æ¥ç¶ããã ãã§æžã¿ãŸãããã¡ã€ã³ããŒãã¯æ¢ã«åŸ
æ©ããŠããŸããã
3ã€ã®ç°ãªãããŒã¿ã»ã³ã¿ãŒã«ãŸãããæ¬¡ã®ã¬ããªã±ãŒã·ã§ã³ããããžãæ€èšããŠãã ããã

ã¡ã€ã³ããŒãã«é害ãçºçããå Žåãæ°ãããµãŒããŒããã®å ŽæïŒã¬ããªã«ã®1ã€ïŒã«å²ãåœãŠãå¿
èŠããããŸãã
orchestrator
ã¯éå®³ãæ€åºããæ°ãããã¹ã¿ãŒããŒããéžæããŠãåå/ VIPãå²ãåœãŠãŸãã ã¯ã©ã€ã¢ã³ãã¯å®éã«ã¯ã¡ã€ã³ããŒãã®IDãç¥ãããååã ããç¥ã£ãŠããŸããååã¯æ°ããããŒããæããŠããã¯ãã§ãã ãã ããããã«æ³šæããŠãã ããã
VIPã¢ãã¬ã¹ã¯å
±æãããããŒã¿ããŒã¹ãµãŒããŒèªäœãèŠæ±ããŠææããŸãã VIPãåä¿¡ãŸãã¯è§£æŸããã«ã¯ããµãŒããŒã¯ARPèŠæ±ãéä¿¡ããå¿
èŠããããŸãã VIPãææãããµãŒããŒã¯ãæ°ãããã¹ãããã®ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ããåã«ããŸãVIPãè§£æŸããå¿
èŠããããŸãã ãã®ã¢ãããŒãã¯ãããã€ãã®æãŸãããªãçµæã«ã€ãªãããŸãã
- éåžžã¢ãŒãã§ã¯ããã§ãŒã«ãªãŒããŒã·ã¹ãã ã¯ãŸãé害ãçºçããã¡ã€ã³ããŒãã«æ¥ç¶ããVIPãè§£æŸããããã«èŠæ±ããŠãããVIPã®å²ãåœãŠãèŠæ±ããæ°ããã¡ã€ã³ãµãŒããŒã«åãæ¿ããŸãã ããããæåã®ã¡ã€ã³ããŒãã䜿çšã§ããªãå ŽåããŸãã¯VIPã¢ãã¬ã¹ãè§£æŸããèŠæ±ãæåŠããå Žåã¯ã©ãããã°ããã§ããããïŒ ãµãŒããŒãçŸåšéå®³ç¶æ
ã«ããããšãèãããšãæéå
ã«èŠæ±ã«å¿çã§ãããããŸã£ããå¿çã§ããªãå¯èœæ§ã¯ã»ãšãã©ãããŸããã
- ãã®çµæã2人ã®ãã¹ããåãVIPã«å¯Ÿããæš©å©ã䞻匵ããç¶æ³ãçºçããå ŽåããããŸãã æçã®ãããã¯ãŒã¯ãã¹ã«å¿ããŠãããŸããŸãªã¯ã©ã€ã¢ã³ãããããã®ãµãŒããŒã®ããããã«æ¥ç¶ã§ããŸãã
- ãã®ç¶æ³ã§ã®æ£ããæäœã¯ã2ã€ã®ç¬ç«ãããµãŒããŒã®çžäºäœçšã«äŸåãããã®ãããªæ§æã¯ä¿¡é Œã§ããŸããã
- æåã®ã¡ã€ã³ããŒãããªã¯ãšã¹ãã«å¿çããŠãã貎éãªæéãç¡é§ã«ããŸããå€ãã¡ã€ã³ãµãŒããŒã«æ¥ç¶ããŠããéã¯ãæ°ããã¡ã€ã³ãµãŒããŒãžã®åãæ¿ãã¯çºçããŸããã
- åæã«ãVIPã®åå²ãåœãŠã®å Žåã§ããå€ããµãŒããŒäžã®æ¢åã®ã¯ã©ã€ã¢ã³ãæ¥ç¶ãåæããããšããä¿èšŒã¯ãããŸããã ããã§ãã2ã€ã®ç¬ç«ããã¡ã€ã³ããŒããããç¶æ³ã«é¥ããªã¹ã¯ããããŸãã
ç°å¢å
ã®äžéšã®å Žæã§ã¯ãVIPã¢ãã¬ã¹ã¯ç©ççãªå Žæã«é¢é£ä»ããããŠããŸãã ãããã¯ã¹ã€ãããŸãã¯ã«ãŒã¿ãŒã«å²ãåœãŠãããŸãã ãã®ãããå
ã®ãã¹ããšåãç°å¢ã«ãããµãŒããŒã«ã®ã¿VIPã¢ãã¬ã¹ãåå²ãåœãŠã§ããŸãã ç¹ã«ãå Žåã«ãã£ãŠã¯ãå¥ã®ããŒã¿ã»ã³ã¿ãŒã®VIPãµãŒããŒãå²ãåœãŠãããšãã§ãããDNSã倿Žããå¿
èŠããããŸãã
- DNSãžã®å€æŽã®é
åžã«ã¯æéãããããŸãã ã¯ã©ã€ã¢ã³ãã¯ãäºåå®çŸ©ãããæéDNSåãä¿åããŸãã è€æ°ã®ããŒã¿ã»ã³ã¿ãŒãå«ããã§ãŒã«ãªãŒããŒã§ã¯ããã¹ãŠã®é¡§å®¢ã«æ°ããã¡ã€ã³ããŒãã«é¢ããæ
å ±ãæäŸããã®ã«æéãããããããããŠã³ã¿ã€ã ãé·ããªããŸãã
ãããã®å¶éã¯ãæ°ãããœãªã¥ãŒã·ã§ã³ã®æ€çŽ¢ãéå§ããããã«åŒ·å¶ããã®ã«ååã§ããããæ¬¡ã®ããšãèæ
®ããå¿
èŠããããŸããã
- ã¡ã€ã³ããŒãã¯ãé
å»¶ãšè² è·èª¿æŽã枬å®ããããã« ã
pt-heartbeat
ãä»ããŠãã«ã¹ãã±ãããåå¥ã«éä¿¡ããŸããã ãµãŒãã¹ã¯ãæ°ããæå®ãããã¡ã€ã³ããŒãã«è»¢éããå¿
èŠããããŸããã å¯èœã§ããã°ãå€ããµãŒããŒã§ç¡å¹ã«ããŠããå¿
èŠããããŸãã - åæ§ã«ãã¡ã€ã³ããŒãã¯Pseudo-GTIDã®åäœãç¬ç«ããŠå¶åŸ¡ããŸãã ã æ°ããã¡ã€ã³ããŒãã§ãã®ããã»ã¹ãéå§ããã§ããã°å€ãã¡ã€ã³ããŒãã§åæ¢ããå¿
èŠããããŸããã
- æ°ãããã¹ã¿ãŒããŒããæžã蟌ã¿å¯èœã«ãªããŸããã å€ãããŒãïŒå¯èœãªå ŽåïŒã«ã¯
read_only
ïŒèªã¿åãå°çšïŒãå¿
èŠã§ãã
ãããã®è¿œå æé ã«ãããå
šäœçãªããŠã³ã¿ã€ã ãå¢å ããç¬èªã®é害ç¹ãšåé¡ç¹ã远å ãããŸããã
ãœãªã¥ãŒã·ã§ã³ã¯æ©èœããGitHubã¯ããã¯ã°ã©ãŠã³ãã§MySQLã¯ã©ãã·ã¥ãæ£åžžã«åŠçããŸããããHAãžã®ã¢ãããŒããæ¬¡ã®ããã«æ¹åãããã£ãã®ã§ãã
- ç¹å®ã®ããŒã¿ã»ã³ã¿ãŒããã®ç¬ç«æ§ã確ä¿ããŸãã
- ããŒã¿ã»ã³ã¿ãŒã«é害ãçºçããå Žåã®æäœæ§ãä¿èšŒããŸãã
- ä¿¡é Œæ§ã®äœãå
±åäœæ¥ã®ã¯ãŒã¯ãããŒãæŸæ£ãã
- ç·ããŠã³ã¿ã€ã ãççž®ããŸãã
- å¯èœãªéãããã§ã€ã«ãªãŒããŒãæå€±ãªãå®è¡ããŸãã
GitHub HAãœãªã¥ãŒã·ã§ã³ïŒãªãŒã±ã¹ãã¬ãŒã¿ãŒãConsulãGLB
æ°ããæŠç¥ãšããã«äŒŽãæ¹åã«ãããäžèšã®åé¡ã®ã»ãšãã©ãè§£æ¶ãããããçµæãç·©åãããŸãã çŸåšã®HAã·ã¹ãã ã¯ã次ã®èŠçŽ ã§æ§æãããŠããŸãã
- é害æ€åºããã³ãã§ã€ã«ãªãŒããŒã®ããã®ãªãŒã±ã¹ãã¬ãŒã¿ãŒ ã æ¬¡ã®å³ã«ç€ºãããã«ã ãªãŒã±ã¹ãã¬ãŒã¿ãŒ/ã©ããã¹ããŒã ãããã€ãã®ããŒã¿ã»ã³ã¿ãŒã§äœ¿çšããŸãã
- Hashicorp Consul for service discovery;
- ã¯ã©ã€ã¢ã³ããšã¬ã³ãŒãã£ã³ã°ããŒãéã®ãããã·ã¬ã€ã€ãŒãšããŠã®GLB / HAProxy ã GLBãã£ã¬ã¯ã¿ãŒã®ãœãŒã¹ã³ãŒãã¯å
¬éãããŠããŸãã
- ãããã¯ãŒã¯ã«ãŒãã£ã³ã°çšã®
anycast
ãã¯ãããžãŒã

æ°ããã¹ããŒã ã«ãããVIPãšDNSã®å€æŽãå®å
šã«æŸæ£ããããšãã§ããŸããã ããã§ãæ°ããã³ã³ããŒãã³ããå°å
¥ãããšãã«ãããããåé¢ããŠã¿ã¹ã¯ãç°¡çŽ åã§ããŸãã ããã«ãä¿¡é Œã§ããå®å®ãããœãªã¥ãŒã·ã§ã³ã䜿çšããæ©äŒãåŸãŸããã æ°ãããœãªã¥ãŒã·ã§ã³ã®è©³çްãªåæã以äžã«ç€ºããŸãã
éåžžã®æµã
éåžžã®ç¶æ³ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯GLB / HAProxyãä»ããŠèšé²ããŒãã«æ¥ç¶ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯ã¡ã€ã³ãµãŒããŒã®IDãåãåããŸããã åãšåãããã«ãååã®ã¿ã䜿çšããŸãã ããšãã°ã cluster1
ã®ã¡ã€ã³ããŒãã¯mysql-writer-1.github.net
ã§ãã ãã ããçŸåšã®æ§æã§ã¯ããã®ååã¯ãšããŒãã£ã¹ã IPã¢ãã¬ã¹ã«è§£æ±ºãããŸãã
anycast
æè¡ã®ãããã§ãååã¯ã©ãã§ãåãIPã¢ãã¬ã¹ã«è§£æ±ºãããŸãããã¯ã©ã€ã¢ã³ãã®å Žæãèæ
®ãããšããã©ãã£ãã¯ã®æ¹åã¯ç°ãªããŸãã ç¹ã«ãå¯çšæ§ã®é«ãããŒããã©ã³ãµãŒã§ããGLBã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãåããŒã¿ã»ã³ã¿ãŒã«å±éãããŠããŸãã mysql-writer-1.github.net
åžžã«ããŒã«ã«ããŒã¿ã»ã³ã¿ãŒã®GLBã¯ã©ã¹ã¿ãŒã«ã«ãŒãã£ã³ã°ãããŸãã ãã®ããããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¯ããŒã«ã«ãããã·ã«ãã£ãŠåŠçãããŸãã
HAProxyã®äžã§GLBãå®è¡ããŸãã HAProxyãµãŒããŒã¯ãåMySQLã¯ã©ã¹ã¿ãŒã«1ã€ãã€ã æžã蟌ã¿ããŒã«ãæäŸããŸãã ãŸããåããŒã«ã«ã¯1ã€ã®ãµãŒããŒïŒã¯ã©ã¹ã¿ãŒã®ã¡ã€ã³ããŒãïŒã®ã¿ããããŸãã ãã¹ãŠã®ããŒã¿ã»ã³ã¿ãŒã®ãã¹ãŠã®GLB / HAProxyã€ã³ã¹ã¿ã³ã¹ã«ã¯åãããŒã«ãããããããã¯ãã¹ãŠãããã®ããŒã«ã®åããµãŒããŒãæããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãmysql-writer-1.github.net
ã®ããŒã¿ããŒã¹ã«ããŒã¿ãæžã蟌ãå Žåãã©ã®GLBãµãŒããŒã«æ¥ç¶ãããã¯éèŠã§ã¯ãããŸããã ã©ã¡ãã®å Žåã§ããå®éã®ã¡ã€ã³ã¯ã©ã¹ã¿ãŒããŒãcluster1
ãžã®ãªãã€ã¬ã¯ããå®è¡ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®å Žåããã£ã¹ã«ããªãŒã¯GLBã§çµäºããåãã£ã¹ã«ããªãŒã¯äžèŠã§ãã ãã®GLBã¯ãã©ãã£ãã¯ãé©åãªå Žæã«ãªãã€ã¬ã¯ãããŸãã
GLBã¯ããªã¹ããããµãŒããŒã«é¢ããæ
å ±ãã©ãã§ååŸããŸããïŒ GLBãã©ã®ããã«å€æŽããŸããïŒ
é äºã«ããçºèŠ
ConsulãµãŒãã¹ã¯ããµãŒãã¹ãã£ã¹ã«ããªãœãªã¥ãŒã·ã§ã³ãšããŠåºãç¥ãããDNSæ©èœãåŒãåããŸãã ãã ãããã®äŸã§ã¯ãéåžžã«ã¢ã¯ã»ã¹ããããããŒå€ïŒKVïŒã®ã¹ãã¬ãŒãžãšããŠäœ¿çšããŸãã
Consulã®KVãªããžããªã«ãã¯ã©ã¹ã¿ãŒã®ã¡ã€ã³ããŒãã®IDãèšé²ããŸãã åã¯ã©ã¹ã¿ãŒã«ã¯ã察å¿ããã¡ã€ã³ããŒãã®ããŒã¿ãæãKVã¬ã³ãŒãã®ã»ããããããŸãïŒãã®fqdn
ãããŒããipv4ããã³ipv6ã¢ãã¬ã¹ã
åGLB / HAProxyããŒãã¯ãConsulããŒã¿ã®å€æŽã远跡ãããµãŒãã¹ã§ããconsul-templateãèµ·åããŸãïŒãã®å Žåããããã¯ã¡ã€ã³ããŒãã®ããŒã¿ã®å€æŽã§ãïŒã consul-template
ã¯èšå®ãã¡ã€ã«ãäœæããèšå®ã倿Žãããšãã«HAProxyããªããŒãã§ããŸãã
ãã®ãããConsulã®ã¡ã€ã³ããŒãã®IDã®å€æŽã«é¢ããæ
å ±ã¯ãåGLB / HAProxyã€ã³ã¹ã¿ã³ã¹ã§å©çšã§ããŸãã ãã®æ
å ±ã«åºã¥ããŠãã€ã³ã¹ã¿ã³ã¹ã®æ§æãå®è¡ãããæ°ããã¡ã€ã³ããŒããã¯ã©ã¹ã¿ãŒãµãŒããŒããŒã«å
ã®å¯äžã®ãšã³ãã£ãã£ãšããŠç€ºãããŸãã ãã®åŸãã€ã³ã¹ã¿ã³ã¹ãåããŒãããã倿Žãæå¹ã«ãªããŸãã
åããŒã¿ã»ã³ã¿ãŒã«Consulã€ã³ã¹ã¿ã³ã¹ãå±éããŠãããåã€ã³ã¹ã¿ã³ã¹ã¯é«å¯çšæ§ãæäŸããŸãã ãã ãããããã®ã€ã³ã¹ã¿ã³ã¹ã¯äºãã«ç¬ç«ããŠããŸãã ãããã¯è€è£œãããããŒã¿ã亀æããŸããã
Consulã¯å€æŽã«é¢ããæ
å ±ãã©ãã§å
¥æããããŒã¿ã»ã³ã¿ãŒéã§ã©ã®ããã«é
åžããŸããïŒ
ãªãŒã±ã¹ãã¬ãŒã¿ãŒ/ããã
orchestrator/raft
ã¹ããŒã ã䜿çšããŸãã orchestrator
ããŒãã¯ã ã©ããã³ã³ã»ã³ãµã¹ãéããŠäºãã«éä¿¡ããŸãã åããŒã¿ã»ã³ã¿ãŒã«ã¯ã1ã€ãŸãã¯2ã€ã®orchestrator
ããŒãããããŸãã
orchestrator
ã¯ãéå®³ã®æ€åºãMySQLãã§ãŒã«ãªãŒããŒãããã³å€æŽããããã¹ã¿ãŒããŒãããŒã¿ã®Consulãžã®è»¢éãæ
åœããŸãã ãã§ãŒã«ãªãŒããŒã¯åäžã®orchestrator/raft
ãã¹ãã«ãã£ãŠç®¡çãããŸãããã¯ã©ã¹ã¿ãŒãæ°ãããã¹ã¿ãŒã«ãªã£ãããšãorchestrator/raft
倿Žã¯ã raft
ã¡ã«ããºã ã䜿çšããŠãã¹ãŠã®orchestrator
ããŒãã«äŒéãããŸãã
orchestrator
ããŒããã¡ã€ã³ããŒãã®ããŒã¿ã®å€æŽã«é¢ãããã¥ãŒã¹ãåä¿¡ãããšãåããŒãã¯Consulã®ããŒã«ã«ã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ããKVèšé²ãéå§ããŸãã orchestrator
è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãæã€ããŒã¿ã»ã³ã¿ãŒã¯ãConsulã§è€æ°ã®ïŒåäžã®ïŒã¬ã³ãŒããåãåããŸãã
ã¹ããªãŒã å
šäœã®äžè¬çãªãã¥ãŒ
ãã¹ã¿ãŒããŒãã«é害ãçºçããå ŽåïŒ
orchestrator
ããŒãã¯éå®³ãæ€åºããŸããorchestrator/raft
ãã¹ã¿ãŒãå埩ãéå§ããŸãã æ°ãããã¹ã¿ãŒããŒããå²ãåœãŠãããŸããorchestrator/raft
ã¹ããŒã ã¯ãã¡ã€ã³ããŒãã®å€æŽã«é¢ããããŒã¿ãraft
ã¯ã©ã¹ã¿ãŒã®ãã¹ãŠã®ããŒãã«è»¢éããŸãã- å
orchestrator/raft
ã€ã³ã¹ã¿ã³ã¹ã¯ããŒãã®å€æŽã«é¢ããéç¥ãåãåããConsulã®ããŒã«ã«KVã¹ãã¬ãŒãžã«æ°ãããã¹ã¿ãŒããŒãã®IDãæžã蟌ã¿ãŸãã - åGLB / HAProxyã€ã³ã¹ã¿ã³ã¹ã§ã
consul-template
ãµãŒãã¹ãèµ·åãããConsulã®KVãªããžããªã®å€æŽãç£èŠããHAProxyãåæ§æããŠåèµ·åããŸãã - ã¯ã©ã€ã¢ã³ããã©ãã£ãã¯ã¯æ°ãããã¹ã¿ãŒããŒãã«ãªãã€ã¬ã¯ããããŸãã
ã³ã³ããŒãã³ãããšã«ã責任ãæç¢ºã«åæ£ãããæ§é å
šäœã倿§åããã³ç°¡çŽ åãããŸãã orchestrator
ã¯ããŒããã©ã³ãµãŒãšå¯Ÿè©±ããŸããã é äºã¯ãæ
å ±ã®åºæã«ã€ããŠã®æ
å ±ãå¿
èŠãšããŸããã ãããã·ãµãŒããŒã¯Consulã§ã®ã¿åäœããŸãã ã¯ã©ã€ã¢ã³ãã¯ãããã·ã®ã¿ã§åäœããŸãã
ããã«ïŒ
- DNSã«å€æŽãå ããŠããããã«é¢ããæ
å ±ãåºããå¿
èŠã¯ãããŸããã
- TTLã¯äœ¿çšãããŸããã
- ã¹ã¬ããã¯ããšã©ãŒç¶æ
ã®ãã¹ãããã®å¿çãåŸ
æ©ããŸããã äžè¬ã«ãããã¯ç¡èŠãããŸãã
æµããå®å®ãããããã«ãæ¬¡ã®æ¹æ³ãé©çšããŸãã
- HAProxy
hard-stop-after
ãã©ã¡ãŒã¿ãŒã¯éåžžã«å°ããªå€ã«èšå®ãããŸãã æžã蟌ã¿ããŒã«å
ã®æ°ãããµãŒããŒã§HAProxyãåèµ·åãããšããµãŒããŒã¯å€ããã¹ã¿ãŒããŒããžã®æ¢åã®æ¥ç¶ããã¹ãŠèªåçã«çµäºããŸãã
hard-stop-after
ãã©ã¡ãŒã¿ãŒãèšå®ãããšãã¯ã©ã€ã¢ã³ãããã®ã¢ã¯ã·ã§ã³ãåŸ
ããã«æžã¿ãŸããããã«ãã¯ã©ã¹ã¿ãŒå
ã§2ã€ã®ã¡ã€ã³ããŒããçºçããå¯èœæ§ã®ããè² ã®çµæãæå°éã«æããããŸãã ããã«ã¯éæ³ããªãããšãçè§£ããããšãéèŠã§ãããããã«ãããå€ãé¢ä¿ãå£ãããŸã§ã«æéãããããŸãã ããããäžå¿«ãªé©ããåŸ
ã€ã®ããããããšãã§ããæç¹ããããŸãã
- ConsulãµãŒãã¹ã®ç¶ç¶çãªå¯çšæ§ã¯å¿
èŠãããŸããã å®éããã§ã€ã«ãªãŒããŒäžã«ã®ã¿äœ¿çšå¯èœã«ããå¿
èŠããããŸãã ConsulãµãŒãã¹ãå¿çããªãå ŽåãGLBã¯ææ°ã®æ¢ç¥ã®å€ã§åŒãç¶ãåäœããææ¬çãªå¯Ÿçãè¬ããŸããã
- GLBã¯ãæ°ããå²ãåœãŠããããã¹ã¿ãŒããŒãã®IDã確èªããããã«æ§æãããŠããŸãã ç¶æ³äŸåã®MySQLããŒã«ãšåæ§ã«ããµãŒããŒãå®éã«æžã蟌ã¿å¯èœã§ããããšã確èªããããã«ãã§ãã¯ãå®è¡ãããŸãã Consulã§ã¡ã€ã³ããŒãã®IDã誀ã£ãŠåé€ããå Žåãåé¡ã¯ãªãã空ã®ã¬ã³ãŒãã¯ç¡èŠãããŸãã 誀ã£ãŠå¥ã®ãµãŒããŒïŒã¡ã€ã³ãµãŒããŒã§ã¯ãªãïŒã®ååãConsulã«æžã蟌ãã å Žåããã®å Žåã¯åé¡ãããŸãããGLBã¯ãããæŽæ°ãããæåŸã®æå¹ãªç¶æ
ã§åŒãç¶ãåäœããŸãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ãåé¡ãæ€èšããé«å¯çšæ§ã®ç®æšãåæããŸãã
ãªãŒã±ã¹ãã¬ãŒã¿ãŒ/ã©ããã«ããã¯ã©ãã·ã¥æ€åº
orchestrator
ã¯ãé害æ€åºã«å
æ¬çãªã¢ãããŒããæ¡çšããŠãããããããŒã«ã®é«ãä¿¡é Œæ§ãä¿èšŒãããŸãã 誀æ€ç¥ã®çµæã¯çºçãããæ©æã®é害ã¯å®è¡ãããŸãããã€ãŸããäžå¿
èŠãªããŠã³ã¿ã€ã ãæé€ãããŸãã
orchestrator/raft
ã¹ããŒã ã¯ãããŒã¿ã»ã³ã¿ãŒã®å®å
šãªãããã¯ãŒã¯åé¢ã®ç¶æ³ãåŠçããŸãïŒããŒã¿ã»ã³ã¿ãŒã®ããã§ã³ã¹ãïŒã ããŒã¿ã»ã³ã¿ãŒã®ãããã¯ãŒã¯åé¢ã¯æ··ä¹±ãåŒãèµ·ããå¯èœæ§ããããŸããããŒã¿ã»ã³ã¿ãŒå
ã®ãµãŒããŒã¯äºãã«éä¿¡ã§ããŸãã ç¹å®ã®ããŒã¿ã»ã³ã¿ãŒãŸãã¯ä»ã®ãã¹ãŠã®ããŒã¿ã»ã³ã¿ãŒå
ã®ãµãŒããŒ-æ¬åœã«å€ç«ããŠãã人ãçè§£ããæ¹æ³ã¯ïŒ
orchestrator/raft
ã¹ããŒã ã§ã¯ã orchestrator/raft
ãã¹ã¿ãŒã¯ãã§ãŒã«ãªãŒããŒã§ãã ããŒãããªãŒããŒã«ãªããã°ã«ãŒãå
ã®å€æ°æŽŸïŒã¯ã©ãŒã©ã ïŒã®ãµããŒããåããŸãã orchestrator
ããŒãã¯ãåäžã®ããŒã¿ã»ã³ã¿ãŒã§ã¯éåæ°ãæäŸã§ããã n-1
ããŒã¿ã»ã³ã¿ãŒã§ã¯æäŸã§ãããããªæ¹æ³ã§å±éããŸããã
ããŒã¿ã»ã³ã¿ãŒã®å®å
šãªãããã¯ãŒã¯åé¢ã®å Žåããã®ã»ã³ã¿ãŒã®orchestrator
ããŒãã¯ä»ã®ããŒã¿ã»ã³ã¿ãŒã®åæ§ã®ããŒãããåæãããŸãã ãã®çµæãéé¢ãããããŒã¿ã»ã³ã¿ãŒã®orchestrator
ããŒãã¯ã raft
ã¯ã©ã¹ã¿ãŒã®å
é ã«ç«ã€ããšã¯ã§ããŸããã ãã®ãããªããŒãããã¹ã¿ãŒã®å Žåããã®ã¹ããŒã¿ã¹ã¯å€±ãããŸãã æ°ãããã¹ãã«ã¯ãä»ã®ããŒã¿ã»ã³ã¿ãŒã®ããŒãã®1ã€ãå²ãåœãŠãããŸãã ãã®ãªãŒããŒã¯ãçžäºã«ããåãã§ããä»ã®ãã¹ãŠã®ããŒã¿ã»ã³ã¿ãŒããµããŒãããŸãã
ãã®æ¹æ³ã§ã¯ã orchestrator
ãã¹ã¿ãŒã¯åžžã«ãããã¯ãŒã¯åé¢ãããããŒã¿ã»ã³ã¿ãŒã®å€éšã«ãããŸãã ãã¹ã¿ãŒããŒããåé¢ãããããŒã¿ã»ã³ã¿ãŒã«ããå Žåã orchestrator
ã¯ãã§ãŒã«ãªãŒããŒãéå§ããŠã䜿çšå¯èœãªããŒã¿ã»ã³ã¿ãŒã®ããããã®ãµãŒããŒã«çœ®ãæããŸãã å©çšå¯èœãªããŒã¿ã»ã³ã¿ãŒã®å®è¶³æ°ã«æ±ºå®ãå§ä»»ããããšã«ãããããŒã¿ã»ã³ã¿ãŒã®åé¢ã®åœ±é¿ã軜æžããŸãã
ããè¿
éãªéç¥
ã¡ã€ã³ããŒãã®å€æŽéç¥ãé«éåããããšã«ãããåèšããŠã³ã¿ã€ã ãããã«ççž®ã§ããŸãã ãããéæããæ¹æ³ã¯ïŒ
orchestrator
ããã§ã€ã«ãªãŒããŒãéå§ãããšããµãŒããŒã®ã°ã«ãŒããèæ
®ããããã®ãã¡ã®1ã€ãã¡ã€ã³ã®ãµãŒããŒãšããŠå²ãåœãŠãããšãã§ããŸãã ã¬ããªã±ãŒã·ã§ã³ã«ãŒã«ãæšå¥šäºé
ãããã³å¶éäºé
ãèæ
®ããŠãåœŒã¯æé©ãªè¡åæ¹éã«ã€ããŠæ
å ±ã«åºã¥ããæ±ºå®ãäžãããšãã§ããŸãã
次ã®å
åã«ããã°ã圌ã¯ã¢ã¯ã»ã¹å¯èœãªãµãŒããŒãã¡ã€ã³ã®ã¢ãã€ã³ãã¡ã³ãã®çæ³çãªåè£ã§ããããšãçè§£ã§ããŸãã
- ãµãŒããŒãææ Œããã®ã劚ãããã®ã¯äœããããŸããïŒãããŠããããããŠãŒã¶ãŒã¯ãã®ãµãŒããŒãæšå¥šããŸãïŒã
- ãµãŒããŒãä»ã®ãã¹ãŠã®ãµãŒããŒãã¬ããªã«ãšããŠäœ¿çšã§ããããšãæåŸ
ãããŸãã
ãã®å Žåã orchestrator
ãŸããµãŒããŒãæžã蟌ã¿å¯èœãšããŠæ§æãããã®ã¹ããŒã¿ã¹ã®å¢å ãããã«éç¥ããŸãïŒãã®å Žåãã¬ã³ãŒããConsulã®KVãªããžããªã«æžã蟌ã¿ãŸãïŒã orchestrator , .
, , GLB , , . : !
MySQL , . : , , , .
, . , , . , , , .
: 500
. . ( ), .
( ) . , .
, . , , . , , , .
, / pt-heartbeat
/ , . , pt-heartbeat
, read_only
, .
pt-heartbeat
, . . . , pt-heartbeat
.
orchestrator
orchestrator :
- Pseudo-GTID;
- , ;
- (
read_only
), .
, . , , , . orchestrator
.
- , , . , -, .
, .
, , , - . . STONITH . , , , «» - . , , .
: Consul , . . , , , , .
çµæ
orchestrator/GLB/Consul :
- ;
- ;
- ;
- ;
- , ( );
- ;
10-13
.
20
, â 25
.
ãããã«
«// » , , . . , .