Top Banner
The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers new facilities for maintaining a current standby server and for issuing read-only queries on the standby server. This tutorial covers these new facilities. Creative Commons Attribution License http://momjian.us/presentations Last updated: July, 2018 1 / 22
22

The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Dec 26, 2018

Download

Documents

hathu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

The Magic of HotStreaming Replication

BRUCE MOMJIAN

POSTGRESQL 9.0 offers new facilities for maintaining a currentstandby server and for issuing read-only queries on the standbyserver. This tutorial covers these new facilities.Creative Commons Attribution License http://momjian.us/presentations

Last updated: July, 2018

1 / 22

Page 2: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Introduction

◮ How does WAL combined with a disk image enable standbyservers? (review)

◮ How do you configure continuous archiving?

◮ How do you configure a streaming, read-only server?

◮ Multi-Server complexities

◮ Primary/Standby synchronization complexities

2 / 22

Page 3: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Write-Ahead Logging (wal)

Recovery

fsync

fsync

Query and Checkpoint Operations Transaction Durability

BackendPostgres

BackendPostgres

BackendPostgres

PostgreSQL Shared Buffer Cache Write−Ahead Log

Kernel Disk Buffer Cache

Disk Blocks

3 / 22

Page 4: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Pre-9.0 Continuous Archiving /Point-In-Time Recovery (PITR)

02:0

011

:00

09:0

013

:00

WAL

WALWAL

ContinuousFile System−

Level Backup Archive (WAL)

4 / 22

Page 5: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

PITR Backup Procedures

1. wal_level = archive

2. archive_mode = on

3. archive_command = ’cp -i %p /mnt/server/pgsql/%f </dev/null’

4. SELECT pg_start_backup(’label’);

5. Perform file system-level backup (can be inconsistent)

6. SELECT pg_stop_backup();

5 / 22

Page 6: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Point-in-Time Recovery

WAL

WAL

17:0

017

:30

17:4

017

:55

ContinuousFile System−

Level Backup Archive (WAL)

WAL

6 / 22

Page 7: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Point-in-Time Recovery Procedures

1. Stop postmaster

2. Restore file system-level backup

3. Make adjustments as outlined in the documentation

4. Create recovery.conf

5. restore_command = ’cp /mnt/server/pgsql/%f %p’

6. Start the postmaster

7 / 22

Page 8: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Disadvantages

◮ Only complete 16MB files can be shipped

◮ archive_timeout can be used to force more frequent shipping(this increases archive storage requirements)

◮ No queries on the standby

8 / 22

Page 9: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

9.0 Streaming Replication / Hot Standby

◮ Changes are streamed to the standby, greatly reducing logshipping delays

◮ Standby can accept read-only queries

9 / 22

Page 10: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Streaming Replication Differs from PITR

◮ File system backup is restored immediately on the standbyserver

◮ WAL files are streamed to the slave

◮ WAL files can also be archived if point-in-time recovery(PITR) is desired

10 / 22

Page 11: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

How Does Streaming Replication Work?

02:0

011

:00

09:0

013

:00

WAL

WALWAL

File System−

Level Backup Server

Standby

11 / 22

Page 12: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Live Streaming Replication

archivecommand command

Primary Standby

Network

restore

/pg_wal/pg_wal

Archive

Directory

WAL

12 / 22

Page 13: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Enable Streaming to the Standby

Enable the proper WAL contents:

wal_level = hot_standby

Enable the ability to stream WAL to the standby:

max_wal_senders = 1

Retain WAL files needed by the standby:

wal_keep_segments = 50

13 / 22

Page 14: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Enable Standby Connection Permissions

Add permission for replication to pg_hba.conf:

host replication postgres 127.0.0.1/32 trust

Start the primary server:

pg_ctl -l /u/pg/data/server.log start

14 / 22

Page 15: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Perform a WAL-Supported File System Backup

Start psql and issue:

SELECT pg_start_backup(’testing’);

Copy the database /u/pg/data to a new directory, /u/pg/data2:

cp -p -R /u/pg/data /u/pg/data2

Dash-p preserves ownership. The copy is inconsistent, but that isokay (WAL replay will correct that).Signal the backup is complete from psql:

SELECT pg_stop_backup();

15 / 22

Page 16: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Configure the Standby

Remove /data2/postmaster.pid so the standby server does not seethe primary server’s pid as its own:

rm /u/pg/data2/postmaster.pid

(This is only necessary because we are testing with the primaryand slave on the same computer.)Edit postgresql.conf on the standby and change the port to 5433

port = 5433

Enable hot standby in postgresql.conf:

hot_standby = on

16 / 22

Page 17: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Configure the Standby For Streaming Replication

Create recovery.conf:

cp /u/pg/share/recovery.conf.sample /u/pg/data2/recovery.conf

Enable streaming in recovery.conf:

standby_mode = ’on’primary_conninfo = ’host=localhost port=5432’

Start the standby server:

PGDATA=/u/pg/data2 pg_ctl -l /u/pg/data2/server.log start

17 / 22

Page 18: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Test Streaming Replication and Hot Standby

$ psql -p 5432 -c ’CREATE TABLE streamtest(x int)’ postgres$ psql -p 5433 -c ’\d’ postgres

List of relationsSchema | Name | Type | Owner--------+------------+-------+----------public | streamtest | table | postgres

$ psql -p 5432 -c ’INSERT INTO streamtest VALUES (1)’ postgresINSERT 0 1$ psql -p 5433 -c ’INSERT INTO streamtest VALUES (1)’ postgresERROR: cannot execute INSERT in a read-only transaction

18 / 22

Page 19: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Additional Complexities

◮ Multi-server permissions

◮ Stream from /pg_wal and the continuous archive directory ifarchive_mode is enabled on the primary

19 / 22

Page 20: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Primary/Standby Synchronization Issues

The primary server can take actions that cause long-runningqueries on the standby to be cancelled. Specifically, the cleanupof unnecessary rows that are still of interest to long-runningqueries on the standby can cause long-running queries to becancelled on the standby. Standby query cancellation can beminimized in two ways:

1. Delay cleanup of old records on the primary withvacuum_defer_cleanup_age in postgresql.conf.

2. Delay application of WAL logs on the standby withmax_standby_streaming_delay and max_standby_archive_delay inpostgresql.conf. The default is 30 seconds; -1 causesapplication to delay indefinitely to prevent querycancellation. This also delays changes from appearing on thestandby and can lengthen the time required for failover tothe slave.

20 / 22

Page 21: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Postgres 9.1 Improvements

◮ Replication can be synchronous

◮ Standby feedback prevents the master from removing rowsneeded on the standby

◮ New tool to a create standby server using a Postgres databaseconnection

◮ New streaming replication monitoring and control tools

9.2 improvements include allowing standbys to stream to otherstandbys. 9.3 will allow secondary standbys to more easilyreconnect to a promoted standby.

21 / 22

Page 22: The Magic of Hot Streaming Replication - Bruce Momjianmomjian.us/main/writings/pgsql/hot_streaming_rep.pdf · The Magic of Hot Streaming Replication BRUCE MOMJIAN POSTGRESQL 9.0 offers

Conclusion

http://momjian.us/presentations Manet, Bar at Folies Bergère

22 / 22