
ããã«ã¡ã¯ãããïŒç§ã¯ã·ã¹ãã 管çããŒã ã®è²¬ä»»è
ãã¢ã«ãã ã»ã«ã©ãã·ã§ãã§ãã éå»1幎éãå€ãã®æ°è£œåããªãªãŒã¹ããŠããŸãããAPIãµãŒãã¹ã容æã«æ¡åŒµå¯èœã§ããã©ãŒã«ããã¬ã©ã³ã¹ãåãããŠãŒã¶ãŒè² è·ã®æ¥æ¿ãªå¢å ã«ã察å¿ã§ããããšã確èªããããšèããŸãããç§ãã¡ã®ãã©ãããã©ãŒã ã¯OpenStackäžã«å®è£
ãããŠããããã©ãŒã«ããã¬ã©ã³ã¹ãªã·ã¹ãã ãå®çŸããããã«ãã©ã®ãããªã³ã³ããŒãã³ãã®ãã©ãŒã«ããã¬ã©ã³ã¹åé¡ã解決ããå¿
èŠããã£ãããã話ãããããšæããŸããããã¯ãOpenStackäžã§è£œåãéçºããŠããæ¹ã
ã«ãšã£ãŠè峿·±ãå
容ã«ãªããšæããŸãã
ãã©ãããã©ãŒã å šäœã®ã¬ãžãªãšã³ã¹ã¯ããã®æ§æèŠçŽ ã®ã¬ãžãªãšã³ã¹ã«ãã£ãŠæ§æãããŸãããã®ããããªã¹ã¯ãç¹å®ãã解決ãããã¹ãŠã®ã¬ãã«ã段éçã«æ€èšããŠãããŸãã
ãã®ã¹ããŒãªãŒã®ãããªçã¯ãã¢ããã¿ã€ã ã®4æ¥ç®ã®ã«ã³ãã¡ã¬ã³ã¹ã§çºè¡šããããã®ã§ãäž»å¬è
㯠ããã²ã芧ãã ãã .
ç©çã¢ãŒããã¯ãã£ã®ãã©ãŒã«ããã¬ã©ã³ã¹
MCSã¯ã©ãŠãã®ãããªãã¯éšåã¯çŸåšã200ã€ã®Tier IIIããŒã¿ã»ã³ã¿ãŒãæ ç¹ãšããŠããããã®éã«ã¯ç©çã¬ãã«ã§ç°ãªãã«ãŒãã§äºçŽããããã©ã€ããŒãããŒã¯ãã¡ã€ããŒãæ·èšãããŠãããã¹ã«ãŒãããã¯XNUMXGbpsã§ããTier IIIã¬ãã«ã¯ãç©çã€ã³ãã©ã¹ãã©ã¯ãã£ã«å¿ èŠãªã¬ãã«ã®ãã©ãŒã«ããã¬ã©ã³ã¹ãæäŸããŸãã
ããŒã¯ãã¡ã€ããŒã¯ç©çã¬ãã«ãšè«çã¬ãã«ã®äž¡æ¹ã§åé·åãããŠããŸãããã£ãã«ã®åé·åããã»ã¹ã¯å埩çã§ãããåââé¡ãçºçãããããããŒã¿ã»ã³ã¿ãŒéã®æ¥ç¶ãç¶ç¶çã«æ¹åããŠããŸãã
äŸãã°ãã€ãæè¿ãããŒã¿ã»ã³ã¿ãŒè¿ãã®äºæžã§äœæ¥äžã«ãæåæ©ããã€ãã貫éããã¡ã€ã³ãšããã¯ã¢ããã®å ã±ãŒãã«ã®äž¡æ¹ããã®ãã€ãå ã«ãã£ãããšã倿ããŸãããããŒã¿ã»ã³ã¿ãŒãšã®ãã©ãŒã«ããã¬ã©ã³ãéä¿¡ãã£ãã«ããäºæžã®ããå°ç¹ã§è匱ã§ããããšã倿ããŸããããã®çµæãã€ã³ãã©ã®äžéšãå©çšã§ããªããªããŸãããç§ãã¡ã¯çµè«ãå°ãåºãã飿¥ããäºæžãã远å ã®å ã±ãŒãã«ãæ·èšãããªã©ãããã€ãã®å¯Ÿçãè¬ããŸããã
ããŒã¿ã»ã³ã¿ãŒã«ã¯éä¿¡ãããã€ãã®æ ç¹ããããBGPçµç±ã§ãã¬ãã£ãã¯ã¹ããããŒããã£ã¹ãããŠããŸãããããã¯ãŒã¯ã®æ¹åããšã«æé©ãªã¡ããªãã¯ãéžæãããããŸããŸãªã¯ã©ã€ã¢ã³ãã«æé«ã®æ¥ç¶å質ãæäŸããŸãããããããã€ããçµç±ããæ¥ç¶ãåæãããå Žåãå©çšå¯èœãªãããã€ããçµç±ããŠã«ãŒãã£ã³ã°ãåæ§ç¯ããŸãã
ãããã€ããŒã«é害ãçºçããå Žåãèªåçã«æ¬¡ã®ãããã€ããŒã«åãæ¿ããŸããããŒã¿ã»ã³ã¿ãŒã®1ã€ã«é害ãçºçããå Žåã2ã€ç®ã®ããŒã¿ã»ã³ã¿ãŒã«ãµãŒãã¹ã®ãã©ãŒã³ããŒãä¿åãããå šè² è·ãåŒãåããŸãã

