pg_probackup ããŒã«ã«ã€ããŠã¯åŒãç¶ãçè§£ããŠãããŸãã
ã§ã¯æåã®éšåãæã ã¯ãã€ã³ã¹ã¿ã³ã¹ãäœæããã³èšå®ãpg_probackupãèšçœ®ãã2ã€ã®ããã¯ã¢ããåã£ã- DELTAã¢ãŒãã§ãã«ãšå¢åããã€ã³ã¹ã¿ã³ã¹ã®èšå®ã衚瀺ããã³å€æŽããæ¹æ³ã説æããŸãããããã¯ã¢ããã®ãªã¹ããååŸããã¯ã©ã¹ã¿ãŒãããã¯ã¢ããããŠæåŸã®ããã¯ã¢ããæäœã®çµæãç£èŠã·ã¹ãã ã«éä¿¡ããã¹ã¯ãªããïŒbkp_base.shïŒãäœæããŸããã仿¥ã¯ãåæ§ã«è峿·±ãã¿ã¹ã¯ã«åãçµã¿ãŸãã
åé¡2
äžãããããã®ïŒ 2ã€ã®ãµãŒããŒããããæåã®ãµãŒããŒã«ã¯ããŒã¿ããŒã¹ïŒhostname srv_db1ãuser postgresïŒãããã2çªç®ã®ãµãŒããŒã«ã¯ããã¯ã¢ããïŒhostname srv_bkpãuser backup_userïŒãæ ŒçŽãããŸãããã ããåããµãŒããŒãžã®ããã¯ã¢ããã«å ããŠãéå»3æ¥ä»¥å ã«ä»»æã®æç¹ïŒãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªïŒã«åŸ©å ã§ããããã«ãäºåèšé²ãã°ã®ã³ããŒãä¿åããŸãã
解決çïŒ
éžæããæç¹ïŒåŸ©å ãã€ã³ãïŒã«åŸ©å ã§ããããã«ããã«ã¯ã埩å ãã€ã³ãã®åã«ããã¯ã¢ãããäœæããããã¯ã¢ãããéå§ãããç¬éãã埩å ãã€ã³ããŸã§ã®ãã¹ãŠã®WALãã¡ã€ã«ãäœæããå¿ èŠããããŸãã
ãã§ã«ããã¯ã¢ããããããŸãããsrv_bkpã§WALã¢ãŒã«ã€ããæ§æããå¿ èŠããããŸãã
postgresãŠãŒã¶ãŒã䜿çšããŠsrv_db1ã«æ¥ç¶ããæ¬¡ã®ã³ãã³ããå®è¡ããŸãã
ssh-keygen -t rsa
ssh-copy-id backup_user@srv_bkp
ã/ .ssh / autorized_keysãã¡ã€ã«ãsrv_bkpã«å€æŽããŠã¿ãŸãããã
command="pg_probackup-12 agent" ssh-rsa AAAA....
srv_db1ã«æ»ããã¢ãŒã«ã€ãã¢ãŒãïŒarchive_modeïŒãæå¹ã«ããŠãarchive_commandãã©ã¡ãŒã¿ãŒãæ§æããå¿ èŠããããŸããããã«ã¯ãå®å šãªWALã»ã°ã¡ã³ããããã¯ã¢ããããã³ãã³ããå«ãŸããŠããŸãã
psql -c 'show archive_mode'
ãªãã«æ»ã£ãå Žåã¯ããªã³ã«å€æŽããŸã
psql -c 'alter system set archive_mode = on'
倿Žãé©çšããã«ã¯ãPostgreSQLãåèµ·åããå¿ èŠããããŸãããä»ã®ãšããããã®ã¢ã¯ã·ã§ã³ãå»¶æãããã1ã€ã®ãã©ã¡ãŒã¿ãŒãæ§æããŸãã
WALãã¡ã€ã«ã®ã¹ããªãŒã ãååã«å€§ããå Žåãããã¯ã¢ãããµãŒããŒã®ã¹ããŒã¹ãããã«äžè¶³ããå¯èœæ§ããããããarchive_commandè¡ã«--compressãªãã·ã§ã³ãæ¿å ¥ãããšããã°ãã¡ã€ã«ãå§çž®ãããŠããsrv_bkpã«éä¿¡ãããŸãããŸãããªã«ããªäžã«ãããã®ãã¡ã€ã«ãåå¥ã«è§£åããå¿ èŠããããšããäºå®ãå¿é ããå¿ èŠã¯ãããŸãããpg_probackupã¯å§çž®ãã¡ã€ã«ã§æ©èœããŸãã
alter system set archive_command = 'pg_probackup-12 archive-push -B /home/backup_user/backup_db --instance=db1 --wal-file-path=%p --wal-file-name=%f --remote-host=srv_bkp --remote-user=backup_user --compress';
ããã§åèµ·åã§ããŸãã
æåã®ã¿ã¹ã¯ã§è¡ã£ãããšã¯ããªãã©ã€ã³ããã¯ã¢ãããšåŒã°ããŸãããã®ãããªã³ããŒã«ã¯ã埩å ã«å¿ èŠãªãã¹ãŠã®WALãã¡ã€ã«ãå«ãŸããŠããããããã®ããã«åŒã°ããŸããçŸåšã®ã¿ã¹ã¯ã§ã¯ããªãã©ã€ã³ã³ããŒããã¢ãŒã«ã€ãã³ããŒã«ç§»è¡ããŠããŸãããã®ãããªã³ããŒã«ã¯å¿ èŠãªãã°ãå«ãŸããŠããŸããããå¿ èŠãªãã¹ãŠã®WALãã¡ã€ã«ãã¢ãŒã«ã€ãã«ä¿åãããããããã¯åé¡ã§ã¯ãããŸãããããã¯ã¢ããã³ããŒãã埩å ããå ŽåãWALãã¡ã€ã«ã¯ã¢ãŒã«ã€ãããã³ããŒãããŸãã
æ€èšäžã®ç¶æ³ã§ã¯ããªãã©ã€ã³ããã¯ã¢ããïŒã¹ããªãŒã ã¢ãŒãã§äœæïŒããã¢ãŒã«ã€ãïŒã¢ãŒã«ã€ãã¢ãŒãïŒã«åãæ¿ããŠãããããã¢ãŒã«ã€ãã¢ãŒãããŸã æå¹ã«ãªã£ãŠããªããšãã«ã³ããŒãäœæãããã®åŸãäžéšã®WALã»ã°ã¡ã³ãããã§ã«è¡šç€ºãããŠããå ŽåããããŸããåé€ãããŸãããããã¯ãã¢ãŒã«ã€ãã¢ãŒãã«åãæ¿ããåŸã®æåã®ããã¯ã¢ãããPAGEã¢ãŒãã§äœæã§ããªãããšãæå³ããŸããéå»ãšçŸåšã®ã³ããŒã®éã®ã¢ãŒã«ã€ãå ã®WALã®ã»ã°ã¡ã³ããå®å šã§ãªãå¯èœæ§ããããŸãã
æåã®ã¿ã¹ã¯ã§äœæããã¹ã¯ãªããã䜿çšããŠãããå®è¡ããŸãããã
./bkp_base.sh DELTA
次ã«ãPAGEã¢ãŒãã§æåã®ããã¯ã¢ãããäœæããŸã
./bkp_base.sh PAGE
PAGEãDELTAãPTRACKã®3ã€ã®ã€ã³ã¯ãªã¡ã³ã¿ã«ã¢ãŒããå©çšå¯èœã§ããããšãæãåºããŠãã ããããããã¯ã倿ŽãããããŒãžã«é¢ããå¿ èŠãªæ å ±ãååŸããæ¹æ³ãäºãã«ç°ãªããŸãã
ãããŠä»ãããã¯ã¢ããã³ããŒãããããå埩ã§ããããã«ããããã«ãããã¯ã¢ããäœæäžã«äœæãããWALãã¡ã€ã«ãå¿ èŠã§ãããšèããŠã¿ãŸãããããããã 30åéã®å¢åããã¯ã¢ãããäœæãããã®30åéã«10 GBã®WALãäœæãããå Žåããããã®10 GBã®ã¿ãå¿ èŠã§ãããããäžè²«ããŠå埩ã§ããŸããä»ã®ãã¹ãŠã®WALãã¡ã€ã«ã¯ããã€ã³ãã€ã³ã¿ã€ã ãªã«ããªã®ç®çã§ã®ã¿å¿ èŠã§ãã
ã¿ã¹ã¯ã¯ãéå»3æ¥éã®ä»»æã®æç¹ã§å埩ã§ããããã«ãããããšã瀺ããŸãããã€ãŸãããã®æéã®ãã¹ãŠã®WALãä¿åããå¿ èŠããããŸããããã«ã以åã®ããã¯ã¢ãããã埩å ããããã«å¿ èŠãªãã¹ãŠã®WALãä¿åããå¿ èŠããããŸãããä»ã®ãã¹ãŠã®WALãã¡ã€ã«ãä¿åããå¿ èŠã¯ãããŸããã
ãŸããfindã³ãã³ãã䜿çšããŠå»æ¢ãããWALãåé€ããããã«mtimeãš-exec rm {}ã远å ã§ããå Žåãç¹å®ã®ããã¯ã¢ãããäžè²«ããŠåŸ©å ããããã«å¿ èŠãªWALã»ã°ã¡ã³ããæ±ºå®ããããšã¯ç°¡åãªäœæ¥ã§ã¯ãããŸãããéçºè ãããã«ã€ããŠèããããã¯ã¢ããã§èšç®ãããWALã¹ãã¬ãŒãžã®æ·±ããèšå®ã§ãã--wal-depthãã©ã¡ãŒã¿ãŒã远å ããã®ã¯è¯ãããšã§ãã
ããã¯ã次ã®ããã«æŠç¥çã«èª¬æã§ããŸãã
çŸåšã¯åææ¥ã®çãäžã®ã©ããã«ããããšã«æ³šæããŠãã ãããã€ãŸãã3æ¥ããå€ãããã¯ã¢ããã埩å ããããã«å¿ èŠã®ãªããã¹ãŠã®WALãã¡ã€ã«ãåé€ã§ããŸãïŒã°ã©ãã®è¶è²ïŒããŸã å¿ èŠãªWALã¯ãé»è²ã§åŒ·èª¿è¡šç€ºãããŠããŸããããã§è«ççãªçåãçããå¯èœæ§ããããŸãããçµå±ã®ãšããããã§ã«åææ¥ã®çãäžã§ããã€ãŸããæ°Žææ¥ã«äœæãããæã®ãã°ã®äžéšã¯äžèŠã«ãªããåé€ã§ããŸããã¯ããããã§ããå°ãªããšã1åããšã«äœåãªWALã®åé€ãæ§æã§ããŸããããã®èšäºã§ã¯ãããã¯ã¢ããã®äœæãšãšãã«ãã°ãåé€ããããããã°ã¯ä¿æããªã·ãŒã«è©²åœããªããªããŸããããæ¬¡ã®ããã¯ã¢ãããäœæãããšãã«åé€ãããŸãã ..ã
db1ã€ã³ã¹ã¿ã³ã¹ã®èšå®ã倿ŽããŸã-WALãã¡ã€ã«ã®æå¹æéã远å ããŸã
pg_probackup set-config --instance db1 --wal-depth=3
èšå®ãé©çšãããŠããããšã確èªããŸãããã
pg_probackup show-config --instance=db1 | grep wal-depth
ãªãã©ã€ã³ããã¯ã¢ããããã¢ãŒã«ã€ãããã¯ã¢ããã«ç§»è¡ããŠãããã ãbkp_base.shã¹ã¯ãªããã®ããã¯ã¢ããã³ãã³ãã«--delete-walãã©ã°ã远å ãã-streamããŒãåé€ããŸãã
pg_probackup backup --instance=db1 -j 2 --progress -b $1 --compress --delete-expired --delete-wal
çŸæç¹ã§ã¯ãå¥ã®ãµãŒããŒã§ã®ã¢ãŒã«ã€ãããã¯ã¢ããã®äœæãæ§æããŠããŸãããŸãããã°ãã¡ã€ã«ãããã«è¿œå ãããŸããããã«ãããç¹å®ã®ããã¯ã¢ããã«ãªã«ããªã䜿çšããã ãã§ãªãããã€ã³ãã€ã³ã¿ã€ã ãªã«ããªïŒç¹å®ã®æç¹ãžã®ãªã«ããªïŒãå®è¡ããæ©äŒãåŸãããŸãã
WALãã¡ã€ã«ã®ã¢ãŒã«ã€ããã§ããã®ã§ãPAGEã¢ãŒãã䜿çšããŠå¢åããã¯ã¢ãããäœæã§ããŸãããã®ã¢ãŒãã§ã¯ãåã®ããã¯ã¢ããã«å¯Ÿãã倿Žã¯ãããŒã¿ãã¡ã€ã«ã§ã¯ãªããåã®ããã¯ã¢ãã以éã«çޝç©ãããWALã«ãã£ãŠèšç®ãããŸãã
PSæè²ç®çã®ã¿ïŒsrv_db1ãµãŒããŒã®ããŒã¿ããŒã¹ã«ããŒãã«ãäœæããŸãããã
psql -c 'create table timing(time_now timestamp with time zone)'
次ã«ã次ã®è¡ãcrontabã«æžã蟌ã¿ãŸãã
* * * * * psql -c 'insert into timing(select now())'
æ¯åãçŸåšã®æå»ã«é¢ããæ å ±ãããŒã¿ããŒã¹ã«èšé²ãããŸãããã®æ å ±ã¯ãããæç¹ã«åŸ©å ãããšãã«åœ¹ç«ã¡ãŸãã
åé¡3
äžãããããã®ïŒ
2ã€ã®ãµãŒããŒããããæåã®ãµãŒããŒã«ã¯ããŒã¿ããŒã¹ïŒhostname srv_db1ãuser postgresïŒãããã2çªç®ã®ãµãŒããŒã«ã¯ã¢ãŒã«ã€ããããããã¯ã¢ãããšWALãã¡ã€ã«ïŒhostname srv_bkpãuser backup_userïŒãæ ŒçŽãããŠããŸããå¥ã®ãµãŒããŒsrv_db2ãç°å¢ïŒãŠãŒã¶ãŒpostgresïŒã«è¡šç€ºãããã¯ã©ã¹ã¿ãŒã®ã¬ããªã«ããããã€ããã¬ããªã«ããããã¯ã¢ãããååŸããããã«pg_probackupãåæ§æããå¿ èŠããããŸãã
決å®ïŒ
ã€ã³ã¿ãŒãããã«ã¯ãPostgreSQLã§ã¬ããªã«ãäœæããæ¹æ³ã®èª¬æããããããããŸããæ€çŽ¢ãšã³ãžã³ã«ãPostgreSQLã§ã¬ããªã«ãäœæãããããã©ã€ãããã ãã§ããéžæããŠãã ãããããã¥ã¡ã³ããèšäºãããã«ã¯ãããªãã¥ãŒããªã¢ã«ããããŸãããããŠããããã®æ¹æ³ã¯ãã¹ãŠåªããŠããŸãããéåžžããã§ã«ããã¯ã¢ãããããããšãèæ ®ããŠããŸãããããã¯ã¢ããã䜿çšããŠã¬ããªã«ãäœæãããã®ã§ããã¹ã¿ãŒããèªã¿åãè² è·ãåãé€ããŸããã€ãŸããæ¬çªãµãŒããŒã¯ããã®é£ã«ã¬ããªã«ãäœæãããŠããããšãèªèããŸããïŒãã¡ãããããã«ã¯äºçŽãå¿ èŠã§ããããã§ã¯ãã¬ããªã±ãŒã·ã§ã³ã¹ããããäœæããŠã¢ã¯ã»ã¹æš©ãèšå®ããå¿ èŠããããŸãããã¬ããªã«ãäœæããŠããéããã¹ã¿ãŒã«è¿œå ã®è² è·ã¯ããããŸããããªããªãã ããïŒã
srv_bkpãµãŒããŒãšsrv_db2ãµãŒããŒéã®ããŒã«ããã¢ã¯ã»ã¹ãèšå®ããPostgreSQLãšpg_probackupãsrv_db2ã«ã€ã³ã¹ããŒã«ããŸãïŒæåã®ã¿ã¹ã¯ã§PostgreSQLã®ã€ã³ã¹ããŒã«ä»¥å€ã®ãã¹ãŠãå®è¡ããŸããããDBMSã®ã€ã³ã¹ããŒã«ã«ã€ããŠè³ªåãããå Žåã¯ããã¡ããã芧ãã ããïŒã
srv_db2ã«ç§»åããŸã
ssh-keygen -t rsa
ssh-copy-id backup_user@srv_bkp
srv_bkpã«ç§»åããŸã
ssh-copy-id postgres@srv_db2
å éšãã©ãã€ãããªã³ã«ããŠãã/ .ssh / autorized_keysãç·šéããŸããã-æ¿å ¥
command="pg_probackup-12 agent"
æ°ããããŒã®åã
WALãã¡ã€ã«ã®äœ¿çšã¯ãããã¯ã¢ããããã®åŸ©å ãããã¯ããã«é ããããå¥ã®å¢åããã¯ã¢ãããäœæããŸããããbackup_userã䜿çšããŠsrv_bkpãµãŒããŒã«æ¥ç¶ããæ¬¡ã®ã³ãã³ããå®è¡ããŸãã
pg_probackup backup --instance=db1 -j 2 --progress -b PAGE --compress
äœæããã¹ã¯ãªããã䜿çšããªãã£ãã®ã¯ãªãã§ããïŒå®éã以åã«ã¹ã¯ãªããã«--delete-walãªãã·ã§ã³ã远å ããŸãããã€ãŸãããã®ããã¯ã¢ãããäœæããåŸã3æ¥åã®æç¹ã«åŸ©å ããããšã¯ã§ããŸããããã ãããã®ããã¯ã¢ãããæ®ããå Žåãã¹ã¯ãªããã®å®è¡ã«ãã£ãŠäœæãããæ¬¡ã®ããã¯ã¢ããã¯ãéå»2æ¥éã ãWALãæ®ããŸããã€ãŸãããã®ããã¯ã¢ããããå埩ããåŸãåé€ããã®ãçã«ããªã£ãŠããŸãã
ç§ãã¡ã¯å埩ããŸãïŒ
time pg_probackup restore --instance=db1 -D /var/lib/pgsql/12/data -j 2 --restore-as-replica --progress --remote-proto=ssh --remote-host=srv_db2 --archive-host=srv_bkp --archive-user=backup_user --log-level-console=log --log-level-file=verbose --log-filename=restore_rep.log
/ var / lib / pgsql / 12 / dataãã£ã¬ã¯ããªã¯ç©ºã§ããå¿ èŠããããŸããããã«ãsrv_db1ãµãŒããŒã§ã¯ãpg_hba.confã«å€æŽãå ããå¿ èŠããããŸããã¬ããªã±ãŒã·ã§ã³ãããã³ã«ã䜿çšããŠsrv_db2ãµãŒããŒããã®ã¢ã¯ã»ã¹ãèš±å¯ããŸãã
host replication all srv_db2 md5
æ§æãèªã¿çŽããŸãã
psql -c 'select pg_reload_conf()'
ã¿ã€ããã¹ã®ç¢ºèªïŒ
psql -c 'select * from pg_hba_file_rules'
srv_db2ã«ãã¡ã€ã«ã/ .pgpassãäœæããŸãããã®ãã¡ã€ã«ã§ã¯ãsrv_db1ã§æ¥ç¶æš©éãæå®ããŸãããä»åã¯ã¬ããªã±ãŒã·ã§ã³ããŒã¹ã䜿çšããŠPostgreSQLãèµ·åããŸãã
srv_db1:5432:replication:backup:Strong_PWD
ãããŠããã®æš©å©ã600ã«å€æŽããŸãããã
chmod 600 ~/.pgpass
srv_db2ã§ã¯ã©ã¹ã¿ãŒãéå§ããŸãã
ãã¹ãŠãããŸãæ©èœããããšã確èªããŸããããããã«ã¯ã次ã®å¯èœæ§ã䜿çšããŸãã
ãã®äžã®ã¬ããªã«ãã°ãã¡ã€ã«ã調ã¹ãŸããæåŸã®ã©ããã«ã次ã®è¡ã衚瀺ãããŸãã
Database system is ready to accept read only connections
psql -c 'select pg_is_in_recovery()'
tãè¿ãå¿ èŠããã
ãŸã次ã«ããŠã£ã¶ãŒãã§ãã¬ãŒãt1ãäœæããŸãããã
srv_db1: psql -c 'create table t1()'
ã¬ããªã«ã«è¡šç€ºãããŠããã確èªããŠã¿ãŸãããã
srv_db2: psql -c '\d'
ãã¬ãŒããæå®ã®äœçœ®ã«ãããè€è£œãæ©èœããŠããŸãããã¹ã¿ãŒã®ãã¬ãŒããåãå€ããŸãã
srv_db1: psql -c 'drop table t1'
ãã¡ãããå®éã®ããŒã¿ããŒã¹ã§ã¯ããã¹ã¿ãŒã«ã¬ããªã±ãŒã·ã§ã³ã¹ããããäœæãããã®ã¹ããããä»ããŠãã¹ã¿ãŒã«éä¿¡ãããããã«ã¬ããªã«ãæ§æããå¿ èŠããããŸããããã®èšäºã®ãããã¯ã¯ã¬ããªã«ã§ã¯ãªãããã¯ã¢ãããªã®ã§ãç¶ããŸãããã
ãããã£ãŠãã¬ããªã«ã¯æ©èœããŸããå¿ èŠã«å¿ããŠãã¬ããªã«ã«åãæ¿ããããšãã§ããŸãããèªåèªèº«ã«è³ªåããŠã¿ãŸãããããã£ãšããŸãã§ããã§ããããã
ãã¡ããã§ããŸãããã¹ã¿ãŒããèªã¿åãè² è·ãåãé€ãããããã¬ããªã«ã«è»¢éã§ããã®ã«ããªããã¹ã¿ãŒããããã¯ã¢ãããåãå¿ èŠãããã®ã§ããïŒ
泚æïŒREPLIC LACK MONITORINGã¯ç£èŠããå¿ èŠããããŸããããããªããšãREPLICAãé ããŠããããšãç¥ãããREPLICALAGããã®ããã¯ã¢ãããç¶è¡ããå¯èœæ§ããããŸãã
ãããããïŒ
srv_db1ãµãŒããŒãšsrv_db2ãµãŒããŒã®ã¯ã©ã¹ã¿ãŒèšå®ã倿ŽããŸãã
alter system set archive_timeout=180;
select pg_reload_conf();
srv_bkpã«ç§»åããremote-hostãã©ã¡ãŒã¿ãŒã®å€ã倿ŽããŸãã
pg_probackup set-config --instance db1 --remote-host=srv_db2
srv_bkpãµãŒããŒã®.pgpassã«å€æŽãå ããŸã-srv_db2ãµãŒããŒã«æ¥ç¶æååã远å ããŸãã
srv_db2:5432:replication:backup:Strong_PWD
srv_db2:5432:backupdb:backup:Strong_PWD
ãããŠãå¥ã®ããã¯ã¢ãããåã£ãŠã¿ãŸãããã
srv_bkp: ./bkp_base.sh PAGE
ããã¯ã¢ãããæ©èœããŠããããšãããããŸãã
åé¡ã¯è§£æ±ºããŸããïŒ
次ã®ããŒãã§ã¯ãããã¯ã¢ããããã®åŸ©å ã«ã€ããŠèª¬æããŸããããŸããŸãªå埩ãªãã·ã§ã³ãæ€èšããç¹å®ã®ããã¯ã¢ããã«åŸ©å ããæ¹æ³ãåŠã³ãããæç¹ã§ãéšåçããã³å¢åçãªåŸ©å ã«ã€ããŠçè§£ããŸãã