2017幎1æ31æ¥ãGitLabã§PostgreSQL DBMSã®æäœã«é¢é£ããäºæ
ãçºçããŸããããã®çµæãããŒã¿ã®äžéšãåé€ããã埩æ§äžã«ãããžã§ã¯ããåæ¢ããŸããã æ°ã¶æãçµéãããã®ãããã¯ã«ã€ããŠå€ãã®ããšãæžãããŸãããGitLabèªèº«ã培åºçãª
æ»äº¡èšäºãçºè¡šããäœãèµ·ãã£ãã®ããã©ã®ãããªå¯Ÿçãè¬ãããããã®ãããªäºæ
ãé²ãããã«ã©ã®ãããªå¯Ÿçãè¬ããããã®ããäŒããŸããã éåžžã«é¢çœãèªæžã§ããPostgresããé ãé¢ããŠãã人ã§ãèªãããšããå§ãããŸãã
Alexei Lesovskyãšã®
ã€ã³ã¿ãã¥ãŒãžã®ã³ã¡ã³ãã§ãã³ãã¥ããã£ã®äžéšã®ã¡ã³ããŒã¯åè«ã§GitLabã®äºæ
ã«èšåãããšäžå¹³ãèšã£ãŠããŸããããæçµçã«è©³çŽ°ãªå ±åãè¡ããŸããã§ããã ç§ãã¡ã¯æ¹åããããšã«æ±ºããã¢ã¬ã¯ã»ã€ã«å°ããªãå ±åããæžãããã«äŸé ŒããŸããã ãã®åºçç©ã®äž»ãªç®çã¯ãæ»äº¡èšäºã®è©³çŽ°ãªåæãè¡ããéèŠãªãã€ã³ãã匷調ããããããåæããåæ§ã®ç¶æ³ã§è¡åããæ¹æ³ã«é¢ããæšå¥šäºé
ãæäŸããããšã§ãã ãããŠããã¡ãããGitLabããŒã ãå°æ¥ãã®ãããªäºä»¶ãé²ãããã«è¬ããèšç»ãæ€èšããŠãã ããã
ç§ãã¡ã泚æãæã幎代é ã®ããŒãã€ã³ãã®ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
- ããŒã¿ããŒã¹ãå®çšŒåããã¹ããŒãžã³ã°ã«è»¢éããæ段ãšããŠã®LVMã¹ãããã·ã§ããã
- ã¬ããªã«ããã¹ã¿ãŒããé
ããå Žåã®å¯ŸåŠæ¹æ³
- pg_basebackupãæ£ããè¡ããŸããããŒã1ã
- max_wal_sendersã®ãã¡ãã©ã®ããã«ïŒ
- max_connections = 8000ã
- pg_basebackupã®ããã³ã°ã¢ãããããŸãã¯pg_basebackupã®æ£ããå®è¡ãããŒã2ã
- straceïŒããã¯ç®¡çè
ã«é©ããŠããŸããdbaã«ã¯å¿
ãããå¿
èŠã§ã¯ãããŸããã
- rmãŸãã¯rmã§ã¯ãªãïŒæ©å¯ããŒã¿ãã©ããããïŒ
- ããã¯ã¢ããæ¹æ³ã
- æ¬çªç°å¢ã®Postgresã®ç°ãªãããŒãžã§ã³ã
- çå ã®å£ããã¡ãŒã«ã
ãããªãŒãã£ã³ã°ãå§ããŸãããã ãŸããæåŸã«2çªç®ã®ãªã¹ãããããŸãããã®ãªã¹ãã§ã¯ãåæ§ã®ã€ã³ã·ãã³ãã®åçºãé²ãããã«ããããŸã§ã«è¬ããæªçœ®ãŸãã¯ä»åŸè¬ããæªçœ®ãç°¡åã«åæããŸãã
1.ããŒã¿ããŒã¹ãå®çšŒåããã¹ããŒãžã³ã°ã«è»¢éããæ段ãšããŠã®LVMã¹ãããã·ã§ãããã¹ããŒãžã³ã°ç°å¢ãæŽæ°ããã¿ã¹ã¯ã¯éåžžã«äžè¬çã§ããããã確ç«ããããã©ã¯ãã£ã¹ãšãœãªã¥ãŒã·ã§ã³ããã§ã«ç»å ŽããŠããŸãã ãã®ãããªãœãªã¥ãŒã·ã§ã³ã®1ã€ã¯ãã¹ãããã·ã§ãããäœæããã¹ãããã·ã§ãããã¹ããŒãžã³ã°ã«è»¢éããããšã§ãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯éåžžã«äŸ¿å©ã§ç°¡åã«ã«ã¹ã¿ãã€ãºã§ããŸãããããã€ãã®æ¬ ç¹ããããŸãã ã»ãšãã©ã®ã¹ãããã·ã§ããã®å®è£
ã¯ã³ããŒãªã³ã©ã€ãã«åºã¥ããŠãããããã¹ãããã·ã§ãããååšãããšãã«ã¹ãããã·ã§ãããäœæãããšããã£ã¹ã¯ã¹ãã¬ãŒãžã«è¿œå ã®è² è·ãããããŸãã åºæ¬çã«ãããã¯æžã蟌ã¿éäžåã®ã¯ãŒã¯ããŒãã«é¢é£ããŠããŸãã åŸ
ã¡æéãéèŠãªå Žåããããåé¡ã«ãªãå¯èœæ§ããããŸãã
ããŒã¿ããŒã¹ãæ¬çªããã¹ããŒãžã³ã°ã«è»¢éããããé©åãªæ¹æ³ã¯ãããã¯ã¢ããã§ãã ã«ã¹ã¿ãã€ãºãããããã¯ã¢ããããããããããã¹ããŒãžã³ã°ãæŽæ°ãããŸãã ãã®ç¶æ³ã§ã¯ãã€ã¡ãŒãžã«ãã£ãŠè¿œå ã®è² è·ãäœæãããããšã¯ãªãã埩å
ã®æåã«ã€ããŠããã¯ã¢ãããéæ¥çã«ãã§ãã¯ãããŸãã ã¹ããŒãžã³ã°ãæŽæ°ãããªãå Žåãããã¯ããã¯ã¢ããã«äœãåé¡ãããããšãæ確ã«ç€ºããŠããŸãã
2.ã¬ããªã«ããã¹ã¿ãŒããé
ããå Žåã®å¯ŸåŠæ¹æ³æ®å¿µãªããããã®èšäºã§ã¯ããšã³ãžãã¢ãã¬ããªã±ãŒã·ã§ã³ã©ã°ã®ååšãã©ã®ããã«çºèŠãããã«ã€ããŠã¯èšåããŠããŸããããã¬ããªã«ãæçµçã«åãè¿ãã®ã€ããªãã»ã©èœã¡ããããæé
ãã«ãªã£ããšçµè«ä»ããããšãã§ããŸãã ããã§ã©ã®ãããªæšå¥šäºé
ãäœæã§ããŸããïŒ ãã¡ãããçæ³çã«ã¯ãã¢ã©ãŒãã§ã¬ããªã±ãŒã·ã§ã³ã©ã°ãç£èŠããŸãã ãã ãããããŒãã€ãæ¹åŒã¯ãæåãSMSããŸãã¯ä»ã®äœãã®åŸç¶ã®éä¿¡ã§çå ã®ã¹ã¯ãªããã§é
ãããã§ãã¯ããããã«ã䜿çšãããŸãã
ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ã䜿çšããå Žåãã©ã°ã¢ãã¿ãªã³ã°ã¯ãæ§æåŸããã«å®è¡ããå¿
èŠããããã®ã®1ã€ã§ãã ã¬ããªã«ãé
ãå§ããçç±ã¯ãããããããŸãã Postgresã®ã¬ããªã±ãŒã·ã§ã³ãç£èŠããããã«pg_stat_replicationãã¥ãŒããããŸã-ããã¯éåžžã«ã¯ãŒã«ãªãã®ã§ãããããçšåºŠã®çµéšããããã©ã°ã®åå ïŒãããã¯ãŒã¯ããã£ã¹ã¯ãé·ããªã¯ãšã¹ããªã©ïŒãç¹å®ããããšãã§ããŸãã
ã¬ããªã«ãé
ããŠããããšãããããåãè¿ãã®ã€ããªãã»ã©èœã¡ãã®ãããããªãå Žåãäžæçãªè§£æ±ºçã¯wal_keep_segmentsãã©ã¡ãŒã¿ãŒãå¢ããããšã§ãã ãã®ãã©ã¡ãŒã¿ã¯ãéåžžã®ãªããŒãïŒpg_reload_confïŒïŒãåç
§ïŒã§postgresãåèµ·åããã«æŽæ°ãããŸãããäŸ¡æ Œã¯ãã£ã¹ã¯é åã®äœ¿çšéã®å¢å ã§ããå¯èœæ§ãããã1ã»ã°ã¡ã³ãã¯16MBã§ãã ãã©ã¡ãŒã¿ãå¢ãããåŸãæ€çŽ¢ãéå§ããŠé
延ã®åå ãåãé€ãããšãã§ããŸãã
ãŸããWALã¢ãŒã«ã€ãã䜿çšããŠããªãããšãèªããŠããããšã«ã泚æããŠãã ããããããç¡é§ã§ãããããã¯ã¬ããªã«ã®åŸ©å
ã«åœ¹ç«ã¡ãŸãã ããããäžè¬çã«ãWALã¢ãŒã«ã€ãã®åœ¹å²ã¯ãã¬ããªã«ãä¿è·ããã¿ã¹ã¯ã ãã§ã¯ãããŸããã pg_basebackupãä»ããããã¯ã¢ãããããå Žåãã¢ãŒã«ã€ãã䜿çšãããšãæè»ã«ãªã«ããªã管çã§ããŸãïŒãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªãåç
§ïŒã
3. pg_basebackupãæ£ããè¡ããŸããããŒã1ãæ»äº¡èšäºãããããããã«ãpg_basebackupãéå§ããåã«ããšã³ãžãã¢ã¯ããŒã¹ããã¯ã¢ããã®ã³ããŒå
ã®ãã£ã¬ã¯ããªãã¯ãªã¢ããŸããã å®éãpg_basebackupã¯ããã£ã¬ã¯ããªã空ã§ãªãããšãæ€åºãããšãããã«çµäºããŸãã ãã ããæ©å¯ããŒã¿ãæ±ãå Žåã¯ãrmã§ã¯ãªãmvã䜿çšããããšããå§ãããŸãã å°å®¹éãã£ã¹ã¯ã®æ代ã¯éãå»ãããã®ãããªã«ãŒã«ã¯äººçãã¯ããã«æ¥œã«ããŸãã ããã¯ããã£ã¬ã¯ããªã ãã§ãªããããŒã¿ããŒã¹å
ã®ããŒãã«ãæ¥å°ŸèŸ_oldãªã©ã®ããŒã¿ããŒã¹ã«ãé©çšãããŸãã ããã¯ãã©ãã€ãã®ããŒã¿ããŒã¹ã§ã¯æ©èœããŸãããããªããžã§ã¯ãã®ååãå€æŽããæ°é±éåŸã«èª°ããããå¿
èŠãšããªãããšã確èªããŠãããã«åé€ãããããéãã«åé€ããããšããå§ãããŸãã
4. max_wal_sendersã¯çµäºããŸããããã©ãã§ããïŒpg_basebackupãæ¥ç¶ãããšãã«ãmax_wal_sendersã®å¶éãè¶
ãããšãããšã©ãŒãè¶
ããŸããã ãã®ãã©ã¡ãŒã¿ãŒã¯ãã¬ããªã±ãŒã·ã§ã³ã®åææ¥ç¶ã®å¶éãå®çŸ©ããŸãã èŠããŠãããªããGitLabã«ã¯ã¬ããªã«ã1ã€ãããªãããã®ã¬ããªã«ã¯åãè¿ãã®ã€ããªãã»ã©èœã¡ãŸããã ãããã£ãŠããã¹ãŠã®æ¥ç¶ã¯ç¡æã§ããå¿
èŠããããŸãã ãããããšã³ãžãã¢ãªã³ã°ããŒã ã¯ãšã©ãŒã«ééããè€æ°ã®pg_basebackupãåæã«å®è¡ããããšãã以å€ã®ãªãã·ã§ã³ã¯ãããŸããã
äžè¬ã«ãããã¯ç¡æå³ã§ããæåã®pg_basebackupãæ©èœããªãå Žåããªã2çªç®ã®pg_basebackupãæ©èœããã®ã§ããïŒ ãã ãããã®ãšã©ãŒãåŒãç¶ãçºçããå Žåã¯ãmax_wal_sendersãå€æŽããã«ã¯postgresãåèµ·åããå¿
èŠãããïŒããã¯åãå
¥ããããªãããšãå€ãïŒã誰ãæ¥ç¶ãååŸãããïŒããã³ããããpg_basebackupsãåŸ
æ©ããŠããïŒãèŠã€ããŠåæ¢ããããšãå¿ããªãã§ãã ããã ãªãå¶éãåŒãäžããã®ã§ããïŒ åæpg_basebackupãããã«å®è¡ããã«ã¯ïŒ
5. max_connections = 8000次ã®ãã€ã³ãã¯ã8000ã«èšå®ãããæ¥ç¶å¶éã§ããããã¯ããã®èšå®ã®éåžžã«å€§ããªæ°å€ã§ãã Postgresã¯ãã¯ã©ã€ã¢ã³ãæ¥ç¶ããšã«åå¥ã®ããã»ã¹ãçæãããããã«é
眮ãããŠããŸãã ããã¯ãã¹ãŠãã·ã¹ãã å
ã®ããã»ããµã³ã¢ãããç©æ¥µçã«åäœããpostgresããã¯ãšã³ãããªããªããŸã§ããŸãæ©èœããŸãã ãã®åŸãããã»ã¹ãããã«å¢å ãããšãçç£æ§ãäœäžãå§ããŸãã
postgresãžã®å€æ°ã®æ¥ç¶ãç¶æããªãããã«ãpgbouncerãçºæãããŸãããããã«ãããå€æ°ã®ã¯ã©ã€ã¢ã³ãæ¥ç¶ãpostgresãžã®æ¯èŒçå°æ°ã®æ¥ç¶ã«å§çž®ã§ããŸãã ããšãã°ãåã8000ã¯ã©ã€ã¢ã³ãæ¥ç¶ãpgbouncerã§éããããšãã§ããå¿
èŠãªå Žåã«ã®ã¿postgresãžã®æ¥ç¶ã確ç«ããŸãã ç¹°ãè¿ããŸãããpgbouncerã䜿çšãããšãçºçãããšã©ãŒãpostgresã®è¿œå ã®åèµ·åã«æéã浪費ããããšãåé¿ã§ããå¯èœæ§ããããŸãã
6. pg_basebackupãããã³ã°ãããããpg_basebackupãæ£ããå®è¡ããŸãïŒããŒã2ïŒã次ã«é²ã¿ãŸãïŒæ¥ç¶ã®å¶éã¯ä¿®æ£ãããŸãããããªãpg_basebackupãããªãŒãºããã®ããç解ããå¿
èŠããããŸããïŒ ããããããªãŒãºã®çç±ã¯ãpg_basebackupã®è©³çŽ°ã«ãããŸãã ããŒã¿ããŒã¹ã®ã³ããŒãéå§ããåã«ãããããåŠçãå®äºãããŸã§åŸ
ã€å¿
èŠããããŸãã ããã§ãã¯ãã€ã³ããïŒãã§ãã¯ãã€ã³ãïŒã ãã§ãã¯ãã€ã³ãã¯ãpostgresã«å€§ããªè² æ
ããããå¯èœæ§ãããæé ã§ããããã®çµæãããã©ãŒãã³ã¹ã倧å¹
ã«äœäžããŸãã ãããã£ãŠãã·ã¹ãã ã«è² æ
ããããªãããã«ãpg_basebackupã¯ããã©ã«ãã§éåžžã®ãã§ãã¯ãã€ã³ããçµäºããã®ãåŸ
ã¡ãŸãããã®æéãšé床ã¯postgresã®èšå®ã«äŸåããŸãã -c fastãã©ã¡ãŒã¿ãŒãæå®ãããšãpg_basebackupã¯é
æ»ãªãç·æ¥ãã§ãã¯ã€ã³ãéå§ããŸãã
ãç解ã®ãšããããã§ãã¯ãã€ã³ãã®çµäºãåŸ
æ©ããããã»ã¹ã§ã¯ãpg_basebackupã¯ã¡ãã»ãŒãžãæžã蟌ã¿ãŸãããããã¯ãšã³ãžãã¢ã«ãšã£ãŠããªãã¯ã§ãã ãã ããGitLabããŒã ã®ãããã§ã
postgresã¯æ¹åãããŸãã
7. straceïŒç®¡çè
ã«é©ããŠããŸããdbaã®å Žåã¯å¿
ãããå¿
èŠã§ã¯ãããŸãããããã«ããšã³ãžãã¢ã¯pg_basebackupãããªãŒãºããçç±ãèŠã€ããããšããããã«straceã䜿çšããŸããã ç§èªèº«ã®çµéšããèšãã°ãstraceã¯ããªããå¿
èŠãšãããã®ã§ã¯ãªããšããããšãã§ããŸãã straceã¯ã調æ»äžã®ããã»ã¹ããšã©ãŒã§å€±æããããããæç¹ã§æ£ããæ©èœããªããšãã«å¿
èŠã§ãã topãŠãŒãã£ãªãã£ã䜿çšãããšãããã»ã¹ãããã³ã°ãããŠããããšãããããŸããïŒ
CPUãã£ãŒã«ãã«0ã衚瀺ãããŠããå Žåãããã»ã¹ã¯åŸ
æ©ããŠããå¯èœæ§ãéåžžã«é«ããªããŸãã
ãããŠããããããããªãŒãºãã®åå ã調æ»ããã«ã¯ãçŸåšã©ã®æ©èœãå®è¡ãããŠããããç解ããããã®ããã»ã¹ã®ã¹ã¿ãã¯ãã¬ãŒã¹ãå¿
èŠã§ãã ããã«ã¯ã/ proc //ã¹ã¿ãã¯ãšãããçšåºŠã®çµéšãããã°ãgdbãé©ããŠããŸãã æ®å¿µãªãããPostgresèªäœã«ã¯ããã»ã¹ã®å
容ã確èªããæ©äŒããªããã³ããŒã®éå§ãåŸ
ã£ãŠããããããšã³ãžãã¢ã¯pg_basebackupã®æ©èœãç¥ã£ãŠããå¿
èŠããããŸãã
8. rmãŸãã¯rmïŒæ©å¯ããŒã¿ãã©ããããïŒãŠã£ã¶ãŒãã®ããŒã¿ããŒã¹ãã£ã¬ã¯ããªãåé€ãããç¬éã«ãªããŸããã å®éããã®ç¹ã¯äžèšã®ç¹°ãè¿ãã§ããå¯èœã§ããã°ãmvã䜿çšããŠãã ããã rmã䜿çšããã®ã¯ãããŒã¿ãæ¬ èœããŠãããšèšãããŠãã人ãããªãããšã確èªããŠããã§ãã
9.ããã¯ã¢ããæ¹æ³ããã®ãããäºæ
ãçºçãããããããã¯ã¢ããããã®ãªã«ããªãå®è¡ããå¿
èŠããããŸãã ããŒã ãäŸåããŠããããã¯ã¢ããæ¹æ³ãèŠãŠã¿ãŸãããã
- æ¯æ¥ã®pg_dumpïŒç¹å®ã®æç¹ïŒpg_dumpã®éå§æéïŒã§ã®ã¿ãªã«ããªãæäŸãããããªãæããªæ¹æ³ã
- æ¯æ¥ã®LVMã¹ãããã·ã§ãã-ããŒã¿ããŒã¹ã«æžã蟌ã¿éäžåã®è² è·ãããã£ãŠããªããã°ããã®æ¹æ³ã«é¢ããèŠæ
ã¯ãããŸããã
- Asureã®æ¯æ¥ã®ã·ã§ããïŒããã§èšãããšã¯ãããŸããã䜿çšããå¿
èŠã¯ãããŸããã§ããã
- ãã¹ã¿ãŒããã®ã¬ããªã±ãŒã·ã§ã³ïŒèª€ã£ãŠããŒã¿ãåé€ãããšã¬ããªã«ã«ã¬ããªã±ãŒãããããããã¬ããªã±ãŒã·ã§ã³ã¯ããã¯ã¢ãããšã¯èŠãªãããŸããã ã¬ããªã±ãŒã·ã§ã³ãé
延ãªã«ããªã§äœ¿çšã§ããŸãïŒrecovery_min_apply_delayãåç
§ïŒãããã®ç¶æ³ã§ã¯ãäœãã誀ã£ãŠåé€ãããå Žåã®ãªã«ããªæ¹æ³ãç解ããå¿
èŠããããŸãã
äœããã®æ¹æ³ã§ãäžè¬çãªæšå¥šäºé
ã¯æ¬¡ã®ãšããã§ããããã¯ã¢ãããšããŠã¬ããªã«ã䜿çšããªãããã«ããŠãã ãã;ããã¯ã¢ããã®ããã®ããŒã«ããããŸãã æã奜ãŸããããŒã«ã¯ãpg_basebackup + WALã¢ãŒã«ã€ãã§ãã ãã®æ¹æ³ã䜿çšããäž»ãªå©ç¹ã¯ãæ¢åã®ã¢ãŒã«ã€ãå
ã®ç¹å®ã®æç¹ãŸãã¯ãã©ã³ã¶ã¯ã·ã§ã³çªå·ã§ããŒã¿ã埩å
ã§ããããšã§ãã ãã ãããã®ãœãªã¥ãŒã·ã§ã³ã«ã¯æ¬ ç¹ããããŸã-ããŒã«ã«èŠä»¶ã åããŒã¹ããã¯ã¢ããã¯ã€ã³ã¹ã¿ã³ã¹ã®å®å
šãªã³ããŒã§ãããã¢ãŒã«ã€ãã®ãµã€ãºã¯CRUDæäœã®æ°ã«äŸåããŸãã ãããã£ãŠãããã¯ã¢ãããèšå®ãããšãã¯ãã¹ãã¬ãŒãžã®æ¥æ°ãèæ
®ããŠãããã¯ã¢ããçšã®ã¹ãã¬ãŒãžã®åèšãµã€ãºãèæ
®ããå¿
èŠããããŸãã
çŸæç¹ã§ã¯ããã®ããã¯ã¢ããã¢ãã«ãå®è£
ãã補åãããã€ããããŸãã
- ç¬èªã®ãµãŒããŒãããå Žåã¯ãããŒãã³ã
- ãµãŒããŒãAmazonäžã«ããå Žåã¯ãWAL-Eã
æåŸã«è¿œå ã§ããã®ã¯ã1ïŒããã¯ã¢ãããæ£åžžã«è¡ãããŠããããšãç£èŠããå¿
èŠãããããšã§ãã 2ïŒéåžžãããã¯ã¢ãããååšããŸãã 3ïŒããã¯ã¢ããããã®ãã¹ã埩å
ã®çµæããããŸãã
10.æ¬çªç°å¢ã®ç°ãªãããŒãžã§ã³ã®Postgresãããªããæ¬ ç¹ãèŠã€ããããšãã§ãã次ã®ãã€ã³ãã¯ãçç£ã®å¯èœæ§ã®ç°ãªãããŒãžã§ã³ã®ååšã§ãã GitLabã®å Žåãããã«ããããã¯ã¢ãããååŸã§ããªããªããŸããã ãããã£ãŠã次ã®ã¡ãžã£ãŒããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããèšç»ã§ã¯ãå€ãpostgresããã±ãŒãžãåé€ããå¿
èŠããããŸãã
11. kroonã§ã¡ãŒã«ãå£ããŠããŸããç§ã«ã¯æããŸãããå€ãã®äººãç§ã«å察ãããããããŸããããã¡ãŒã«éç¥ã¯ããªããŸããªéç¥ã¡ã«ããºã ã«ãªãã€ã€ãããŸãã ããã«ãããããããã©ã®ã¡ã«ããºã ã䜿çšããŠãããããå®éã«æ©èœããããšãåžžã«ç¢ºèªããå¿
èŠããããŸãã ç§ã®ç·Žç¿ã§ã¯ãSMSã³ãã³ããéç¥ããç£èŠå
ã§ãå€åäžã®ç®¡çè
ã«æ¯æ©ãã¹ãSMSãéä¿¡ãããªãã¬ãŒã¿ãŒãšå€©ã³ãã§ãã¹ãŠãæ£åžžã§ããããšã確èªããæ©èœããã£ãå ŽåããããŸããã é害ãçºçãããšãã¡ãŒã«ã¹ãã ãéå§ãããWebã€ã³ã¿ãŒãã§ã€ã¹ã®ãã©ã°ãç¹ç¯ããŸãããããã¯æ¬åœã«åœ¹ç«ã¡ãŸããã
GitLabã®å Žåãcronã®ã¡ãŒã«ã¯æåã¯èšå®ãããŠããŸããã§ããã å ã«éèŠãªãã®ãå
¥ããããéç¥ã«ã€ããŠèããŠãã ããã
ãã®çµæãããŒã¿ããŒã¹ã¯LVMã€ã¡ãŒãžãã埩å
ãããã³ããŒã«ã¯18æéããããŸãããããã¯éåžžã«é·ãæéã§ãã åæã«ãåçã¯ã¹ããŒãžã³ã°ã§ããããããæãåãå
¥ãããããªãã·ã§ã³ã§ããããšãå€æããŸããã ããã¯ãã¹ãŠãããã¯ã¢ããæŠç¥ã®å€±æïŒ24æéããšïŒãšå¶ç¶ã®äžèŽã§ãã çµæã¯ãããŒã¿ã®æ倱ãæå°éã«æãããããæè»ãªå埩ãªãã·ã§ã³ã䜿çšãããããææ
®æ·±ãããã¯ã¢ããæ¹æ³ã§ãã
GitLabããŒã ã¯ãä»åŸåæ§ã®ã€ãã³ããåé¿ããããã«ãšãã¹ãæªçœ®ã«é¢ããæ
å ±ãæçš¿ããŸããã ãããã«ã€ããŠãç°¡åã«èŠãŠã¿ãŸãããã
1.ãã¹ãŠã®ãã¹ãã§PS1ãæŽæ°ããŠããã¹ããšç°å¢ãããæ確ã«åºå¥ããŸãïŒïŒ1094ïŒãããã¯éåžžã«åççã§ãã ã«ã¹ã¿ã ã³ãã³ãã©ã€ã³ããã³ããããã¹ããäœæããããšã¯ãããªãäžè¬çã§ãããè¯ãç¿æ
£ã§ãã
2.ããã¯ã¢ããã®ããã¡ããŠã¹ç£èŠïŒïŒ1095ïŒããã®æ¹æ³ãéåžžã«åççã«èŠããŸãããããã¯ã¢ããã·ã¹ãã å
šäœã確èªããŠåæ§ç¯ããåŸã§ç£èŠãè¡ãå¿
èŠããããŸãã ç£èŠã«ã¯ãããã¯ã¢ããã®çµéæéãšãµã€ãºã ãã§ãªãã䜿çšå¯èœãªããã¯ã¢ããã®æ°ãããã³å埩ã®ããã«æ£åžžã«ãã§ãã¯ãããã³ããŒã«é¢ããæ
å ±ãå«ããå¿
èŠããããŸãã
3. PostgreSQLã®max_connectionsãæ£ããå€ã«èšå®ããŸãïŒïŒ1096ïŒã800ã§ãå€ãããã®ã§ãpgbouncerãèŠãŠäœ¿çšããããšããå§ãããŸãã ãã ããç¬èªã®å¶éããããããã䜿çšããã¢ããªã±ãŒã·ã§ã³ã«èª²ããŠãããããããã§ã¯äºåã«ãã¹ãããå¿
èŠããããŸãã
4. PostgreSQLã®ãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªãšç¶ç¶çã¢ãŒã«ã€ãã調æ»ããŸãïŒïŒ1097ïŒãã¯ãããããè¡ãå¿
èŠããããŸãã
5.æ¬çªããŒã¿ããŒã¹ã®1æéããšã®LVMã¹ãããã·ã§ããïŒïŒ1098ïŒãç»åãã¹ããŒãžã³ã°ã®æŽæ°ã«äœ¿çšãããããšãèãããšãçãããã¢ã€ãã¢ã§ãã ãã®ç®çã®ããã«ãã¿ã¹ã¯ïŒ1097ã®äžéšãšããŠäœæãããããã¯ã¢ãããéåžžã«é©ããŠããŸãã
6.æ¬çªããŒã¿ããŒã¹ã®Azureãã£ã¹ã¯ã¹ãããã·ã§ããïŒïŒ1099ïŒãã³ã¡ã³ãããã®ã¯é£ããã§ãããããã¯ã¢ããã®äž»ãªæ©èœãè€è£œãããå Žåã¯ããªãã§ããïŒ
7.ã¹ããŒãžã³ã°ãARMç°å¢ã«ç§»åããŸãïŒïŒ1100ïŒãã¿ã¹ã¯ã¯å¥åŠã«èŠããŸãã ãã¹ãŠã®ããŒã¿ã倧å¹
ã«å€æŽã§ããã¹ããŒãžã³ã°ãããããã¯ã·ã§ã³ã埩å
ããããšã¯ãæçµçã«ã¯ãã®ãããªãªã«ããªããã®çãããåãçµã¿ã§ãããæªåããã ãã§ãã
8.æ¬çªã¬ããªã«ã埩å
ããŸãïŒïŒ1101ïŒããã¡ãããããã¯ã§ããã ãæ©ãè¡ãå¿
èŠããããŸãã å€å°ãªããšãæ·±å»ãªpostgresã€ã³ã¹ããŒã«ã¯ãå°ãªããšã1ã€ã®ã¹ããªãŒãã³ã°ã¬ããªã«ã§å±éãããŸãã
9. PostgreSQLããŒã¿ããŒã¹ããã¯ã¢ããã®ãªã«ããªã®èªåãã¹ãïŒïŒ1102ïŒãã¯ããããã¯éåžžã«å¿
èŠãªããšã§ããééããªãå¿
èŠã§ãã
10. PostgreSQLã¬ããªã±ãŒã·ã§ã³ã®ããã¥ã¡ã³ã/ã©ã³ããã¯ãæ¹åïŒïŒ1103ïŒãã¯ããæ瀺ã¯ãè¿é£ã®å庫ã®å€éèŠåå¡ã§ãå埩ã§ããããã«æŽæ°ããå¿
èŠããããŸãã
11. PostgreSQLããã¯ã¢ãããäœæããããã®pgbarmanã調æ»ããŸãïŒïŒ1105ïŒãã¯ããããŒãã³ã¯ééããªãåªããããŒã«ã§ãããGitLabãAmazon S3ã䜿çšããŠããããšãèãããšãWAL-EãæãŸããããã§ãã ãã ããBarmanéçºè
ã¯ãã®å¯èœæ§ãæé€ãããBarmanã§ã®Amazon S3ã®ãµããŒããåŸæŽããããšããç³ãåºãŸãã
12.ããŒã¿ããŒã¹ããã¯ã¢ããããã³ãªã¢ã«ã¿ã€ã ã¬ããªã±ãŒã·ã§ã³ã®æ段ãšããŠWAL-Eã䜿çšããŠèª¿æ»ããŸãïŒïŒ494ïŒãã¯ãããã©ãã«ãŒã«ã¯ããªãã®æ°ã®åé¡ããããŸãããåé¡ãªãå®å®ããŠåäœããŸãã
13.ã¹ããªãŒãã³ã°ããŒã¿ããŒã¹ã®åŸ©å
ãæ§ç¯ããŸããã¯ããã¡ããã©ãã®ããã«ãããã¯ã¢ããããããã¹ããŒãžã³ã°ç°å¢ã§ã®ãªã«ããªã«ãããããã®ããã¯ã¢ããã®åŸ©å
ã®ãã§ãã¯ããããŸãã
14.ããŒã¿ã®æ°žç¶æ§ã®ææè
ãå²ãåœãŠãŸãã責任è
ãå¿
ãå¿
èŠã§ãã ãŸããïŒ1103ã®ãã¬ãŒã ã¯ãŒã¯ã§äœæãããæ瀺ãããç解ããŠããããšããå§ãããŸãã

詳现ãªåæãããŠãããAlexeiã«æè¬ããŸãã Gitlabã§ã®äºæ
ãšè¬ãããã察çã«ã€ããŠã®ã³ã¡ã³ããšèããæ®ããŠãã ããïŒ ããŠããã¡ãããç§ãã¡ã¯å€ã«
PGãã€ãã·ã¢ã§ãµã³ã¯ãããã«ãã«ã¯ã®ã¬ã·ã£ãšãã®ãããã¯ãè°è«ããããã«çãæåŸ
ããŸãïŒ :)