ç©çã€ã³ãã©ã¹ãã©ã¯ãã£ã®å埩å
ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãã©ãŒã«ããã¬ã©ã³ã¹ã«äœ¿çšãããã®
åœç€Ÿã®ãµãŒãã¹ã¯ã倿°ã®ãªãŒãã³ãœãŒã¹ ã³ã³ããŒãã³ãã«åºã¥ããŠæ§ç¯ãããŠããŸãã
ExaBGP â BGPããŒã¹ã®ãã€ãããã¯ã«ãŒãã£ã³ã°ãããã³ã«ãçšããŠæ§ã ãªæ©èœãå®è£ ãããµãŒãã¹ã§ããåœç€Ÿã§ã¯ããŠãŒã¶ãŒãAPIã«ã¢ã¯ã»ã¹ããéã«äœ¿çšãããã¯ã€ãIPã¢ãã¬ã¹ãã¢ããŠã³ã¹ããããã«ããã®ãµãŒãã¹ãç©æ¥µçã«æŽ»çšããŠããŸãã
ããããã· OSIã¢ãã«ã®æ§ã ãªã¬ãã«ã§éåžžã«æè»ãªãã©ãã£ãã¯åæ£ã«ãŒã«ãèšå®ã§ããé«è² è·ãã©ã³ãµãŒã§ããããŒã¿ããŒã¹ãã¡ãã»ãŒãžãããŒã«ãŒãAPIãµãŒãã¹ãWebãµãŒãã¹ã瀟å ãããžã§ã¯ããªã©ããããããµãŒãã¹ãžã®è² è·åæ£ã«äœ¿çšããŠããããã¹ãŠãHAProxyã®èåŸã«ãããŸãã
APIã¢ããªã±ãŒã·ã§ã³ â Python ã§æžããã Web ã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã¯ããã䜿çšããŠã€ã³ãã©ã¹ãã©ã¯ãã£ããµãŒãã¹ã管çããŸãã
åŽåè ã®å¿å (以äžãã¯ãŒã«ãŒ) â OpenStackãµãŒãã¹ã«ãããŠãAPIã³ãã³ããã€ã³ãã©ã¹ãã©ã¯ãã£ã«éä¿¡ããããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ããŒã¢ã³ã§ããäŸãã°ããã£ã¹ã¯äœæã¯ã¯ãŒã«ãŒã§è¡ãããäœæèŠæ±ã¯APIã¢ããªã±ãŒã·ã§ã³ã§è¡ãããŸãã
OpenStack ã¢ããªã±ãŒã·ã§ã³æšæºã¢ãŒããã¯ãã£
OpenStackåãã«éçºããããµãŒãã¹ã®ã»ãšãã©ã¯ãåäžã®ãã©ãã€ã ã«åŸãããã«èšèšãããŠããŸãããµãŒãã¹ã¯éåžžãAPIãšã¯ãŒã«ãŒïŒããã¯ãšã³ãå®è¡ããã°ã©ã ïŒã®2ã€ã®éšåã§æ§æãããŸããAPIã¯äžè¬çã«Pythonã§èšè¿°ãããWSGIã¢ããªã±ãŒã·ã§ã³ã§ãããç¬ç«ããããã»ã¹ïŒããŒã¢ã³ïŒãšããŠèµ·åãããããNginxãApacheãªã©ã®æ¢è£œã®WebãµãŒããŒãä»ããŠèµ·åãããŸããAPIã¯ãŠãŒã¶ãŒã®ãªã¯ãšã¹ããåŠçããå®è¡ã®ããã®è¿œå æç€ºãã¯ãŒã«ãŒã¢ããªã±ãŒã·ã§ã³ã«æž¡ããŸãã転éã¯ã¡ãã»ãŒãžãããŒã«ãŒïŒéåžžã¯RabbitMQïŒãä»ããŠè¡ãããŸããããã®ä»ã®ãããŒã«ãŒã®ãµããŒãã¯äžååã§ããã¡ãã»ãŒãžããããŒã«ãŒã«å°éãããšãã¯ãŒã«ãŒã«ãã£ãŠåŠçãããå¿ èŠã«å¿ããŠã¬ã¹ãã³ã¹ãè¿ãããŸãã
ãã®ãã©ãã€ã ã§ã¯ãRabbitMQãšããŒã¿ããŒã¹ãšããå ±éã®é害ç¹ãåé¢ãããŠãããšèããããŸããããããRabbitMQã¯åäžã®ãµãŒãã¹å ã§åé¢ãããŠãããçè«äžã¯ãµãŒãã¹ããšã«åå¥ã«èšå®ã§ããŸãããã®ãããMCSã§ã¯ãããã®ãµãŒãã¹ãå¯èœãªéãåé¢ãããããžã§ã¯ãããšã«åå¥ã®ããŒã¿ããŒã¹ãåå¥ã®RabbitMQãäœæããŸãããã®ã¢ãããŒãã¯ãè匱ãªç®æã§é害ãçºçããå Žåã§ãããµãŒãã¹å šäœãããŠã³ããã®ã§ã¯ãªããäžéšã®ã¿ãããŠã³ããç¹ã§åªããŠããŸãã
ã¯ãŒã«ãŒ ã¢ããªã±ãŒã·ã§ã³ã®æ°ã«å¶éã¯ãªãããããã©ã³ãµãŒã®èåŸã§ API ãç°¡åã«æ°Žå¹³æ¹åã«æ¡åŒµããŠãããã©ãŒãã³ã¹ãšãã©ãŒã«ã ãã¬ã©ã³ã¹ãåäžãããããšãã§ããŸãã
äžéšã®ãµãŒãã¹ã§ã¯ãAPIãšã¯ãŒã«ãŒéã§è€éãªã·ãŒã±ã³ã·ã£ã«æäœãçºçããå ŽåããµãŒãã¹å ã§ã®èª¿æŽãå¿ èŠã«ãªããŸãããã®ãããªå ŽåãRedisãMemcacheãetcdãªã©ã®ã¯ã©ã¹ã¿ãŒã·ã¹ãã ãšãã£ãåäžã®èª¿æŽã»ã³ã¿ãŒã䜿çšãããŸããããã«ãããããã¯ãŒã«ãŒãå¥ã®ã¯ãŒã«ãŒã«ããã®ã¿ã¹ã¯ã¯èªåã«å²ãåœãŠãããïŒåŒãåããªãã§ãã ããïŒãããšãäŒããããšãã§ããŸããç§ãã¡ã¯etcdã䜿çšããŠããŸããéåžžãã¯ãŒã«ãŒã¯ããŒã¿ããŒã¹ãšç©æ¥µçã«éä¿¡ããæ å ±ã®æžã蟌ã¿ãšèªã¿åããè¡ããŸããããŒã¿ããŒã¹ã«ã¯ããã«ããã¹ã¿ãŒã¯ã©ã¹ã¿ãŒå ã«ããmariadbã䜿çšããŠããŸãã
ãã®ãããªå žåçãªåäžãµãŒãã¹ã¯ãOpenStackã§äžè¬çã«åãå ¥ããããŠããæ¹æ³ã§æ§æãããŸããããã¯ã¯ããŒãºãã·ã¹ãã ãšã¿ãªãããšãã§ããã¹ã±ãŒãªã³ã°ãšãã©ãŒã«ããã¬ã©ã³ã¹ã®ææ³ã¯æ¥µããŠæç¢ºã§ããäŸãã°ãAPIã®ãã©ãŒã«ããã¬ã©ã³ã¹ãå®çŸããã«ã¯ããã©ã³ãµãŒãAPIã®åã«çœ®ãã ãã§ååã§ããã¯ãŒã«ãŒã®ã¹ã±ãŒãªã³ã°ã¯ãã¯ãŒã«ãŒã®æ°ãå¢ããããšã§å®çŸãããŸãã
å šäœçãªã¹ããŒã ã«ããã匱ç¹ã¯RabbitMQãšMariaDBã§ãããããã®ã¢ãŒããã¯ãã£ã«ã€ããŠã¯å¥ã®èšäºã§è©³ãã説æãã䟡å€ããããŸãããã®èšäºã§ã¯ãAPIã®ãã©ãŒã«ããã¬ã©ã³ã¹ã«çŠç¹ãåœãŠãããšæããŸãã

