PostgreSQL BDRã®æŠèŠ

PostgreSQLã¯ãå®å®ããä¿¡é Œæ§ã®é«ãDBMSã§ããã ãã§ãªãããã¹ãŠã«ãã©ã¹ã§ããããªãªãŒã¹ããšã«ããŸããŸãªãã¬ãŒã¯ã¹ã«ãŒãçŸããåçã«éçºããã補åã§ãã ãã€ãŠããããã®ãã¯ãããžãŒã®1ã€ã¯ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ã§ããã ããã¯ãèªã¿åãããŒã¿ããŒã¹ã®ã¹ã±ãŒãªã³ã°ãéåžžã«ç°¡åãã€å®äŸ¡ã«ããé«æ§èœã¬ããªã±ãŒã·ã§ã³ã§ãã ããã䜿çšããŠãèªã¿åãã®è² è·ãããŒãéã§åæ£ããããšã«ãããä¿¡é Œã§ããæ§æãäœæã§ããŸãã ãã ããäžã§æžããããã«ããã®è£œåã¯éçºäžã§ãããæ¬æ¥ã¯æ°ããBDRïŒBi-Directional ReplicationïŒãã¯ãããžãŒã«çŠç¹ãåœãŠãŸãã
件åã«å«ãŸããŠããªã人ã®ããã®ããã€ãã®çšèªïŒ
WALïŒWrite Ahead LogïŒã¯ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã§ãããpostgresã®çµã¿èŸŒã¿ã¹ããªãŒã ã¬ããªã±ãŒã·ã§ã³ã¯ããã«åºã¥ããŠãããDBMSã¯ããŒã¿ããŒã¹å
ã®ããŒã¿ã«çºçãããã¹ãŠãããã«æžã蟌ã¿ãŸãã
SRïŒã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ïŒ -WALã«åºã¥ãçµã¿èŸŒã¿
ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ã®äžè¬åãWALã«æžã蟌ãŸããã¹ã¬ãŒãã«éä¿¡ãããŠåçããããã¹ãŠã®ãã®ã ç©ççããã³è«ççãªã¹ããªãŒãã³ã°è€è£œããããŸãã
PLSRïŒç©çãã°ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ïŒ -ç©çã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ïŒæ¢ã«å®è£
ããåäœããŠãããã®ïŒãWALã«å
¥ããã¹ãŠã®ãã®ã¯ãããã«åæããããšãªããµãŒããŒã¹ã¬ãŒãã«ã¬ããªã±ãŒããããŸããããã¯ãããŒã¿/åè·¯ã®å€æŽããã³äžäœã¬ãã«ã®ãã®ïŒå
šããŒãžæžã蟌ã¿ãããã¥ãŒã ããã³ããããèšå®ïŒã
LLSRïŒè«çãã°ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ïŒ -è«çã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ïŒ9.4ã«è¡šç€ºïŒãWALãã°ã«åºã¥ããŠããŸããããã§ã«ããã€ã³ããªãžã§ã³ãã§ããããã°ã®ç¹å®ã®éšåã®ã¿ãã¬ããªã±ãŒã·ã§ã³ã®ããã«æœåºãããããŒã¿ããŒã¹ã¹ããŒããšããŒã¿ã®å€æŽãèšè¿°ããŸãïŒã€ãŸããããã€ãã®äœã¬ãã«ã®ãã®ã¯åé€ãããŸãïŒ ã
BDRãšããçšèªã®äžã«é ãããŠãããã®ã¯äœã§ããïŒ
BDRïŒåæ¹åã¬ããªã±ãŒã·ã§ã³ïŒã¯ãé«åºŠãªã¬ããªã±ãŒã·ã§ã³ããŒã«ãæäŸããPostgreSQLã«ãŒãã«ã«è¿œå ãããæ°æ©èœã§ãã çŸæç¹ã§ã¯ãããã¯å°ããªããããšã¢ãžã¥ãŒã«ãšããŠå®è£
ãããŠããŸãã PostgreSQL 9.5ïŒçŸåš9.3-stableããã³9.4-beta1ïŒã§ã®ã¿å®å
šã«ãµããŒãããããšè¿°ã¹ãããŠããŸãã
èŠããã«ãBDRã§ã¯ãLLSRã®çµã¿èŸŒã¿è«çã¹ããªãŒã ã¬ããªã±ãŒã·ã§ã³ã䜿çšããŠãå°ççã«åæ£ããéåæãã«ããã¹ã¿ãŒæ§æïŒãããã¯ãããã€ããŒïŒãäœæã§ããŸãã
ãã ããBDRã¯ã¯ã©ã¹ã¿ãªã³ã°çšã®ããŒã«ã§ã¯ãããŸããã ã°ããŒãã«ããã¯ãããŒãžã£ãŒãŸãã¯ãã©ã³ã¶ã¯ã·ã§ã³ã³ãŒãã£ããŒã¿ãŒïŒhello
Postgres-XC / XLïŒã¯ãããŸããã åããŒãã¯ä»ã®ããŒãããç¬ç«ããŠãããããããã³ã°ãããŒãžã£ãŒã䜿çšãããŠããå Žåã¯äžå¯èœã§ãã åããŒãã«ã¯ãä»ã®ããŒãã®ããŒã¿ãšåäžã®ããŒã¿ã®ããŒã«ã«ã³ããŒãå«ãŸããŠããŸãã ãªã¯ãšã¹ããããŒã«ã«ã§ã®ã¿å®è¡ãããŸãïŒèª¬æãæ確ã«ããããã«ããã¹ãŠã®ãµãŒããŒã1ã€ã®ããŒã ã®ããã«åäœãããã©ã³ã¶ã¯ã·ã§ã³ãã°ããŒãã«ãã©ã³ã¶ã¯ã·ã§ã³ãããŒãžã£ãŒã«ãã£ãŠã«ãŒã«ãããã¢ããªã±ãŒã·ã§ã³ããã®ãªã¯ãšã¹ããã³ãŒãã£ããŒã¿ãŒã«éä¿¡ãããPostgres-XC / Postgres-XLãšæ¯èŒããŸãïŒs ïŒããã¯ãåä¿¡ãããªã¯ãšã¹ããå®è¡ããäœæ¥ããŒãã«éä¿¡ããŸããããïŒã åæã«ãåããŒãã¯ãã€ã§ãå
éšçã«äžè²«ããŠããŸããããµãŒããŒã®ã°ã«ãŒãå
šäœã¯æçµçã«
äžè²«ããŠããŸãã
BDRã®ç¬èªæ§ã¯ãçµã¿èŸŒã¿ã®ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ãæ¢åã®ããªã¬ãŒããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ïŒLondisteãSlonyãBucardoïŒã®ãããªãã®ã§ã¯ãªããšããäºå®ã«ãããŸãã
ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ãšã®æãé¡èãªéãã¯ãBDRïŒLLSRïŒãããŒã¿ããŒã¹ããšã®ã¬ããªã±ãŒã·ã§ã³ã§åäœããã®ã«å¯ŸããåŸæ¥ã®PLSRã¯ã€ã³ã¹ã¿ã³ã¹å
šäœïŒã¯ã©ã¹ã¿ãŒããšã®ã¬ããªã±ãŒã·ã§ã³ïŒãã¬ããªã±ãŒãããããšã§ãã ã€ã³ã¹ã¿ã³ã¹å
ã®ãã¹ãŠã®ããŒã¿ããŒã¹ã
æ¢åã®å¶éãšæ©èœïŒ
1. INSERT / DELETE / UPDATEã«ãã£ãŠåŒãèµ·ãããããã¹ãŠã®ããŒã¿å€æŽãè€è£œãããŸãïŒæžã蟌ã¿æã®TRUNCATEã¯ãŸã å®è£
ãããŠããŸããïŒ
2.ã»ãšãã©ã®ã¹ããŒãå€æŽïŒDDLïŒæäœã¯æ£åžžã«è€è£œãããŸãã ãµããŒããããŠããªãDDLã¯ã¬ããªã±ãŒã·ã§ã³ã¢ãžã¥ãŒã«ã«ãã£ãŠã³ãããããããšã©ãŒã§æåŠãããŸãïŒCREATE TABLE ... ASã¯å·çæç¹ã§ã¯æ©èœããŸããã§ããïŒ
3.ããŒãã«ãã¿ã€ããæ¡åŒµãªã©ã®å®çŸ© ã¢ããã¹ããªãŒã ãã¹ã¿ãŒãšããŠã³ã¹ããªãŒã ãã¹ã¿ãŒéã§åäžã§ããå¿
èŠããããŸãã
4. WALã«åæ ãããããè«ççãªå€æŽãšããŠè¡šç€ºãããªãã¢ã¯ã·ã§ã³ã¯ãå¥ã®ããŒãã«ã¬ããªã±ãŒããããŸããïŒããŒãžå
šäœã®èšé²ãããŒãã«ã®éé¿ãªã©ïŒã ãããã£ãŠãè«çã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ïŒLLSRïŒã¯ãPLSRã®ç©çã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ã«ååšãããªãŒããŒãããã®äžéšãæé€ããŸãïŒãã ããããã¯ãLLSRãPLSRãããå°ãªããããã¯ãŒã¯åž¯åå¹
ãå¿
èŠãšããããšãæå³ãããã®ã§ã¯ãããŸããïŒã
ããããååãªçè«ãå°ãç·Žç¿ã ãã§ã«åæ¹åã¬ããªã±ãŒã·ã§ã³ããã¹ãããæ©äŒããããŸãã
ã€ã³ã¹ããŒã«ã¯ãCentOS 6.5æå°ã®2ã€ã®ä»®æ³ãã·ã³ã§å®è¡ãããŸãã ã¢ã»ã³ããªã«å¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
postgresã¢ã«ãŠã³ãã«ç§»åããBDRãµããŒãä»ãã®postgresqlãã€ã³ã¹ããŒã«ããŸãã 2ndQuadrantã®ã¡ã³ããŒãã€ã³ã¹ããŒã©ãŒãæžããã®ã§ãè©ŠããŠã¿ãã人ãã€ã³ã¹ããŒã«ãšèšå®ã«ããŸãåŽåããããªãããã«æ³šæããŠãã ããã
postgreså®è¡å¯èœãã¡ã€ã«ãå«ããã£ã¬ã¯ããªãPATHç°å¢å€æ°ã«è¿œå ããããã«
psqlã確èªããŸãã 誰ãç¥ããªãã®ã§ã
exportã³ãã³ãã¯1åéãã§ãããããã£ãŠãBDRãé·æé䜿çšããããã¬ã€ããäºå®ãããå Žåã¯ããã®ã³ãã³ããè¿œå ããŠãã ããã ãŠãŒã¶ãŒã®
bashrc ïŒãã¡ãã
bashãããå ŽåïŒã
$ export PATH=$HOME/2ndquadrant_bdr/bdr/bin:$PATH $ psql --version psql (PostgreSQL) 9.4beta1_bdr0601
äž¡æ¹ã®ããŒãã§ããŒã¿ããŒã¹ãã£ã¬ã¯ããªãåæåããããã«éå§ããŸãã
Postgresql.confãäºåã«ç·šéããå¿
èŠ
ã¯ãããŸãã;æåã®èµ·åæã«ãå°æ¥è€è£œããããã¹ãããŒã¿ããŒã¹ãäœæããŸãã
$ initdb -D data/ -A trust -U postgres $ pg_ctl -l logfile -D data/ -w start $ psql -c 'create database staging_db'
ããŒã¿ããŒã¹ãäœæããåŸãpostgresql.confã®ã»ããã¢ããã«é²ã¿ãŸãã æåã«ãã¢ããã¹ããªãŒã ãŠã£ã¶ãŒããæ§æããŸãã 以äžã®æ§æã§ã¯ãbdrã©ã€ãã©ãªïŒ
shared_preload_libraries ïŒãããŒãããWALãã°ã®
åé·ã¬ãã«ãè«çã¬ãã«ïŒ
wal_level ïŒã«æ±ºå®ããè€è£œã®ã¹ãããæ°ãWALãã°ã®éä¿¡ã«é¢äžããããã»ã¹ã®æ倧å¯èœæ°ïŒ
wal_senders ïŒã決å®ããæäœã®æé远跡ã
æå¹ã«ããå¿
èŠæ§ã瀺ããŸã競åã解決ããããã«å¿
èŠãªãã®ãã³ãããããŸãïŒæåŸã®UPDATE-winsïŒã 次ã«ããã¡ã€ã«ã®æåŸã§ãBDRã®æ§æã決å®ããŸããæ¥ç¶ã®ååãšããªã¢ãŒããã¹ãã«æ¥ç¶ããããã®èšå®ãæå®ããŸãã
bdr.connectionsã§ç€ºããã
ååã¯ä»»æã§ãïŒãã®ä»®æ³ãã·ã³ã®ååããããŸãïŒãäž»ãªããšã¯ãæå®ãããååãåºç€ãšãªããã©ã¡ãŒã¿ãŒã®ååã«åå ããããšã§ãã
$ vi data/postgresql.conf listen_address = '*' shared_preload_libraries = 'bdr' wal_level = logical wal_senders = 4 max_replication_slots = 4 track_commit_timestamp = on bdr.connections = 'vm13' bdr.vm13_dsn = 'host=192.168.122.13 port=5432 user=postgres dbname=staging_db'
æ§æããŠã³ã¹ããªãŒã ãŠã£ã¶ãŒãã ãŸããæ§æã®èª¬æãè¡ãã次ã«ãã®åæã説æããŸãã
$ vi data/postgresql.conf listen_address = '*' shared_preload_libraries = 'bdr' wal_level = logical wal_senders = 4 max_replication_slots = 4 track_commit_timestamp = on bdr.connections = 'vm12' bdr.vm12_dsn = 'host=192.168.122.12 port=5432 user=postgres dbname=staging_db' bdr.vm12_init_replica = on bdr.vm12_replica_local_dsn = 'host=127.0.0.1 port=5432 user=postgres dbname=staging_db'
2çªç®ã®ããŒãã®ã»ããã¢ããã«ã¯ã»ãšãã©éãããããŸãããç¹ã«ãBDRæ§æã§ã¯ã
bdr.vm12_dsnã§æå®ãããããŒããã
bdr.vm12_replica_local_dsnã§æå®ãããããŒã«ã«ããŒã¿ããŒã¹ãžã®ã¬ããªã«ïŒ
bdr.vm12_init_replica ïŒãåæåããå¿
èŠãããããšã瀺ããŠããŸãã æåŸã®ãã©ã¡ãŒã¿ãŒã¯ãããŒã¿ããŒã¹ã¯ã©ã¹ã¿ãŒã
initdbã䜿çšããŠåæåãããå ŽåïŒãã®å ŽåïŒã«å¿
èŠã§ããããã®å Žåãã¯ã©ã¹ã¿ãŒã«åŸã§ã¬ããªã±ãŒã·ã§ã³ã«åå ãã空ã®ããŒã¿ããŒã¹ãå¿
èŠã§ãã
pg_basebackupã«ããåæåã®å Žå
ãbdr.vm12_replica_local_dsnãªãã·ã§ã³ã¯äžèŠã§ãã
ããã§ãäž¡æ¹ã®ããŒãã®èªèšŒèšå®ã決å®ããŸããç§ã®å Žåããã¹ãŠãèš±å¯ãããŠããŸãã ãã¡ãããå®çšŒåã€ã³ã¹ããŒã«ã®å Žåãããã¯å®è¡ã§ããŸããã
$ vi data/pg_hba.conf host all all 192.168.122.0/24 trust host replication postgres 192.168.122.0/24 trust
äž¡æ¹ã®ããŒããåèµ·åãããã°ã確èªããŸã
$ pg_ctl -l logfile -D data/ -w restart
ã¢ããã¹ããªãŒã ãã¹ã¿ãŒïŒvm12ã$ tail -fãã°ãã¡ã€ã«
ãã°ïŒã¹ã¿ã³ãã€æ¥ç¶ã§ã®äºæããªãEOF
ãã°ïŒã¹ãããbdr_16384_6029905891437956874_1_16384__ã®è«çãã³ãŒãã®éå§
詳现ïŒ0 / 1898F90ã®åŸã«ã³ãããããã¹ããªãŒãã³ã°ãã©ã³ã¶ã¯ã·ã§ã³ã0 / 1898C30ããWALãèªã¿åã
LOGïŒè«çãã³ãŒãã«ããã0 / 1898C30ã«äžè²«ãããã€ã³ããèŠã€ãããŸãã
詳现ïŒxcnt == 0ã§xactsãå®è¡ãã
ãã°ïŒããã¯ã°ã©ãŠã³ãã¯ãŒã«ãŒããã»ã¹ãéå§ããŠããŸã "bdrïŒ6029905879776466735,1,16384ãïŒïŒvm13ïŒapply"
ããŠã³ã¹ããªãŒã ãã¹ã¿ãŒïŒvm13ã$ tail -fãã°ãã¡ã€ã«
ãã°ïŒããã¯ã°ã©ãŠã³ãã¯ãŒã«ãŒã®ç»é² "bdrïŒ6029905891437956874,1,16384ãïŒïŒvm12ïŒapply"
ãã°ïŒããã¯ã°ã©ãŠã³ãã¯ãŒã«ãŒããã»ã¹ãéå§ããŠããŸã "bdrïŒ6029905891437956874,1,16384ãïŒïŒvm12ïŒapply"
LOGïŒè«çãã³ãŒãã§ã0 / 18A4290ã«äžè²«ãããã€ã³ããèŠã€ãããŸãã
詳现ïŒxcnt == 0ã§xactsãå®è¡ãã
LOGïŒãšã¯ã¹ããŒããããè«çãã³ãŒãã¹ãããã·ã§ããïŒxidã0ã®ã0000071B-1ã
ãã°ïŒã¹ãããbdr_16384_6029905879776466735_1_16384__ã®è«çãã³ãŒãã®éå§
詳现ïŒ0 / 18A42C8ã®åŸã«ã³ãããããã¹ããªãŒãã³ã°ãã©ã³ã¶ã¯ã·ã§ã³ã0 / 18A4290ããWALãèªã¿åã
LOGïŒè«çãã³ãŒãã§ã0 / 18A4290ã«äžè²«ãããã€ã³ããèŠã€ãããŸãã
詳现ïŒxcnt == 0ã§xactsãå®è¡ãã
ãã°å
ã®ãã¹ãŠãæ£åžžã§ããããšã©ãŒã¡ãã»ãŒãžã¯ãããŸããïŒãããããªããæ§æã確èªããããéçºè
ã®çœªïŒïŒïŒã ããã§ã»ããã¢ãããšèµ·åãå®äºããŸããã ããã§ãäž¡æ¹ã®ããŒã¿ããŒã¹ã«ããŒãã«ãäœæããŠãäœæ¥ã確èªã§ããŸãã
ããã«ããã€ãã®ãã€ã³ãã ããŠã³ã¹ããªãŒã ãŠã£ã¶ãŒãããªãã«ããŠãã¬ããªã±ãŒã·ã§ã³ãäžæçã«åæ¢ããŸãã ãã ããã¬ããªã«ãåæ¢ãããšãäžæµã®ãã¹ã¿ãŒãWALãã°ãèç©ãç¶ããããšã«æ³šæããŠãã ãããããã«ãããå¶åŸ¡ãããŠããªããã£ã¹ã¯å®¹éãæ¶è²»ãããå¯èœæ§ããããŸãã ãããã£ãŠãã¬ããªã«ãé·æéãªãã«ããªãããšã匷ããå§ãããŸãã
ã¬ããªã«ã®åé€ã¯ãããŠã³ã¹ããªãŒã ãµãŒããŒã®BDRæ§æãåé€ããŠããããŠã³ã¹ããªãŒã ãŠã£ã¶ãŒããåèµ·åããããšã§æ°žä¹
ã«è¡ãããŸãã 次ã«ãpg_drop_replication_slotïŒ 'slotname'ïŒé¢æ°ã䜿çšããŠãã¢ããã¹ããªãŒã ãŠã£ã¶ãŒãã®å¯Ÿå¿ããã¬ããªã±ãŒã·ã§ã³ã¹ããããåé€ããå¿
èŠããããŸãã å©çšå¯èœãªã¹ãããã¯ãpg_get_replication_slotsïŒïŒé¢æ°ã䜿çšããŠè¡šç€ºã§ããŸãã
çµè«ãšããŠãç§ã®å°è±¡ãã話ãããŸã...ãã¡ãããBDRã®éçšã«ã€ããŠããã€ã質åããããŸããããã®çãã¯ããããå®éšçã«æ±ºå®ããå¿
èŠããããŸãã ãããããã®æ®µéã§ãã§ã«ãã®æ°ããããŒã«ãæ°ã«å
¥ã£ãŠããŸããç°¡åãã€è¿
éã«èšå®ã§ããŸããããã«ãå
¬åŒã«9.5ã§ã®ã¿è¡šç€ºããããšããäºå®ã«ãé¢ãããããã§ã«æ©èœããŠããŸãïŒããã¯çŽ1幎åŸã§ãïŒã ãããã£ãŠããã®ãªãªãŒã¹ã§ã¯ãä¿¡é Œæ§ã®é«ããã©ãŒã«ããã¬ã©ã³ããªæ§æãäœæã§ããããŒã«ãè¿œå ãããŸãããããã¯çŽ æŽãããããšã§ãã ãªãªãŒã¹ãããªãªãŒã¹ãžã®PostgreSQLã¯ãã©ãã©ãè¯ããªã£ãŠããŸãã
å®éã«ã¯ããã ãã§ãã ãæž
èŽããããšãããããŸããã
èªãã¹ãPSãªã³ã¯ïŒ
BDRãŠãŒã¶ãŒã¬ã€ãè«çãã°ã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³PostgreSQL WAL Shipping and Streaming Replication