Creating a hot standby for Postgresql

Postgresql tips

How to setup a fully redundant standby for Postgresql

To get started you need two machines that are the same architecture, ie 64 bit, with the same version of Postgres installed, including same Postgres architecture.

1. On Master – In pgAdmin run:


CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'mypassword';

2. On Master – In pgAdmin, edit the postgresql.conf and set the following:


wal_level = hot_standby

max_wal_senders = 3

checkpoint_segments = 8

wal_keep_segments = 8

3. On Master – In pgAdmin, edit the pg_hba.conf and set the following where 5.6.7.8 is the ip address of the slave:


host replication     replicator     5.6.7.8/32           trust

4. On Master – restart the postgres windows service

5. On Slave – stop the postgres windows service

6. On Slave – open a command prompt and cd to your Postgres directory (c:\program files\Postgresql\9.4) and run:


rd /s “c:\program files\Postgresql\9.4\data”

7. On Slave – open a command prompt and cd to your Postgres directory (c:\program files\Postgresql\9.4) and run where 1.2.3.4 is the ip of the Master:


pg_basebackup -h 1.2.3.4 -D “c:\program files\Postgresql\9.4\data” -U replicator -v –P –X stream

8. On slave – In pgAdmin, edit the postgresql.conf and set the following:


hot_standby = on

9. On slave – create a text file (c:\program files\Postgresql\9.4\data\recovery.conf) with the following contents where 1.2.3.4 is the ip of the Master:


standby_mode = 'on'primary_conninfo = 'host=1.2.3.4 port=5432 user=replicator password=mypassword'trigger_file = 'c:\temp\postgresql.trigger'

10. On Slave – start the postgres windows service

Master and Slave should now be in sync. Update Master DB and confirm that the Slave is updated as well.


Steve Taylor

CITA OpenMake Software

0 thoughts on “Standby for Postgresql Windows”

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

DevOps

Managing database connections per browser sessions

Our servlet code creates a new database connection when a new session is created. This database connection is part of our DMSession object as a private variable m_conn. The DMSession object is stored against the Read more...

DevOps

Build Avoidance and Continuous Integration

Build Avoidance is a feature of Meister Build Avoidance a critical part of continuous integration In a recent article, the term “Build Avoidance” was referenced as if it was something new and improved.  NEWS Flash!  Read more...

DevOps

Why is Docker so Ubuntu-centric?

Docker and Ubuntu tight integration It seems that Ubuntu is the OS of choice for Docker users. Here at OpenMake Software we have started down the path to integrating Docker into our products and our Read more...