Openstackã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ãã¯ã©ãŠããã©ãããã©ãŒã ã®ãã©ã³ã¹ãšãã©ãŒã«ããã¬ã©ã³ã¹
ExaBGP ã§ HAProxy ããŒããã©ã³ãµãŒããã©ãŒã«ããã¬ã©ã³ãã«ãã
APIãã¹ã±ãŒã©ãã«ãé«éããããŠãã©ãŒã«ããã¬ã©ã³ãã«ããããã«ãAPIã®å段ã«ãã©ã³ãµãŒãé 眮ããŸãããããã§HAProxyãéžæããŸãããç§ã®èãã§ã¯ãHAProxyã¯ç§ãã¡ã®ã¿ã¹ã¯ã«å¿ èŠãªãã¹ãŠã®ç¹æ§ãåããŠããŸããè€æ°ã®OSIã¬ãã«ã§ã®ãã©ã³ã·ã³ã°ã管çã€ã³ã¿ãŒãã§ãŒã¹ãæè»æ§ãšã¹ã±ãŒã©ããªãã£ãè±å¯ãªãã©ã³ã·ã³ã°ææ³ãã»ãã·ã§ã³ããŒãã«ã®ãµããŒããªã©ã§ãã
æåã«è§£æ±ºããå¿ èŠããã£ãåé¡ã¯ããã©ã³ãµèªäœã®ãã©ãŒã«ããã¬ã©ã³ã¹ã§ããããã©ã³ãµãåã«ã€ã³ã¹ããŒã«ããã ãã§ã¯ãé害ç¹ïŒãã©ã³ãµãæ éãããµãŒãã¹ãã¯ã©ãã·ã¥ããïŒãçããŠããŸããŸãããããé²ããããExaBGPãšHAProxyã䜵çšããŸããã
ExaBGP ã§ã¯ããµãŒãã¹ã®ãã«ã¹ãã§ãã¯ã¡ã«ããºã ãå®è£ ã§ããŸãããã®ã¡ã«ããºã ã䜿çšã㊠HAProxy ã®ãã«ã¹ãã§ãã¯ãè¡ããåé¡ãçºçããå Žåã«ã¯ BGP ãã HAProxy ãµãŒãã¹ãç¡å¹åããŸããã
ExaBGP+HAProxyã¹ããŒã
- å¿ èŠãªãœãããŠã§ã¢ã§ãã ExaBGP ãš HAProxy ã 3 å°ã®ãµãŒããŒã«ã€ã³ã¹ããŒã«ããŸãã
- åãµãŒããŒã«ã«ãŒããã㯠ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãã
- 3 å°ã®ãµãŒããŒãã¹ãŠã§ããã®ã€ã³ã¿ãŒãã§ãŒã¹ã«åããã¯ã€ã IP ã¢ãã¬ã¹ãç»é²ããŸãã
- ãã¯ã€ã IP ã¢ãã¬ã¹ã¯ãExaBGP çµç±ã§ã€ã³ã¿ãŒãããã«å ¬éãããŸãã
ãã©ãŒã«ããã¬ã©ã³ã¹ã¯ã3å°ã®ãµãŒããŒãã¹ãŠããåãIPã¢ãã¬ã¹ãã¢ããŠã³ã¹ããããšã§å®çŸãããŸãããããã¯ãŒã¯ã®èгç¹ããèŠããšãåãã¢ãã¬ã¹ã«3ã€ã®ç°ãªããã¯ã¹ããããããã¢ã¯ã»ã¹ã§ããããšã«ãªããŸããã«ãŒã¿ãŒã¯3ã€ã®åäžã®ã«ãŒããèªèããç¬èªã®ã¡ããªãã¯ïŒéåžžã¯åããªãã·ã§ã³ïŒã«åºã¥ããŠæãåªå 床ã®é«ãã«ãŒããéžæãããã©ãã£ãã¯ã¯ããããã®ãµãŒããŒã«ã®ã¿éä¿¡ãããŸãã
HAProxy ã®åäœã«åé¡ãçºçããå ŽåããµãŒããŒã«é害ãçºçããå ŽåãExaBGP ã¯ã«ãŒãã®ã¢ããã¿ã€ãºã忢ãããã©ãã£ãã¯ã¯ã¹ã ãŒãºã«å¥ã®ãµãŒããŒã«åãæ¿ãããŸãã
ãã®ããã«ããŠããã©ã³ãµãŒã®ãã©ãŒã«ã ãã¬ã©ã³ã¹ãå®çŸããŸããã

