
ãã ããPostgreSQL 12ã®æ¬¡ã®ãªãªãŒã¹ä»¥éãrecovery.confã¯æ©èœããªããªããŸãããç ŽæããŸããã
ãããããªãã§ããïŒ
Recovery.confã«ã¯1ã€ã®æ©èœããããŸãããããã¯ãDBMSã®éå§æã«ã®ã¿èªã¿åãããŸããã ãŸãã1幎ã«1åæªæºã§å¿ èŠãªãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªã調æŽã§ããå Žåã¯ãããŒã¿ããŒã¹å šäœãåèµ·åããŠã¢ããã¹ããªãŒã ã¬ããªã±ãŒã·ã§ã³ãµãŒããŒã®ã¢ãã¬ã¹ãå€æŽããå¿ èŠããããŸãã ãã®å¶éãåé¿ããããã«ãL3ã«ãŒãã£ã³ã°ã®äœ¿çšãè€è£œã¹ããŒã ã®ã«ã¹ã±ãŒãïŒãã¹ãŠããã¹ãŠã§ã¯ãªããå°ãªããšãäžéšã®ã¿ïŒãããã«ã¯ïŒ å®çšŒåç°å¢ã§ã¯èŠãããªãå Žåã§ãïŒ walbouncerãªã©ãããŸããŸãªåé¯ã®æ¹æ³ãèŠãŸãã ã
ã¬ããªã«ã®æ¬¡ã®ã¹ã±ãžã¥ãŒã«ãããåèµ·ååŸãã¬ããªã±ãŒã·ã§ã³ãã©ã¡ãŒã¿ãå€æŽããå¿ èŠãããããããããéžæããããšã«ããŸããããSIGHUPã§primary_conninfoãåèªã¿èŸŒã¿ããããã«PostgreSQLã«æããã®ã«è²»çšã¯ããããŸããïŒ
ãããŠåæ°ãæã£ãŠã 圌ãPostgreSQLéçºè ã®ã¡ãŒãªã³ã°ãªã¹ãã«éããŸããã Michael Paquierãããªãè¿ éã«çãããã®ïŒ
ãããã®ããã€ããåèªã¿èŸŒã¿å¯èœã«ããåã«ãããããæåã«GUCã«åãæ¿ããŠããããã®ããã«ãã©ã¡ãŒã¿ãŒã®SIGHUPåŠçãåçºæããªãã§ã¿ãŸãããããã£ãšãæ€çŽ¢ãšã³ãžã³ã«ééã£ã質åãããŠããããšãããããŸããã åé¡ã¯ãrecovery.confã®åèªã¿åãã§ã¯ãªããå¥ã®recovery.confããä»ã®ãã¹ãŠã®DBMSãã©ã¡ãŒã¿ãŒã«äœ¿çšãããGUCã€ã³ãã©ã¹ãã©ã¯ãã£ïŒã°ã©ã³ãçµ±åæ§æïŒãžã®ãã©ã¡ãŒã¿ãŒã®å€æã«é¢ãããã®ã§ããã ã€ãŸããééããªãããã®ãããªãããã¯å¿ èŠãããŸãããããã¯æãŸãããããŸããã æåã«ãããããã¹ãŠã®èšå®ãrecovery.confããæšæºèšå®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«è»¢éããŸãããã
ãã®æ²èŠ³çãªãã¥ãŒã¹ã§ãç§ã¯çããŠèããŸããïŒãã§ã移ããŸãããïŒãã æ£ããæ€çŽ¢ã¯ãšãªã§ã¢ãŒã«ã€ãããããã£ã¹ã«ãã·ã§ã³ãèªã¿ã èšå®ã®è»¢éã«é¢ããæåŸã®ãã£ã¹ã«ãã·ã§ã³ãéããŸãã ïŒãªã³ã¯ã¯Michael Paquierã®åçã§èŠªåã«æäŸãããŸãããè¿ éãªåçã ãã§ãªããå¥éæè¬ããŸãïŒã ãã®ãšãã2018幎5æã«ããããã¯1幎以äžæŸæ£ãããŸããã ããã§ã¯ãããããå§ããŸãããã ãããšããç¶ããããšèšãæ¹ãæ£ããã§ããããïŒ ãšã³ã¿ãŒãã€ã³ã¡ã³ããã©ã³ã«ãããšïŒ
- ãããã®ææ°ã®å ¬éããŒãžã§ã³ãžã®å€æŽãèªãã§ãªã¹ããã
- ãããã®å€æŽã解æããå¿ èŠãªãã®ãã³ãŒãããŒã¹ã®çŸåšã®ããŒãžã§ã³ã«è»¢éããŸã
- ããã¥ã¡ã³ãå ã®recovery.confããã³ãã®ãã©ã¡ãŒã¿ãžã®ãã¹ãŠã®åç §ãä¿®æ£
- ä¿®çãã¹ã
- ã¡ãŒãªã³ã°ãªã¹ãã«æ°ããããããéä¿¡ããŸã
- ãã£ãŒãããã¯ãåŸã
- åžæã«å¿ããŠäœããä¿®æ£ãããã©ã°ã©ã5ã«æ»ã
- ããããå床æåŠããããšãæåŠããïŒ1幎åïŒ
ã¢ã¯ã·ã§ã³ãã©ã³ã®ããã«èãããŸããïŒ ããŠãããã§ããã«æ²¿ã£ãŠé²ã¿ãŸãïŒ
ã©ã®ãããã®æéãçãéãç§ã¯5çªãæã瀺ãã2018幎6æ21æ¥ã«æ°ãããã£ã¹ã«ãã·ã§ã³ã¹ã¬ããã§æ°ããããŒãžã§ã³ã®ããããå ¬éããŸãã ã ãã®åŸããã¹ã«ãŽã£ã«ã®éã®å·ããæ²é»ã®å§è¿«çãªæ²é»ã®äžã§3ã¶æã 9ææ«ãã³ã¢éçºè ã®1人ã§ããã³ãããæš©ãæã€Peter Eisentrautã¯ãçªç¶ãããã«é¢å¿ã瀺ããŸããã ç·šéãæ°åç¹°ãè¿ããåŸãç§ã¯éãã«æ°æ¥éããããã¹ããæ£æ©ããŠèŠ³å ããããã«ç«ã¡å»ããŸããããããŒã¿ãŒã»ã¢ã€ãŒã³ãã©ãŠãããã®èœèçãªæçŽãå±ããŸããã
ãããã調ã¹ãŠãããã€ãã®å°ããªæ¹è¯ãè¡ããŸããã ãŸããããã¥ã¡ã³ããããåºç¯å²ã«æŽæ°ããŸããã æ·»ä»ã®ãããã¯ç§ã«ã³ãããå¯èœã§ããã€ãŸããPeter Eisentrautã¯åœŒã®è£éã§ããã€ãã®ããããªããšãä¿®æ£ããããã¥ã¡ã³ããæŽæ°ããrecovery-config.sgmlã»ã¯ã·ã§ã³ãå®å šã«çŒãä»ãããã®åœ¢åŒã§ãããã¯ãã§ã«åãå ¥ãããããšèããŠããŸãã ããã幞éã«ãããããäžè¬çã«ã³ãããã®æºåãæŽã£ãç¶æ ã«éãããšããŠããããã¯postgresql 13ã§ã®ã¿èµ·ãããšæããŸããã
ãããŠæ°æ¥åŸãã€ãŸããã®2018幎11æ25æ¥ã«ãããŒã¿ãŒã»ã¢ã€ãŒã³ãã©ãŠãã¯æ¬åœã«ãã®ããããåãå ¥ããŸã ïŒ
recovery.confèšå®ãpostgresql.confïŒãŸãã¯ä»ã®GUCãœãŒã¹ïŒã§èšå®ãããããã«ãªããŸããã çŸåšã圱é¿ãåããèšå®ã¯ãã¹ãŠPGC_POSTMASTERã§ãã ããã¯ãå°æ¥ã®ã±ãŒã¹ãã€ã±ãŒã¹ã§æ¹åãããå¯èœæ§ããããŸãã2é±éãçµéãããã®ã³ãããã¯ããŒã«ããã¯ãããŠããŸããã ããã ãããŠã圌ãã¯è¡ãããããªãããã§ãã ãããã ç¹ã«4æã®postgresql 12ã®æ©èœããªãŒãºãªãªãŒã¹ãŸã§ã«ã¯ãŸã å°ãæéããããŸãã®ã§ãã³ãã¥ããã£ãåã³ããããæ¹åã«åäœãå€æŽããããšã決å®ãããã©ããã¯äžæã§ãã ãã ããrecovery.confã®æ°ã¯ãŸã å¢ããŠããªãããã§ãã
å埩ã¯ããã¡ã€ã«recovery.signalã«ãã£ãŠéå§ãããããã«ãªããŸããã ã¹ã¿ã³ãã€ã¢ãŒãã¯ããã¡ã€ã«standby.signalã«ãã£ãŠéå§ãããŸãã standby_modeèšå®ã¯ãªããªããŸããã recovery.confãã¡ã€ã«ãèŠã€ãã£ãå Žåããšã©ãŒãçºè¡ãããŸãã
移åã®äžéšãšããŠãtrigger_fileèšå®ã®ååãPromote_trigger_fileã«å€æŽãããŸããã
ããã¥ã¡ã³ãã®ç« ããªã«ããªæ§æããããµãŒããŒæ§æãã«çµ±åãããŸããã
pg_basebackup -Rãpostgresql.auto.confã«èšå®ãè¿œå ããstandby.signalãã¡ã€ã«ãäœæããããã«ãªããŸããã
èè ïŒè€äºæ£å€«<masaoïŒdotïŒfujiiïŒatïŒgmailïŒdotïŒcom>
äœæè ïŒSimon Riggs <simonïŒatïŒ2ndquadrantïŒdotïŒcom>
èè ïŒAbhijit Menon-Sen <amsïŒatïŒ2ndquadrantïŒdotïŒcom>
äœæè ïŒSergei Kornilov <skïŒatïŒzsrvïŒdotïŒorg>
ããã§ãäœãå€ãã£ãã®ã
äœããããŸããrecovery.confãã¡ã€ã«ãèŠã€ãã£ãå ŽåãDBMSã¯èµ·åãæåŠããŸããããã¯ãå€ãã®å€ãåœä»€ã®1ã€ã䜿çšããŠãããŠãŒã¶ãŒãããŒã¿ããŒã¹ããã®ãã¡ã€ã«ã®æ§æãç¡èŠããçç±ã«é©ããªãããã«ããããã§ãã
å€ãstandby_modeèšå®ã¯ãªããªããŸããã ããã§ããªã«ããªã¢ãŒããæå¹ã«ããããã®recovery.confã®ååšèªäœãã2ã€ã®ãã¡ã€ã«ïŒä»»æã®ã³ã³ãã³ããéåžžã¯ç©ºïŒã«çœ®ãæããããŸããã
- $ PGDATA / recovery.signal-ã€ããªãã®ãŒã®åŸç¶è standby_mode = offãã¢ãŒã«ã€ãããã®åŸ©å ã¯ãæ§æãã¡ã€ã«ã§æå®ããããã€ã³ããŸã§å®è¡ãããŸãã
- $ PGDATA / standby.signal-ãããããstandby_mode = onã ãã®ãã¡ã€ã«ã¯ãã¹ãŠã®ã¬ããªã«ã«è¡šç€ºãããŸãã
ããŒã¿ããŒã¹ã®èµ·åããã»ã¹ã§äž¡æ¹ã®ãã¡ã€ã«ãèŠã€ãã£ãå Žåã¯ãã¹ã¿ã³ãã€ã¢ãŒãã«ãããšèŠãªããŸãã
æ確ã«ããããã«ããã©ã¡ãŒã¿ã®å€æŽããã¬ãŒãã«æžããå ŽåïŒ
å€ãrecovery.conf
| PostgreSQL 12以épostgresql.conf
|
---|---|
primary_conninfo
| primary_conninfo
|
primary_slot_name
| primary_slot_name
|
trigger_file
| Promo_trigger_file
|
recovery_min_apply_delay
| recovery_min_apply_delay
|
recovery_target
| recovery_target
|
recovery_target_name
| recovery_target_name
|
recovery_target_time
| recovery_target_time
|
recovery_target_xid
| recovery_target_xid
|
recovery_target_lsn
| recovery_target_lsn
|
recovery_target_inclusive
| recovery_target_inclusive
|
recovery_target_timeline
| recovery_target_timeline
|
recovery_target_action
| recovery_target_action
|
restore_command
| restore_command
|
archive_cleanup_command
| archive_cleanup_command
|
recovery_end_command
| recovery_end_command
|
äœãå€æŽãããŠããªãããšãå°ãããããŸãã çŸæç¹ã§ã¯ïŒpromote_trigger_fileã®promote_ãã¬ãã£ãã¯ã¹ãé€ããŠïŒããã¹ãŠã®æ°ãããã©ã¡ãŒã¿ãŒã¯å€ããã©ã¡ãŒã¿ãŒãšãŸã£ããåãååãä»ããããåãå¯èœãªå€ãåããŸãã å®éã«ã¯ããªã«ããªã¿ãŒã²ããã®èšå®ã«é¢ããŠã¯ãŸã å€æŽããããŸãã 以åã«èª°ããããã䜿çšãããã©ããã¯ããããŸããããããã¯ææžåãããåäœã§ãããè€æ°ã®recovery_targetãrecovery_target_lsnãrecovery_target_nameãrecovery_target_timeãŸãã¯recovery_target_xidãåæã«æå®ã§ããŸããã äŸãã°
recovery_target_lsn = '1/1D9FEA00' recovery_target_xid = '5238954'
recovery.confã®æåŸã®è¡ã¯ãå®éã«ã¯ãªã«ããªã«äœ¿çšãããŸããã ããã¯ããã§ããŸãããå埩ã®ç®æšã¯æ倧1ã€ã§ç€ºãå¿ èŠããããŸãã ãã ããGUCã€ã³ãã©ã¹ãã©ã¯ãã£ã®ããžãã¯ã«ãããåãååã®ãã©ã¡ãŒã¿ãŒãäœåºŠãæå®ã§ããŸãã
recovery_target_lsn = '1/1D9FEA00' recovery_target_lsn = '1/16AC7D0'
ããã¯åãå ¥ããããæåŸã«æå®ãããèšå®å€ã«åŸ©å ãããŸãã
ãããŠãäžè¬çã«ãããã¯PostgreSQLã®å€éšããèŠããå€æŽã«ã€ããŠèšãå¿ èŠããããã¹ãŠã§ãã pg_basebackup -RïŒ--write-recovery-confïŒã¯ãã®ãŸãŸã§ãæå³ãããšããã«åäœããŸãããrecovery.confã®ä»£ããã«postgresql.auto.confã«ãã©ã¡ãŒã¿ãŒãè¿œå ããstandby.signalãã¡ã€ã«ãäœæããŸãã
æ®å¿µãªãããããããçŸåšç®ã«èŠãããã¹ãŠã®å€æŽã§ãããšèšã£ããšããããã¯ãŸãã«ç§ãèšã£ãŠããããšã§ãã æ°ãããã©ã¡ãŒã¿ãŒã¯ãã¹ãŠPGC_POSTMASTERãšããŠèšå®ãããŸããã€ãŸããPostgreSQLã®èµ·åæã«ã®ã¿å€æŽã§ããŸãã æ¢ã«è¿°ã¹ãããã«ãããã¯éçºè ã³ãã¥ããã£ã®äžéšã®èŠä»¶ã§ãããæåã«ãã¹ãŠã®èšå®ã転éããŠãããå®è¡äžã®ããŒã¿ããŒã¹ã§å€æŽã§ãããã©ããã確èªããŸãã ãã®ãããå€ãåäœãæ¢ã«å£ããŠããŠãè¯ãæ¹åãžã®å€æŽããŸã ããããããŠããªããšããPostgreSQLã¯çŽ æŽãããéçºæ®µéã«ãããŸãã
primary_conninfoãšprimary_slot_nameããã®å Žã§å€æŽã§ããããã«ãããããããã§ã«å ¬éããŠããŸãã äœãèµ·ãããèŠãŠã¿ãŸãããã
ãã¿ãŸãããrecovery.confãå£ããŸãã
UPD 2019幎4æ7æ¥
æ©èœããªãŒãºããŒãžã§ã³12ã®æçµæ¥ãŸã§ã«ãèŠçŽã§ããŸãã ã¬ããªã±ãŒã·ã§ã³èšå®ã®å€æŽã¯ãªãªãŒã¹ã«å«ãŸããŠããŸããã§ããã ãã¡ããããããå¥åŠãªè©±ã§ãã ãããããããç§ãåºç€ãšããŠåã£ãSimon Riggsãããã«ã¯ãæ¥ç¶èšå®ãå€æŽãããšãã«walreceiverãåèµ·åããããã®ç·šéããã§ã«å«ãŸããŠããŸããã ããã¥ã¡ã³ããšãã¹ããè£è¶³ããå¥ã®ãããã§ããããéžæããŸããã 6åã®ãããæŽæ°ãšæ°ãæã®è°è«ã®åŸãwalreceiverãåèµ·åãããšãããŒã¿ããŒã¹ã¯restore_commandããã®ãã¡ã€ã«ã®åŸ©å ã«åãæ¿ããããšãããšããæãããªäºå®ãçŸããŸãã ãªãããã®çç±ã§walreceiverãã·ã£ããããŠã³ããããšã§ããªã¬ãŒããããéåžžã«åçŽãªã¹ããŒããã·ã³ã®åäœã ããããããã¯ãæãŸãããªããã®ãã§ããããšãããããŸããã ããŠãããªããèšãããšãã§ããªãåã«ïŒ ãªããšãããçŽããŸããããã«ã¬ã³ããŒã«ã¯ãã§ã«ããŒãžã§ã³12ã®æçµcommitfestãããã誰ããããèŠãŸããã§ããã äžè¬ã«ãããã¯ç°¡åãªããšã§ã¯ãªããPostgreSQLã®ãããã¯ããã§ãã ããããç§ã¯äººã ã®ãªã¹ãã«èªåãå«ãããã¹ãŠã®æš©å©ãæã£ãŠããŸãããã®ãããã§ã æã壮倧ã§æªå®æã®æªå®æã®REINDEX CONCURRENTLYãããŒãžã§ã³12 ã«å«ãŸããŠããŸããïŒ
æåŸã«èšåãã䟡å€ãããã®ã¯ãå€ãã®èšå®ããªã³ã¶ãã©ã€ã§å€æŽããæ©äŒãããããšã§ãïŒarchive_cleanup_commandãpromote_trigger_fileãrecovery_end_commandãrecovery_min_apply_delay