pgpool-II demonstration

7,155 views

Published on

Published in: Technology, Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,155
On SlideShare
0
From Embeds
0
Number of Embeds
57
Actions
Shares
0
Downloads
209
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

pgpool-II demonstration

  1. 1. pgpool-II demonstration pgpool Global Development Group Yoshiyuki Asaba y-asaba@sraoss.co.jp 1
  2. 2. agenda 1. Replication & online recovery demo 2. Warm standby with pgpool 2
  3. 3. Online recovery 3
  4. 4. Environment • pgpool and PostgreSQL servers are on localhost. pgpool-II (port 9999) PostgreSQL 8.3.1 PostgreSQL 8.3.1 (port 5432) (port 5433) ~/demo/5432/data ~/demo/5433/data ~/demo/5432/archive_log ~/demo/5433/archive_log master node secondary node 4
  5. 5. Pgpool setting(1) • pgpool.conf # Master node info backend_hostname0 = ‘localhost’ backend_port0 = 5432 backend_data_directory0 = ‘/home/y-asaba/demo/5432/data’ # Secondary node info backend_hostname1 = ‘localhost’ backend_port1 = 5433 backend_data_directory1 = ‘/home/y-asaba/demo/5433/data’ 5
  6. 6. Pgpool setting(2) • pgpool.conf # Enable replication replication_mode = true # Enable load balance load_balance_mode = true # Online recovery user recovery_user = ‘y-asaba’ # The first stage script recovery_1st_stage_command = ‘base-backup.sh’ # The second stage script recovery_2nd_stage_command = ‘pgpool-recovery’ 6
  7. 7. 1st stage script • Create base backup #! /bin/sh PORT=5432 DATA=$HOME/demo/$PORT psql -c "select pg_start_backup('pgpool-recovery')" postgres # Generate recovery.conf. echo "restore_command = 'cp $DATA/archive_log/%f %p‘” >$DATA/data/recovery.conf # Copy base backup. rsync -az --delete -e ssh --exclude postmaster.pid --exclude postmaster.opts ¥ --exclude pg_log --exclude postgresql.conf $1/ $3/ psql -c 'select pg_stop_backup()' postgres 7
  8. 8. 2nd stage script • Archive a current XLOG. #! /bin/sh # Archive a current xlog. psql -c 'select pg_switch_xlog()' postgres 8
  9. 9. pgpool_remote_start • Script for starting up PostgreSQL – The first argument is a recovery target name. – The second argument is a recovery target’s PGDATA #! /bin/sh DEST=$1 DESTDIR=$2 PGCTL=/home/y-asaba/bin/pg_ctl $PGCTL -w -D $DESTDIR start 9
  10. 10. Scale up • Add a new backend node without stopping pgpool. pgpool-II (port 9999) PostgreSQL 8.3.1 PostgreSQL 8.3.1 PostgreSQL 8.3.1 (port 5432) (port 5433) (port 5434) 10
  11. 11. pgpool-II & warm standby 11
  12. 12. pgpool-II & warm standby • Clients does not change connection host. • Pgpool-II does health checking and failover process. – I’ve fixed a failover bug today… Please download CVS HEAD. Client pgpool-II (9999 port) PostgreSQL 8.3.1 PostgreSQL 8.3.1 12 (5432 port) (5434 port) log shipping
  13. 13. pgpool-II&warm standby demo 1. Set up warm standby 2. Set up pgpool 3. Start up pgpool 4. createdb –p 9999 warm 5. pgbench –i –p 9999 warm • SELECT COUNT(*) FROM accounts; 6. Shutdown PostgreSQL 7. Check failover 13
  14. 14. Set up warm standby • recovery.conf restore_command = ‘pg_standby –s –t /tmp/pgsql.trigger ~/demo/5432/archive_log %f %p %r’ • postgresql.conf port = 5434 archive_mode = on archive_command = ‘cp –f %p ~y-asaba/demo/5432/archive_log/%f’ archive_timeout = 60 14
  15. 15. Set up pgpool • pgpool.conf – Need to generate ssh key without pass phrase backend_hostname0 = ‘localhost’ backend_port0 = 5432 backend_hostname1 = ‘localhost’ backend_port1 = 5434 failover_command = ‘ssh localhost touch /tmp/pgsql.trigger’ replication_mode = false master_slave_mode = false parallel_mode = false 15
  16. 16. Failover • Pgpool can execute a script at failover. – pgpool.conf failover_command = ‘ssh localhost touch /tmp/trigger’ pgpool-II (9999 port) touch /tmp/pgql-trigger PostgreSQL 8.3.1 PostgreSQL 8.2.5 (5432 port) (5434 port) monitor /tmp/pgql-trigger 16 pg_standby
  17. 17. Single Point of Failure? • No. httpd httpd UNIX domain UNIX domain socket … socket pgpool-II pgpool-II (9999 port) (9999 port) PostgreSQL 8.3.1 PostgreSQL 8.3.1 (5432 port) (5433 port) log shipping 17
  18. 18. Thanks. 18

×