HAProxy ããŒããã©ã³ãµã®ãã©ãŒã«ããã¬ã©ã³ã¹
ãã®æ¹åŒã¯äžå®å šã§ããããšã倿ããŸãããHAProxyãäºçŽããæ¹æ³ã¯åŠç¿ããŸãããããµãŒãã¹å ã§è² è·ã忣ããæ¹æ³ã¯åŠç¿ããŸããã§ãããããã§ããã®æ¹åŒãå°ãæ¡åŒµããè€æ°ã®ãã¯ã€ãIPã¢ãã¬ã¹éã§è² è·åæ£ãè¡ãããã«åãæ¿ããŸããã
DNSããŒã¹ã®ãã©ã³ã·ã³ã°ãšBGP
HAProxy ã®æåã§ã®è² è·åæ£ã®åé¡ã¯æªè§£æ±ºã®ãŸãŸã§ããããããç§ãã¡ã®ã±ãŒã¹ã®ããã«ãéåžžã«ç°¡åã«è§£æ±ºã§ããŸãã
3å°ã®ãµãŒããŒããã©ã³ã¹ããéçšããã«ã¯ãXNUMXã€ã®ãã¯ã€ãIPã¢ãã¬ã¹ãšå€ãè¯ãDNSãå¿ èŠã§ãããããã®ã¢ãã¬ã¹ã¯ãããããåHAProxyã®ã«ãŒãããã¯ã€ã³ã¿ãŒãã§ãŒã¹ã§å®çŸ©ãããã€ã³ã¿ãŒãããã«ã¢ããŠã³ã¹ãããŸãã
OpenStackã§ã¯ããªãœãŒã¹ç®¡çã«ãµãŒãã¹ã«ã¿ãã°ã䜿çšãããç¹å®ã®ãµãŒãã¹ã®APIãšã³ããã€ã³ããæå®ãããŸãããã®ã«ã¿ãã°ã§ã¯ããã¡ã€ã³åãpublic.infra.mail.ruããæå®ããŸãããã®ãã¡ã€ã³åã¯DNSçµç±ã§3ã€ã®ç°ãªãIPã¢ãã¬ã¹ã«è§£æ±ºãããŸãããã®çµæãDNSçµç±ã§3ã€ã®ã¢ãã¬ã¹éã§è² è·åæ£ãå®çŸãããŸãã
ãããããã¯ã€ããªã¹ãIPã¢ãã¬ã¹ãã¢ããŠã³ã¹ããéã«ã¯ãµãŒããŒéžæã®åªå é äœãå¶åŸ¡ã§ããªãããããŸã ãã©ã³ã¹èª¿æŽã¯è¡ãããŠããŸãããéåžžãIPã¢ãã¬ã¹ã®åªå é äœã«åºã¥ããŠ1å°ã®ãµãŒããŒã®ã¿ãéžæãããBGPã§ã¯ã¡ããªãã¯ãæå®ãããŠããªããããæ®ãã®2å°ã¯ã¢ã€ãã«ç¶æ ã«ãªããŸãã
ExaBGPçµç±ã§ç°ãªãã¡ããªãã¯ãæã€ã«ãŒããçºè¡ãå§ããŸãããåãã©ã³ãµãŒã¯3ã€ã®ãã¯ã€ãIPã¢ãã¬ã¹ãã¹ãŠãåºåããŸããããã®ãã¡ã®1ã€ïŒãã®ãã©ã³ãµãŒã®ã¡ã€ã³IPã¢ãã¬ã¹ïŒã¯æå°ã¡ããªãã¯ã§åºåãããŸãããã®ããã3ã€ã®ãã©ã³ãµãŒãã¹ãŠã皌åããŠããå Žåãæåã®IPã¢ãã¬ã¹ãžã®ãªã¯ãšã¹ãã¯æåã®ãã©ã³ãµãŒã«ã2çªç®ã®IPã¢ãã¬ã¹ãžã®ãªã¯ãšã¹ãã¯2çªç®ã®ãã©ã³ãµãŒã«ã3çªç®ã®IPã¢ãã¬ã¹ãžã®ãªã¯ãšã¹ãã¯3çªç®ã®ãã©ã³ãµãŒã«éãããŸãã
ãã©ã³ãµãŒã®1ã€ã«é害ãçºçããå Žåãã©ããªãã§ããããïŒããããã®ãã©ã³ãµãŒã«é害ãçºçããå Žåããã®ã¡ã€ã³ã¢ãã¬ã¹ã¯ä»ã®2ã€ã®ãã©ã³ãµãŒããåŒãç¶ãã¢ããã¿ã€ãºããããã©ãã£ãã¯ã¯ãããã®éã§ååé ãããŸãããã®ãããDNSçµç±ã§ãŠãŒã¶ãŒã«è€æ°ã®IPã¢ãã¬ã¹ãåæã«æäŸãããŸããDNSãšç°ãªãã¡ããªãã¯ã«ãããã©ã³ã·ã³ã°ã«ããã3ã€ã®ãã©ã³ãµãŒãã¹ãŠã«è² è·ãåçã«åæ£ãããŸããåæã«ããã©ãŒã«ããã¬ã©ã³ã¹ãç¶æãããŸãã

