Pitr Made Easy

30
PITR made easy Joshua Drake United States PostgreSQL Software in the Public Interest Command Prompt, Inc. Creative Commons Attribution-Share Alike 3.0 United States License

description

A talk given at multiplier conferences on PITRTools. A PostgreSQL Warm Standby helper.

Transcript of Pitr Made Easy

Page 1: Pitr Made Easy

PITR made easy

Joshua Drake

United States PostgreSQL

Software in the Public Interest

Command Prompt, Inc.Creative Commons Attribution-Share Alike 3.0 United States License

Page 2: Pitr Made Easy

What is PITR

Log shipping/Warm Standby/Replication

Page 3: Pitr Made Easy

What can you do with it?

Simple asynchronous fail over scenariosLow impact backups

Simple archiving

Page 4: Pitr Made Easy

What can't you do with it?

Read only slave

Page 5: Pitr Made Easy

Why is PITR hard?

It was written by open source engineers.

Page 6: Pitr Made Easy

Uses the many tools to one solution

rsync?nfs?

walmgr?scp?

Push or pull?Something else?

Page 7: Pitr Made Easy

What makes PITR easy?

PITR toolsBSD Licensed

Written in Python(theoretically cross platform)

Page 8: Pitr Made Easy

What is PITRTools

A simple wrapper around all the utilities you already have.

ssh,rsync,pg_standby,postgresql

Designed by a consultant (KISS)

Page 9: Pitr Made Easy

PITRTools Features?

Warm standbyCold Storage

Fail over (actionable)Arbitrary alerts (monitoring)

Single protocol (security)

Page 10: Pitr Made Easy

How does it work?

Queue

SlaveMastersuccess

else

Page 11: Pitr Made Easy

The process on the archiver/master

On the archiver/Master:● Configure ssh key for postgres user to standby/slave

● Configure archiver.ini● cmd_archiver -C /path/to/archiver.ini -I

Page 12: Pitr Made Easy

The archiver

The archiver calls cmd_archive.py which calls rsync to “push” the file to the slave or queue.

Usage: cmd_archiver [options] arg1 arg2

Options: -h, --help show this help message and exit -F FILE, --file=FILE Archive file -C FILE, --config=FILE the name of the archiver config file -f, --flush Flush all remaining archives to slave -I, --init Initialize master environment

Page 13: Pitr Made Easy

The archiver config file

Useful but obvious parameters

[DEFAULT]state: onlinepgdata: /var/lib/postgresql/8.3/mainrsync_bin: /usr/bin/rsyncrsync_version = 2 # Because RH ships old softwareuser: postgrestimeout: 10debug: onssh_debug: off

Page 14: Pitr Made Easy

The “other” archiver options

r_archivedir: /var/lib/postgresql/archivel_archivedir: /var/lib/postgresql/archiversync_version = 2slaves: 192.168.1.201,192.168.1.202notify_ok: /var/lib/postgresql/etc/archiver_ok.shnotify_warning: /var/lib/postgresql/etc/archiver_warning.shnotify_critical: /var/lib/postgresql/etc/archiver_critical.sh

Page 15: Pitr Made Easy

Configuring archiver with pitrtools

● Edit the postgresql.conf change:● archive_mode to on● archive_command to:

● cmd_archiver -C /path/to/archiver.ini -F %p● restart postgresql● apply cmd_standby.sql to database of pitr user (usually postgres)● psql -U postgres < /path/to/cmd_standby/sql

Page 16: Pitr Made Easy

cmd_standby.py

Works in conjunction with pg_standby Supports failover Supports recovery to a point in time Included with 8.3, available for 8.1 and 8.2 (8.1

is flaky)

Page 17: Pitr Made Easy

The process on the slave/standby

On the standby/slave:● Configure SSH key for postgres user to master● Configure cmd_standby.ini

Page 18: Pitr Made Easy

The standby configuration

[DEFAULT]pgversion: 8.2numarchives: 10ssh: /usr/bin/sshrsync: /usr/bin/rsyncpg_standby: /usr/lib/postgresql/8.3/bin/pg_standbypg_ctl: /usr/lib/postgresql/8.3/bin/pg_ctlr_psql: /usr/lib/postgresql/8.3/bin/psqlport: 6000master_public_ip: 192.168.3.254master_local_ip: 127.0.0.1user: postgresdebug: off ssh_timeout: 30

Page 19: Pitr Made Easy

Configuring the standby cont...

archivedir: /data2/pgsql/archive/pgdata: /data1/pgsql/data/postgresql_conf: /var/lib/postgresql/etc/postgresql.confpg_hba_conf: /var/lib/postgresql/etc/pg_hba.confnotify_critical: /var/lib/postgresql/etc/standby_critical.shnotify_warning: /var/lib/postgresql/etc/standby_warning.shnotify_ok: /var/lib/postgresql/etc/standby_ok.shaction_failover: /var/lib/postgresql/pitr_tools/failover.sh

Page 20: Pitr Made Easy

Start the standby

Usage: cmd_standby [options] arg1 arg2

Options: -h, --help show this help message and exit -A start|stop, --action=start|stop|stop_basebackup Start or Stop PostgreSQL -B, --basebackup Start/Stop a base backup -C FILE, --config=FILE Name of the archiver config file -F VALUE, --failover=VALUE If you are serious, set -F999 -I, --dbinit Use before -B -P, --ping Is my master alive? -R TIMESTAMP, --recovertotime=TIMESTAMP To restore to a specific point in time -S, --standby Enter standby mode

Page 21: Pitr Made Easy

Initializing the slave/standby

Initialize environment

cmd_standby -C /path/to/cmd_standby.ini -I

Start base backup

cmd_standby -C /path/to/cmd_standby.ini -B

Start standby

cmd_standby -C /path/to/cmd_standby.ini -S

Page 22: Pitr Made Easy

Is the archiver working?

With debug: on

Page 23: Pitr Made Easy

Is the standby is working?

Page 24: Pitr Made Easy

How do I?

Use PITRTools to simplify backups? Take the archiver offline? Configure send_nsca (nagios) for alerts Get PITRTools Donate to PostgreSQL?

Page 25: Pitr Made Easy

Simplify backups

On the standby/slave: cmd_standby -C /var/lib/postgresql/etc/cmd_standby.ini -Astop

tar -czvf /backups/database.`date +%a`.tar.gz /var/lib/pgsql/data

cmd_standby -C /var/lib/postgresql/etc/cmd_standby.ini -S

You could also use rsync with a network volume to make the backup more efficient (after stopping the standby)

Page 26: Pitr Made Easy

Take the archiver offline

Edit /var/lib/postgresql/etc/cmd_archiver.ini[DEFAULT]

; online or offline

state: offline

When you are ready to bring it back online, just change to online. No restarts on archiver or

standby required.

Page 27: Pitr Made Easy

Configure send_nsca

Example ok.sh for send_nsca

#!/bin/sh

echo "shoggoth;CMD_ARCHIVER;0;Archived to Yugg"| \

/usr/sbin/send_nsca -to 10 -H monitor -d ';' -c /etc/nagios/send_nsca.cfg

Page 28: Pitr Made Easy

Get PITRTools

svn co \https://projects.commandprompt.com/public \/pitrtools/repo

Page 29: Pitr Made Easy

Donate to PostgreSQL

For United States PostgreSQL: https://www.postgresql.us/donate

For PostgreSQL Generally: http://www.postgresql.org/about/donate

Page 30: Pitr Made Easy

Questions

Hit me