DNS + BGP ã«åºã¥ã HAProxy è² è·åæ£
ExaBGPãšHAProxyã®çžäºäœçš
ããã§ããµãŒããŒé害çºçæã«ã¯ã«ãŒãã¢ããŠã³ã¹ã®çµäºãããŒã¹ãšãããã©ãŒã«ããã¬ã©ã³ã¹ãå®è£ ããŸãããããããHAProxyã¯ãµãŒããŒé害以å€ã®çç±ãäŸãã°ç®¡çãšã©ãŒããµãŒãã¹å éšã®é害ã«ãã£ãŠãåæãããå¯èœæ§ããããŸãããã®ãããªå Žåã§ããæ éãããã©ã³ãµãŒãè² è·ããåãé¢ãå¿ èŠããããããå¥ã®ã¡ã«ããºã ãå¿ èŠã§ãã
ããã§ã以åã®ã¹ããŒã ãæ¡åŒµããExaBGPãšHAProxyéã®ããŒãããŒããå®è£ ããŸãããããã¯ãExaBGPãã«ã¹ã¿ã ã¹ã¯ãªããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒã¿ã¹ã確èªããéã«ãExaBGPãšHAProxyéã®ããåãããœãããŠã§ã¢ã§å®è£ ãããã®ã§ãã
ãããå®çŸããã«ã¯ãExaBGPã®èšå®ãã¡ã€ã«ã§HAProxyã®ç¶æ ã確èªã§ãããã«ã¹ãã§ãã«ãŒãèšå®ããå¿ èŠããããŸããä»åã®ã±ãŒã¹ã§ã¯ãHAProxyã«ãã«ã¹ããã¯ãšã³ããèšå®ããExaBGPåŽããã·ã³ãã«ãªGETãªã¯ãšã¹ãã§ç¶æ ã確èªããŸãããã¢ããŠã³ã¹ãéä¿¡ãããªããªã£ãå ŽåãHAProxyã¯ããããåäœããŠããªããããã¢ããŠã³ã¹ããå¿ èŠã¯ãããŸããã

HAProxyãã«ã¹ãã§ãã¯
HAProxyãã¢: ã»ãã·ã§ã³åæ
次ã«å¿ èŠãªã®ã¯ã»ãã·ã§ã³ã®åæã§ãã忣ãã©ã³ãµãŒã䜿çšããå Žåãã¯ã©ã€ã¢ã³ãã»ãã·ã§ã³ã«é¢ããæ å ±ã®ã¹ãã¬ãŒãžãæŽçããã®ã¯å°é£ã§ããããããHAProxyã¯ããã¢æ©èœïŒç°ãªãHAProxyããã»ã¹éã§ã»ãã·ã§ã³ããŒãã«ã転éããæ©èœïŒãåããŠããããããããå®çŸã§ããæ°å°ãªããã©ã³ãµãŒã®1ã€ã§ãã
ãã©ã³ã¹ããšãæ¹æ³ã¯ããã€ããããäŸãã°ã ããããŠã¯ã©ã€ã¢ã³ãã®ã»ãã·ã§ã³ãèšæ¶ãããæ¯ååããµãŒããŒã«ã¢ã¯ã»ã¹ãããã³ã«ãæ¡åŒµããããªãã·ã§ã³ãå®è¡ãããŸããç§ãã¡ã¯åŸè ã®ãªãã·ã§ã³ãå®è£ ããããšèããŠããŸããã
HAProxyã¯ããã®ã¡ã«ããºã ã®ã¯ã©ã€ã¢ã³ãã»ãã·ã§ã³ãä¿åããããã«ã¹ãã£ãã¯ããŒãã«ã䜿çšããŸããã¹ãã£ãã¯ããŒãã«ã«ã¯ãã¯ã©ã€ã¢ã³ãã®éä¿¡å IPã¢ãã¬ã¹ãéžæãããã¿ãŒã²ããã¢ãã¬ã¹ïŒããã¯ãšã³ãïŒãããã³äžéšã®ãµãŒãã¹æ å ±ãä¿åãããŸããã¹ãã£ãã¯ããŒãã«ã¯éåžžãéä¿¡å IPã¢ãã¬ã¹ãšå®å IPã¢ãã¬ã¹ã®ãã¢ãä¿åããããã«äœ¿çšãããã©ãŠã³ãããã³ãã©ã³ã·ã³ã°ã¢ãŒããªã©ãå¥ã®ãã©ã³ãµãŒã«åãæ¿ããéã«ãŠãŒã¶ãŒã»ãã·ã§ã³ã³ã³ããã¹ãã転éã§ããªãã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸãã
ã¹ãã£ãã¯ããŒãã«ãç°ãªãHAProxyããã»ã¹éïŒãã©ã³ã·ã³ã°ãè¡ãããããã»ã¹éïŒã§ç§»åããããã«èšå®ããã°ããã©ã³ãµãŒã¯1ã€ã®ã¹ãã£ãã¯ããŒãã«ããŒã«ã§åäœã§ããããã«ãªããŸããããã«ããããã©ã³ãµãŒã®1ã€ã«é害ãçºçããŠãã¯ã©ã€ã¢ã³ããããã¯ãŒã¯ãã·ãŒã ã¬ã¹ã«åãæ¿ããããšãã§ããã¯ã©ã€ã¢ã³ãã»ãã·ã§ã³ã®åäœã¯ä»¥åã«éžæãããåãããã¯ãšã³ãã§ç¶ç¶ãããŸãã
é©åã«åäœãããã«ã¯ãã»ãã·ã§ã³ã確ç«ãããã©ã³ãµã®éä¿¡å IPã¢ãã¬ã¹ã®åé¡ã解決ããå¿ èŠããããŸãããã®å Žåãããã¯ã«ãŒãããã¯ã€ã³ã¿ãŒãã§ãŒã¹äžã®åçã¢ãã¬ã¹ã§ãã
ãã¢ã¯ç¹å®ã®æ¡ä»¶äžã§ã®ã¿æ£åžžã«åäœããŸããã€ãŸããTCPã»ãã·ã§ã³ãäžæãããæéããªãã»ã©ãTCPã¿ã€ã ã¢ãŠããååã«å€§ããããã¹ã€ããã³ã°ãååã«é«éã§ããå¿ èŠããããŸãããã ããããã«ããã·ãŒã ã¬ã¹ãªã¹ã€ããã³ã°ãå¯èœã«ãªããŸãã
åãæè¡ãããŒã¹ã«ããIaaSãµãŒãã¹ãæäŸããŠããŸãããã㯠OctaviaãšåŒã°ãããã®ã§ãã2ã€ã®HAProxyããã»ã¹ãããŒã¹ã«ããŠãããæåãããã¢ãµããŒããçµã¿èŸŒãŸããŠããŸãã圌ãã¯ãã®ãµãŒãã¹ã«ãããŠåªããå®çžŸãèªã£ãŠããŸãã
ãã®å³ã¯ã3 ã€ã® HAProxy ã€ã³ã¹ã¿ã³ã¹éã®ã㢠ããŒãã«ã®ç§»åãæŠç¥çã«ç€ºããŠããããããã©ã®ããã«èšå®ãããã«ã€ããŠã®æ§æãæäŸãããŠããŸãã

HAProxyãã¢ïŒã»ãã·ã§ã³åæïŒ
åãã¹ããŒã ãå®è£ ããå Žåã¯ãæ éã«ãã¹ãããå¿ èŠããããŸãã100%ã®ã±ãŒã¹ã§åã圢åŒã§åäœãããšã¯éããŸãããããããå°ãªããšãã¯ã©ã€ã¢ã³ãã®éä¿¡å IPãèšæ¶ããŠããå¿ èŠãããå Žåã§ããã¹ãã£ãã¯ããŒãã«ã倱ãããããšã¯ãããŸããã
åãã¯ã©ã€ã¢ã³ãããã®åæãªã¯ãšã¹ãæ°ãå¶éãã
APIãå«ããå ¬éãããŠãããµãŒãã¹ã¯ããªã¯ãšã¹ãã®éäžæ»æãåããå¯èœæ§ããããŸãããã®åå ã¯ããŠãŒã¶ãŒãšã©ãŒããæšçåæ»æãŸã§ãå®ã«æ§ã ã§ããIPã¢ãã¬ã¹ã«ããDDoSæ»æã宿çã«çºçããŠããŸãããŸããã¯ã©ã€ã¢ã³ãã®ã¹ã¯ãªããã«ãã¹ããããå°èŠæš¡ãªDDoSæ»æãçºçããããšãå°ãªããããŸããã
ãããã«ããã远å ã®ä¿è·å¯Ÿçãè¬ããå¿ èŠããããŸããæçœãªè§£æ±ºçã¯ãAPIãžã®ãªã¯ãšã¹ãæ°ãå¶éããæªæã®ãããªã¯ãšã¹ãã®åŠçã«ããã»ããµæéãæµªè²»ããªãããã«ããããšã§ãã
ãã®ãããªå¶éãå®è£ ããããã«ãHAProxyãããŒã¹ã«æ§ç¯ãããã¬ãŒãå¶éã䜿çšããŠããŸããã¬ãŒãå¶éã¯ãåãã¹ãã£ãã¯ããŒãã«ã䜿çšããŠããŸãããã®å¶éã¯éåžžã«ç°¡åã«èšå®ã§ããAPIãžã®ãªã¯ãšã¹ãæ°ã«ãã£ãŠãŠãŒã¶ãŒãå¶éã§ããŸããã¢ã«ãŽãªãºã ã¯ãªã¯ãšã¹ãã®éä¿¡å IPãèšæ¶ãã10人ã®ãŠãŒã¶ãŒããã®åæãªã¯ãšã¹ãæ°ãå¶éããŸãããã¡ãããåãµãŒãã¹ã®APIã®å¹³åè² è·ãããã¡ã€ã«ãèšç®ãããã®å€ã®çŽXNUMXåã®å¶éãèšå®ããŠããŸããç§ãã¡ã¯ç¶æ³ãåžžã«æ³šææ·±ãç£èŠããåžžã«ææ°ã®æ å ±ãææ¡ããŠããŸãã
å®éãããã¯ã©ã®ããã«èŠããã§ããããïŒåœç€Ÿã®APIãèªåã¹ã±ãŒãªã³ã°ã«åžžæäœ¿çšããŠããã客æ§ãããã£ããããŸãããã®ãããªã客æ§ã¯ãææ¹ã«1000ïœXNUMXå°ã®ä»®æ³ãã·ã³ãäœæãã倿¹ã«åé€ããŠããŸããOpenStackã®å Žåãç¹ã«PaaSãµãŒãã¹ã§ã¯ãä»®æ³ãã·ã³ã®äœæã«å°ãªããšãXNUMXä»¶ã®APIãªã¯ãšã¹ããçºçããŸããããã¯ããµãŒãã¹éã®ããåããAPIãä»ããŠè¡ãããããã§ãã
ãã®ãããªã¿ã¹ã¯è»¢éã¯éåžžã«å€§ããªè² è·ãåŒãèµ·ãããŸãããã®è² è·ãè©äŸ¡ããæ¥ã ã®ããŒã¯å€ãåéããããã10åã«å¢ãããŠããããã¬ãŒãå¶éãšãªããŸãããç§ãã¡ã¯åžžã«ç¶æ³ãææ¡ããŠããŸãããããããèµ·åå¯èœãªCGAã¹ã¯ãªããããããã©ããã確èªããããšããã¹ãã£ããŒãé »ç¹ã«åºçŸãããããç©æ¥µçã«ããããã«ããããŠããŸãã
ãŠãŒã¶ãŒã«æ°ã¥ãããã«ã³ãŒãããŒã¹ãæŽæ°ããæ¹æ³
ã³ãŒãå±éããã»ã¹ã¬ãã«ã§ããã©ãŒã«ããã¬ã©ã³ã¹ãå®è£ ããŠããŸããããŒã«ã¢ãŠãäžã«é害ãçºçããããšããããŸããããµãŒãã¹ã®å¯çšæ§ãžã®åœ±é¿ã¯æå°éã«æããããŸãã
ç§ãã¡ã¯ãµãŒãã¹ãç¶ç¶çã«ã¢ããããŒãããŠããããŠãŒã¶ãŒã«åœ±é¿ãäžããããšãªãã³ãŒãããŒã¹ãæŽæ°ããå¿ èŠããããŸããç§ãã¡ã¯ãHAProxyã®ç®¡çæ©èœã掻çšãããµãŒãã¹ã«Graceful Shutdownãå®è£ ããããšã§ãããå®çŸããŸããã
ãã®åé¡ã解決ããã«ã¯ããã©ã³ãµãŒç®¡çãšãµãŒãã¹ã®ãæ£ãããã·ã£ããããŠã³ã確å®ã«è¡ãå¿ èŠããããŸããã
- HAProxyã®å Žåãå¶åŸ¡ã¯çµ±èšãã¡ã€ã«ãä»ããŠè¡ãããŸããçµ±èšãã¡ã€ã«ã¯åºæ¬çã«ãœã±ããã§ãããHAProxyèšå®ãã¡ã€ã«ã§å®çŸ©ãããŠããŸããstdioçµç±ã§ã³ãã³ããæž¡ãããšãã§ããŸããããããç§ãã¡ã®äž»ãªèšå®ç®¡çããŒã«ã¯Ansibleãªã®ã§ãHAProxyã管çããããã®çµã¿èŸŒã¿ã¢ãžã¥ãŒã«ãæèŒãããŠããŸããç§ãã¡ã¯ãããç©æ¥µçã«æŽ»çšããŠããŸãã
- APIãšãšã³ãžã³ãµãŒãã¹ã®ã»ãšãã©ã¯ãæ£åžžãªã·ã£ããããŠã³æè¡ããµããŒãããŠããŸããã·ã£ããããŠã³æã«ã¯ãHTTPãªã¯ãšã¹ãããµãŒãã¹ã¿ã¹ã¯ãªã©ãçŸåšã®ã¿ã¹ã¯ãå®äºãããŸã§åŸ æ©ããŸããã¯ãŒã«ãŒã§ãåæ§ã§ããã¯ãŒã«ãŒã¯å®è¡ãããã¹ãŠã®ã¿ã¹ã¯ãææ¡ããŠããããã¹ãŠãæ£åžžã«å®äºãããšçµäºããŸãã
ããã 2 ã€ã®ç¹ã«ãããå®å šãªãããã€ã¡ã³ã ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«ãªããŸãã
- éçºè ã¯æ°ããã³ãŒã ããã±ãŒãž (ãã®å Žå㯠RPM) ããã«ãããéçºç°å¢ã§ãã¹ãããã¹ããŒãžã§ãã¹ãããŠãã¹ããŒãž ãªããžããªã«æ®ããŸãã
- éçºè ã¯ãæ°ããããã±ãŒãžã®ããŒãžã§ã³ãæ°ããæ©èœã®èª¬æãããã³å¿ èŠã«å¿ããŠãããã€ã¡ã³ãã«é¢ãããã®ä»ã®è©³çްãªã©ããææç©ãã®æã詳现ãªèª¬æã䜿çšããŠããããã€ã¡ã³ãã®ã¿ã¹ã¯ãèšå®ããŸãã
- ã·ã¹ãã 管çè
ãã¢ããããŒããéå§ããŸããAnsibleãã¬ã€ããã¯ãå®è¡ãããšã以äžã®åŠçãå®è¡ãããŸãã
- ã¹ããŒãž ãªããžããªããããã±ãŒãžãååŸããããã«åºã¥ããŠè£œåãªããžããªå ã®ããã±ãŒãž ããŒãžã§ã³ãæŽæ°ããŸãã
- æŽæ°ããããµãŒãã¹ã®ããã¯ãšã³ãã®ãªã¹ããã³ã³ãã€ã«ããŸãã
- HAProxy ã§æŽæ°ããæåã®ãµãŒãã¹ãã·ã£ããããŠã³ãããã®ããã»ã¹ãå®äºãããŸã§åŸ æ©ããŸããæ£åžžãªã·ã£ããããŠã³ã«ãããçŸåšã®ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãèŠæ±ãæ£åžžã«å®äºããããšãä¿èšŒãããŸãã
- APIãã¯ãŒã«ãŒãå®å šã«åæ¢ããHAProxy ãã·ã£ããããŠã³ãããåŸãã³ãŒããæŽæ°ãããŸãã
- Ansible ã¯ãµãŒãã¹ãéå§ããŸãã
- åãµãŒãã¹ããšã«ãäºåã«å®çŸ©ãããããã€ãã®ããŒãã¹ãã«å¯ŸãããŠããããã¹ããå®è¡ããç¹å®ã®ããã³ãã«ãããã«ãããŸããæ°ããã³ãŒãã®åºæ¬çãªãã§ãã¯ãè¡ãããŸãã
- åã®æé ã§ãšã©ãŒãèŠã€ãããªãã£ãå Žåãããã¯ãšã³ãã¯ã¢ã¯ãã£ãåãããŸãã
- 次ã®ããã¯ãšã³ãã«é²ã¿ãŸãããã
- ãã¹ãŠã®ããã¯ãšã³ããæŽæ°ãããåŸãæ©èœãã¹ããå®è¡ãããŸãããã¹ããäžè¶³ããŠããå Žåãéçºè ã¯è¿œå ãããæ°ããæ©èœã確èªããŸãã
ããã§ãããã€ã¯å®äºã§ãã

ãµãŒãã¹æŽæ°ãµã€ã¯ã«
ãã®ä»çµã¿ã¯ãäžã€ã®ã«ãŒã«ããªããã°æ©èœããŸãããç§ãã¡ã¯ãæŠéã«ãããŠæ°æ§ã®ããŒãžã§ã³ãåæã«ãµããŒãããŸãããœãããŠã§ã¢éçºæ®µéã§äºåã«ããµãŒãã¹ããŒã¿ããŒã¹ã«å€æŽããã£ãŠã以åã®ã³ãŒãã«åœ±é¿ãåã°ãªãããã«èŠå®ããŠããŸãããã®çµæãã³ãŒãããŒã¹ã¯æ®µéçã«æŽæ°ãããŸãã
ãŸãšã
ãã©ãŒã«ã ãã¬ã©ã³ã㪠WEB ã¢ãŒããã¯ãã£ã«é¢ããç§èªèº«ã®èããå ±æãããã®éèŠãªãã€ã³ããããäžåºŠåŒ·èª¿ããããšæããŸãã
- ç©ççãªãã©ãŒã«ããã¬ã©ã³ã¹ã
- ãããã¯ãŒã¯ãã©ãŒã«ããã¬ã©ã³ã¹ïŒãã©ã³ãµãBGPïŒ
- 䜿çšããã³éçºããããœãããŠã§ã¢ã®ãã©ãŒã«ã ãã¬ã©ã³ã¹ã
çæ§ãå®å®ãã皌åããç¥ãããŸãïŒ
åºæïŒ habr.com
