SlideShare a Scribd company logo
/
Denish Patel
Principal Database Engineer
!  Pricipal Database Engineer @ WithMe
!  Previously: Lead Database Architect @ OmniTI
!  Expertise in PostgreSQL , Oracle, MySQL, NoSQL
!  Contact : denish.patel@with.me
!  Twitter: @DenishPatel
!  Blog: http://www.pateldenish.com
1
!  What is WAL?
!  Postgres Replication History
!  How you setup replication now?
!  What’s missing ?
!  Why replication slots?
!  Demo
I’m NOT going to discuss …
! SLONY or other 3rd party replication tools
! 3rd party replication management tools
2
!  Roll-forward recovery aka REDO
!  flushed to disk to guarantee commit durability
!  sequential writes
!  lower cost than flushing page cache
!  Allows us to do cool things
! Crash recovery
! Binary backups
! Point-In Time Recovery
! Replication
3
!  Automatically enabled; no action required
!  Make sure to have enough space on server
!  Stored under pg_xlog directory
!  Normally, 16MB in size
" --with-wal-segsize config option at build
!  Each segment is divided into pages (8 kB page)
" --with-wal-blocksize config option at build
◦ Segment name starts with..
000000010000000000000000
4
select * from pg_settings where name='wal_level';
name | wal_level
setting | hot_standby
unit |
category | Write-Ahead Log / Settings
short_desc | Set the level of information written to the WAL.
extra_desc |
context | postmaster
vartype | enum
source | configuration file
min_val |
max_val |
enumvals | { minimal, archive, hot_standby, logical }
boot_val | minimal
reset_val | hot_standby
sourcefile | /var/lib/pgsql/9.4/data/postgresql.auto.conf
sourceline | 4
5
Almost everything is replicated, but...
!  unlogged tables (As name suggests)
!  temporary tables
!  hash indexes? (generally don’t use?)
6
Postgres 7.0: WAL
Postgres 8.0: PITR (Point-In-Time-Recovery)
Postgres 8.2: pg_standby
Postgres 9.0: Hot_standby, Streaming replication
Postgres 9.1: pg_basebackup, Synchronous replication
Postgres 9.2: Cascading Replication
Postgres 9.3: Standby can switch timeline to follow new
master
Postgres 9.4: Replication Slots , Logical decoding
7
initdb
8
!  max_wal_senders=10
!  wal_level=hot_standby
!  hot_standby=on (on standby)
9
#TYPE DATABASE USER ADDRESS METHOD
host replication replication 10.0.0.1/32 md5
10
pg_ctl restart
11
CREATE ROLE replication WITH LOGIN REPLICATION;
password replication
12
!  Take file system level backups
!  What tools you are using for backups?
13
primary_conninfo = 'host=primaryhost user=replication
password=replication'
standby_mode = on
14
pg_ctl start
15
Have you configured archiving?
16
wal_keep_segments
17
!  postgresql.conf
archive_mode = on
archive_command = 'cp %p /some/where/%f'
18
!  recovery.conf
restore_command = 'cp /some/where/%f %p'
19
!  local or remote copy
!  Scp
!  Rsync
!  NFS
!  pg_archivecleanup
20
archive_command = 'rsync %p standby1::pg/%f &&
rsync %p standby2::pg/%f'
archive_command = 'echo standby1 standby2 ...
| xargs -d" " -I{} -n1 -P0 -r rsync %p {}::pg/%f'
21
!  OmniPITR
!  WAL-E
!  Repmgr
!  Pgbarman
!  Skytools
!  A lot of Custom scripts
22
!  fsync capabilities
! cp: no
! dd: GNU coreutils
! SSH: OpenSSH 6.5 sftp-server (Jan 2014)
! rsync: patch or wrapper
! NFS: Supported
23
24
max_replication_slots = 8
25
SELECT * FROM
pg_create_physical_replication_slot('name');
26
select * from pg_replication_slots ;
slot_name |plugin |slot_type |datoid|database|active|
xmin|catalog_xmin|restart_lsn
------------+--------+-----------+--------+----------+--------+------
+--------------+---
standby1 | | physical | | | t | | |
0/21000058
standby2 | | physical | | | t | | |
0/21000058
standby3 | | physical | | | t | | |
0/21000058
27
primary_slot_name = ‘name'
28
!  Keep necessary WAL files
!  Each standby can have different WAL apply status
!  Single access control setup
!  fsync on receiving side
29
pg_basebackup 
-h primaryhost
-U replication 
-D $PGDATA 
-X stream 
–P –v -R
30
!  Meet pg_receivexlog
! (Available since Postgers 9.1!)
pg_receivexlog 
-D archivedir 
--slot archivingslot 
-h primaryhost -U replication
!  -- synchronous option in 9.5
31
Are you ready to setup replication without any external
tools?
1.  pg_basebackup
2.  streaming with Replication Slots
3.  pg_receivexlog
32
!  Google Drive:
!  Login: pgtraining/pgcon
!  pgtraining user has sudo access
!  You can access terminal on the desktop
!  Internet should be working within VM
!  Copy/paste should work between VM and Host
!  Take snapshot along the process so you can rollback
easily
33
!  Remove Postgres 8.4 version
sudo yum erase postgresql.*
!  Setup yum repo for your desired version
sudo yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/
pgdg-redhat94-9.4-1.noarch.rpm
!  Install PostgreSQL 9.4 & Contrib modules
sudo yum install postgresql94-server postgresql94-contrib
!  Create postgres cluster & initial automatic startup
sudo service postgresql-9.4 initdb
sudo chkconfig postgresql-9.4 on
sudo service postgresql-9.4 start
34
!  Become postgres system user
sudo su - postgres
!  Log into database using psql (? to see all available commands)
!  Create a role & database for yourself
CREATE ROLE pgtraining WITH LOGIN SUPERUSER;
CREATE DATABASE pgtraining;
!  You can login as pgtraining user (psql –U pgtraining –d pgtraining)
!  Create replication role for later
CREATE ROLE replication WITH LOGIN REPLICATION;
!  Set password (”replication”)
password replication
35
!  http://www.postgresql.org/docs/9.4/static/auth-pg-hba-
conf.html
!  Find location of hba_file
postgres=# show hba_file;
!  Add following entry for replication user
!  Try to avoid trust authentication
!  [pgtraining@localhost ~]$ sudo vi /var/lib/pgsql/9.4/data/
pg_hba.conf
host replication replication 127.0.0.1/32 md5
36
alter system set wal_level = hot_standby;
alter system set archive_mode=on;
alter system set max_replication_slots=8;
alter system set archive_timeout = 60;
alter system set max_wal_senders = 8;
alter system set wal_keep_segments=100;
alter system set logging_collector=on;
37
!  Restart database
sudo service postgresql-9.4 restart
!  Verify settings
psql=# show max_wal_senders;
38
SELECT * FROM pg_create_physical_replication_slot('standby1');
39
sudo su - postgres
pg_basebackup -h 127.0.0.1 -U replication -D /var/
lib/pgsql/9.4/slave -R -Xs -P -v
40
cd /var/lib/pgsql/9.4/slave
!  Edit Standby postgresql.conf file
port = 5433
hot_standby = on
!  Edit Standby recovery.conf file
standby_mode = 'on'
primary_conninfo = 'user=replication password=replication
host=127.0.0.1 port=5432'
primary_slot_name='standby1'
trigger_file = '/var/lib/pgsql/9.4/slave/finish.recovery'
recovery_target_timeline='latest'
41
!  Copy existing init file
sudo cp /etc/init.d/postgresql-9.4 /etc/init.d/postgresql-9.4-5433
!  Edit config file to change (as root):
PGDATA=/var/lib/pgsql/9.4/slave
PGLOG=/var/lib/pgsql/9.4/pgstartup-5433.log
PGUPLOG=/var/lib/pgsql/$PGMAJORVERSION/pgupgrade-5433.log
!  Register service, start up slave
sudo chkconfig postgresql-9.4-5433 on
sudo service postgresql-9.4-5433 start
42
pgtraining=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 3260
usesysid | 24576
usename | replication
application_name | walreceiver
client_addr | 127.0.0.1
client_hostname |
client_port | 53206
backend_start | 2015-06-08 14:47:50.057326-04
backend_xmin |
state | streaming
sent_location | 0/240000B8
write_location | 0/240000B8
flush_location | 0/240000B8
replay_location | 0/240000B8
sync_priority | 0
sync_state | async
43
pgtraining=# select * from pg_replication_slots;
-[ RECORD 1 ]+-----------
slot_name | standby1
plugin |
slot_type | physical
datoid |
database |
active | t
xmin |
catalog_xmin |
restart_lsn | 0/270000EC
44
!  Create slot for archiving:
SELECT * FROM
pg_create_physical_replication_slot('archiver1');
!  Create archive directory
mkdir /var/lib/pgsql/9.4/archive
!  Start archiving process in background
/usr/pgsql-9.4/bin/pg_receivexlog -h 127.0.0.1 -p 5432 -U
replication –S 'archiver1' -n -v -D /var/lib/pgsql/9.4/archive
!  Put under init.d for continuous run
!  Switch xlog : primary_db_sever# select pg_switch_xlog();
45
!  Monitor Disk space
!  Monitor slave lag
select pg_xlog_location_diff(sent_location, write_location) AS
byte_lag
from pg_stat_replication
where application_name='pg_receivexlog';
!  Monitor WAL archive process
select pg_xlog_location_diff(sent_location, write_location) AS
byte_lag
from pg_stat_replication
where application_name='walreceiver';
46
!  Number of pg_xlogs on master
!  Monitor pg_recievexlog process
!  Make sure archive location has new files
!  pg_basebackup log files for successful backup… look
for “pg_basebackup: base backup completed”
47
!  OmniTI for travel sponsorships
!  Pgcon conference committee
!  Peter Eisentraut
!  You!!
48
Denish.j.patel@gmail.com
Twitter: DenishPatel
49

More Related Content

What's hot

The Accidental DBA
The Accidental DBAThe Accidental DBA
The Accidental DBA
PostgreSQL Experts, Inc.
 
High Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniHigh Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando Patroni
Zalando Technology
 
Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...
Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...
Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...
Command Prompt., Inc
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
EDB
 
PostgreSQL Extensions: A deeper look
PostgreSQL Extensions:  A deeper lookPostgreSQL Extensions:  A deeper look
PostgreSQL Extensions: A deeper look
Jignesh Shah
 
pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)
pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)
pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)
Wei Shan Ang
 
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky HaryadiPGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
Equnix Business Solutions
 
Percona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL AdministrationPercona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL Administration
Mydbops
 
PostgreSQL and RAM usage
PostgreSQL and RAM usagePostgreSQL and RAM usage
PostgreSQL and RAM usage
Alexey Bashtanov
 
Hadoop installation
Hadoop installationHadoop installation
Hadoop installation
Ankit Desai
 
Shootout at the PAAS Corral
Shootout at the PAAS CorralShootout at the PAAS Corral
Shootout at the PAAS Corral
PostgreSQL Experts, Inc.
 
Logical replication with pglogical
Logical replication with pglogicalLogical replication with pglogical
Logical replication with pglogical
Umair Shahid
 
Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016
StackIQ
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
Federico Campoli
 
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
Equnix Business Solutions
 
Automating Disaster Recovery PostgreSQL
Automating Disaster Recovery PostgreSQLAutomating Disaster Recovery PostgreSQL
Automating Disaster Recovery PostgreSQL
Nina Kaufman
 
Postgres-BDR with Google Cloud Platform
Postgres-BDR with Google Cloud PlatformPostgres-BDR with Google Cloud Platform
Postgres-BDR with Google Cloud Platform
SungJae Yun
 

What's hot (17)

The Accidental DBA
The Accidental DBAThe Accidental DBA
The Accidental DBA
 
High Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniHigh Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando Patroni
 
Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...
Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...
Building tungsten-clusters-with-postgre sql-hot-standby-and-streaming-replica...
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
PostgreSQL Extensions: A deeper look
PostgreSQL Extensions:  A deeper lookPostgreSQL Extensions:  A deeper look
PostgreSQL Extensions: A deeper look
 
pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)
pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)
pgDay Asia 2016 - Swapping Pacemaker-Corosync for repmgr (1)
 
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky HaryadiPGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
 
Percona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL AdministrationPercona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL Administration
 
PostgreSQL and RAM usage
PostgreSQL and RAM usagePostgreSQL and RAM usage
PostgreSQL and RAM usage
 
Hadoop installation
Hadoop installationHadoop installation
Hadoop installation
 
Shootout at the PAAS Corral
Shootout at the PAAS CorralShootout at the PAAS Corral
Shootout at the PAAS Corral
 
Logical replication with pglogical
Logical replication with pglogicalLogical replication with pglogical
Logical replication with pglogical
 
Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
 
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
 
Automating Disaster Recovery PostgreSQL
Automating Disaster Recovery PostgreSQLAutomating Disaster Recovery PostgreSQL
Automating Disaster Recovery PostgreSQL
 
Postgres-BDR with Google Cloud Platform
Postgres-BDR with Google Cloud PlatformPostgres-BDR with Google Cloud Platform
Postgres-BDR with Google Cloud Platform
 

Similar to Out of the Box Replication in Postgres 9.4(pgconfsf)

Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)
Denish Patel
 
Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)
Denish Patel
 
Out of the Box Replication in Postgres 9.4(PgConfUS)
Out of the Box Replication in Postgres 9.4(PgConfUS)Out of the Box Replication in Postgres 9.4(PgConfUS)
Out of the Box Replication in Postgres 9.4(PgConfUS)
Denish Patel
 
configuring a warm standby, the easy way
configuring a warm standby, the easy wayconfiguring a warm standby, the easy way
configuring a warm standby, the easy way
Command Prompt., Inc
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
Омские ИТ-субботники
 
Pitr Made Easy
Pitr Made EasyPitr Made Easy
Pitr Made Easy
Joshua Drake
 
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRestPGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
ronnywang_tw
 
Linux Common Command
Linux Common CommandLinux Common Command
Linux Common Command
Jeff Yang
 
OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...
OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...
OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...
NETWAYS
 
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
Puppet
 
9 steps to install and configure postgre sql from source on linux
9 steps to install and configure postgre sql from source on linux9 steps to install and configure postgre sql from source on linux
9 steps to install and configure postgre sql from source on linux
chinkshady
 
Chef - industrialize and automate your infrastructure
Chef - industrialize and automate your infrastructureChef - industrialize and automate your infrastructure
Chef - industrialize and automate your infrastructure
Michaël Lopez
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQL
Open Gurukul
 
Pro PostgreSQL, OSCon 2008
Pro PostgreSQL, OSCon 2008Pro PostgreSQL, OSCon 2008
Pro PostgreSQL, OSCon 2008
Robert Treat
 
X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 new
Yiwei Ma
 
Docker, c'est bonheur !
Docker, c'est bonheur !Docker, c'est bonheur !
Docker, c'est bonheur !
Alexandre Salomé
 
pgpool-II demonstration
pgpool-II demonstrationpgpool-II demonstration
pgpool-II demonstration
elliando dias
 
PHP selber bauen
PHP selber bauenPHP selber bauen
PHP selber bauen
Walter Ebert
 
Relax and Recover on POWER (Updated 05-2017)
Relax and Recover on POWER (Updated 05-2017)Relax and Recover on POWER (Updated 05-2017)
Relax and Recover on POWER (Updated 05-2017)
Sebastien Chabrolles
 

Similar to Out of the Box Replication in Postgres 9.4(pgconfsf) (20)

Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)
 
Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)Out of the Box Replication in Postgres 9.4(PgCon)
Out of the Box Replication in Postgres 9.4(PgCon)
 
Out of the Box Replication in Postgres 9.4(PgConfUS)
Out of the Box Replication in Postgres 9.4(PgConfUS)Out of the Box Replication in Postgres 9.4(PgConfUS)
Out of the Box Replication in Postgres 9.4(PgConfUS)
 
configuring a warm standby, the easy way
configuring a warm standby, the easy wayconfiguring a warm standby, the easy way
configuring a warm standby, the easy way
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
 
Pitr Made Easy
Pitr Made EasyPitr Made Easy
Pitr Made Easy
 
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRestPGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
 
Linux Common Command
Linux Common CommandLinux Common Command
Linux Common Command
 
OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...
OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...
OSBConf 2015 | Backups with rdiff backup and rsnapshot by christoph mitasch &...
 
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
Continuous Infrastructure: Modern Puppet for the Jenkins Project - PuppetConf...
 
9 steps to install and configure postgre sql from source on linux
9 steps to install and configure postgre sql from source on linux9 steps to install and configure postgre sql from source on linux
9 steps to install and configure postgre sql from source on linux
 
Chef - industrialize and automate your infrastructure
Chef - industrialize and automate your infrastructureChef - industrialize and automate your infrastructure
Chef - industrialize and automate your infrastructure
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQL
 
Pro PostgreSQL, OSCon 2008
Pro PostgreSQL, OSCon 2008Pro PostgreSQL, OSCon 2008
Pro PostgreSQL, OSCon 2008
 
X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 new
 
Docker, c'est bonheur !
Docker, c'est bonheur !Docker, c'est bonheur !
Docker, c'est bonheur !
 
pgpool-II demonstration
pgpool-II demonstrationpgpool-II demonstration
pgpool-II demonstration
 
PHP selber bauen
PHP selber bauenPHP selber bauen
PHP selber bauen
 
Relax and Recover on POWER (Updated 05-2017)
Relax and Recover on POWER (Updated 05-2017)Relax and Recover on POWER (Updated 05-2017)
Relax and Recover on POWER (Updated 05-2017)
 

More from Denish Patel

Postgres in Amazon RDS
Postgres in Amazon RDSPostgres in Amazon RDS
Postgres in Amazon RDS
Denish Patel
 
Choosing the "D" , Lightning talk
Choosing the "D" , Lightning talkChoosing the "D" , Lightning talk
Choosing the "D" , Lightning talk
Denish Patel
 
Scaling postgres
Scaling postgresScaling postgres
Scaling postgres
Denish Patel
 
Deploying postgre sql on amazon ec2
Deploying postgre sql on amazon ec2 Deploying postgre sql on amazon ec2
Deploying postgre sql on amazon ec2
Denish Patel
 
Two Elephants Inthe Room
Two Elephants Inthe RoomTwo Elephants Inthe Room
Two Elephants Inthe Room
Denish Patel
 
Deploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQLDeploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQL
Denish Patel
 
Deploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQLDeploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQL
Denish Patel
 
P90 X Your Database!!
P90 X Your Database!!P90 X Your Database!!
P90 X Your Database!!
Denish Patel
 
Achieving Pci Compliace
Achieving Pci CompliaceAchieving Pci Compliace
Achieving Pci Compliace
Denish Patel
 
Using SQL Standards? Database SQL comparition
Using SQL Standards? Database SQL comparitionUsing SQL Standards? Database SQL comparition
Using SQL Standards? Database SQL comparition
Denish Patel
 
Oracle10g New Features I
Oracle10g New Features IOracle10g New Features I
Oracle10g New Features I
Denish Patel
 
Yet Another Replication Tool: RubyRep
Yet Another Replication Tool: RubyRepYet Another Replication Tool: RubyRep
Yet Another Replication Tool: RubyRep
Denish Patel
 

More from Denish Patel (12)

Postgres in Amazon RDS
Postgres in Amazon RDSPostgres in Amazon RDS
Postgres in Amazon RDS
 
Choosing the "D" , Lightning talk
Choosing the "D" , Lightning talkChoosing the "D" , Lightning talk
Choosing the "D" , Lightning talk
 
Scaling postgres
Scaling postgresScaling postgres
Scaling postgres
 
Deploying postgre sql on amazon ec2
Deploying postgre sql on amazon ec2 Deploying postgre sql on amazon ec2
Deploying postgre sql on amazon ec2
 
Two Elephants Inthe Room
Two Elephants Inthe RoomTwo Elephants Inthe Room
Two Elephants Inthe Room
 
Deploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQLDeploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQL
 
Deploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQLDeploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQL
 
P90 X Your Database!!
P90 X Your Database!!P90 X Your Database!!
P90 X Your Database!!
 
Achieving Pci Compliace
Achieving Pci CompliaceAchieving Pci Compliace
Achieving Pci Compliace
 
Using SQL Standards? Database SQL comparition
Using SQL Standards? Database SQL comparitionUsing SQL Standards? Database SQL comparition
Using SQL Standards? Database SQL comparition
 
Oracle10g New Features I
Oracle10g New Features IOracle10g New Features I
Oracle10g New Features I
 
Yet Another Replication Tool: RubyRep
Yet Another Replication Tool: RubyRepYet Another Replication Tool: RubyRep
Yet Another Replication Tool: RubyRep
 

Out of the Box Replication in Postgres 9.4(pgconfsf)

  • 2. !  Pricipal Database Engineer @ WithMe !  Previously: Lead Database Architect @ OmniTI !  Expertise in PostgreSQL , Oracle, MySQL, NoSQL !  Contact : denish.patel@with.me !  Twitter: @DenishPatel !  Blog: http://www.pateldenish.com 1
  • 3. !  What is WAL? !  Postgres Replication History !  How you setup replication now? !  What’s missing ? !  Why replication slots? !  Demo I’m NOT going to discuss … ! SLONY or other 3rd party replication tools ! 3rd party replication management tools 2
  • 4. !  Roll-forward recovery aka REDO !  flushed to disk to guarantee commit durability !  sequential writes !  lower cost than flushing page cache !  Allows us to do cool things ! Crash recovery ! Binary backups ! Point-In Time Recovery ! Replication 3
  • 5. !  Automatically enabled; no action required !  Make sure to have enough space on server !  Stored under pg_xlog directory !  Normally, 16MB in size " --with-wal-segsize config option at build !  Each segment is divided into pages (8 kB page) " --with-wal-blocksize config option at build ◦ Segment name starts with.. 000000010000000000000000 4
  • 6. select * from pg_settings where name='wal_level'; name | wal_level setting | hot_standby unit | category | Write-Ahead Log / Settings short_desc | Set the level of information written to the WAL. extra_desc | context | postmaster vartype | enum source | configuration file min_val | max_val | enumvals | { minimal, archive, hot_standby, logical } boot_val | minimal reset_val | hot_standby sourcefile | /var/lib/pgsql/9.4/data/postgresql.auto.conf sourceline | 4 5
  • 7. Almost everything is replicated, but... !  unlogged tables (As name suggests) !  temporary tables !  hash indexes? (generally don’t use?) 6
  • 8. Postgres 7.0: WAL Postgres 8.0: PITR (Point-In-Time-Recovery) Postgres 8.2: pg_standby Postgres 9.0: Hot_standby, Streaming replication Postgres 9.1: pg_basebackup, Synchronous replication Postgres 9.2: Cascading Replication Postgres 9.3: Standby can switch timeline to follow new master Postgres 9.4: Replication Slots , Logical decoding 7
  • 11. #TYPE DATABASE USER ADDRESS METHOD host replication replication 10.0.0.1/32 md5 10
  • 13. CREATE ROLE replication WITH LOGIN REPLICATION; password replication 12
  • 14. !  Take file system level backups !  What tools you are using for backups? 13
  • 15. primary_conninfo = 'host=primaryhost user=replication password=replication' standby_mode = on 14
  • 17. Have you configured archiving? 16
  • 19. !  postgresql.conf archive_mode = on archive_command = 'cp %p /some/where/%f' 18
  • 20. !  recovery.conf restore_command = 'cp /some/where/%f %p' 19
  • 21. !  local or remote copy !  Scp !  Rsync !  NFS !  pg_archivecleanup 20
  • 22. archive_command = 'rsync %p standby1::pg/%f && rsync %p standby2::pg/%f' archive_command = 'echo standby1 standby2 ... | xargs -d" " -I{} -n1 -P0 -r rsync %p {}::pg/%f' 21
  • 23. !  OmniPITR !  WAL-E !  Repmgr !  Pgbarman !  Skytools !  A lot of Custom scripts 22
  • 24. !  fsync capabilities ! cp: no ! dd: GNU coreutils ! SSH: OpenSSH 6.5 sftp-server (Jan 2014) ! rsync: patch or wrapper ! NFS: Supported 23
  • 25. 24
  • 28. select * from pg_replication_slots ; slot_name |plugin |slot_type |datoid|database|active| xmin|catalog_xmin|restart_lsn ------------+--------+-----------+--------+----------+--------+------ +--------------+--- standby1 | | physical | | | t | | | 0/21000058 standby2 | | physical | | | t | | | 0/21000058 standby3 | | physical | | | t | | | 0/21000058 27
  • 30. !  Keep necessary WAL files !  Each standby can have different WAL apply status !  Single access control setup !  fsync on receiving side 29
  • 31. pg_basebackup -h primaryhost -U replication -D $PGDATA -X stream –P –v -R 30
  • 32. !  Meet pg_receivexlog ! (Available since Postgers 9.1!) pg_receivexlog -D archivedir --slot archivingslot -h primaryhost -U replication !  -- synchronous option in 9.5 31
  • 33. Are you ready to setup replication without any external tools? 1.  pg_basebackup 2.  streaming with Replication Slots 3.  pg_receivexlog 32
  • 34. !  Google Drive: !  Login: pgtraining/pgcon !  pgtraining user has sudo access !  You can access terminal on the desktop !  Internet should be working within VM !  Copy/paste should work between VM and Host !  Take snapshot along the process so you can rollback easily 33
  • 35. !  Remove Postgres 8.4 version sudo yum erase postgresql.* !  Setup yum repo for your desired version sudo yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/ pgdg-redhat94-9.4-1.noarch.rpm !  Install PostgreSQL 9.4 & Contrib modules sudo yum install postgresql94-server postgresql94-contrib !  Create postgres cluster & initial automatic startup sudo service postgresql-9.4 initdb sudo chkconfig postgresql-9.4 on sudo service postgresql-9.4 start 34
  • 36. !  Become postgres system user sudo su - postgres !  Log into database using psql (? to see all available commands) !  Create a role & database for yourself CREATE ROLE pgtraining WITH LOGIN SUPERUSER; CREATE DATABASE pgtraining; !  You can login as pgtraining user (psql –U pgtraining –d pgtraining) !  Create replication role for later CREATE ROLE replication WITH LOGIN REPLICATION; !  Set password (”replication”) password replication 35
  • 37. !  http://www.postgresql.org/docs/9.4/static/auth-pg-hba- conf.html !  Find location of hba_file postgres=# show hba_file; !  Add following entry for replication user !  Try to avoid trust authentication !  [pgtraining@localhost ~]$ sudo vi /var/lib/pgsql/9.4/data/ pg_hba.conf host replication replication 127.0.0.1/32 md5 36
  • 38. alter system set wal_level = hot_standby; alter system set archive_mode=on; alter system set max_replication_slots=8; alter system set archive_timeout = 60; alter system set max_wal_senders = 8; alter system set wal_keep_segments=100; alter system set logging_collector=on; 37
  • 39. !  Restart database sudo service postgresql-9.4 restart !  Verify settings psql=# show max_wal_senders; 38
  • 40. SELECT * FROM pg_create_physical_replication_slot('standby1'); 39
  • 41. sudo su - postgres pg_basebackup -h 127.0.0.1 -U replication -D /var/ lib/pgsql/9.4/slave -R -Xs -P -v 40
  • 42. cd /var/lib/pgsql/9.4/slave !  Edit Standby postgresql.conf file port = 5433 hot_standby = on !  Edit Standby recovery.conf file standby_mode = 'on' primary_conninfo = 'user=replication password=replication host=127.0.0.1 port=5432' primary_slot_name='standby1' trigger_file = '/var/lib/pgsql/9.4/slave/finish.recovery' recovery_target_timeline='latest' 41
  • 43. !  Copy existing init file sudo cp /etc/init.d/postgresql-9.4 /etc/init.d/postgresql-9.4-5433 !  Edit config file to change (as root): PGDATA=/var/lib/pgsql/9.4/slave PGLOG=/var/lib/pgsql/9.4/pgstartup-5433.log PGUPLOG=/var/lib/pgsql/$PGMAJORVERSION/pgupgrade-5433.log !  Register service, start up slave sudo chkconfig postgresql-9.4-5433 on sudo service postgresql-9.4-5433 start 42
  • 44. pgtraining=# select * from pg_stat_replication; -[ RECORD 1 ]----+------------------------------ pid | 3260 usesysid | 24576 usename | replication application_name | walreceiver client_addr | 127.0.0.1 client_hostname | client_port | 53206 backend_start | 2015-06-08 14:47:50.057326-04 backend_xmin | state | streaming sent_location | 0/240000B8 write_location | 0/240000B8 flush_location | 0/240000B8 replay_location | 0/240000B8 sync_priority | 0 sync_state | async 43
  • 45. pgtraining=# select * from pg_replication_slots; -[ RECORD 1 ]+----------- slot_name | standby1 plugin | slot_type | physical datoid | database | active | t xmin | catalog_xmin | restart_lsn | 0/270000EC 44
  • 46. !  Create slot for archiving: SELECT * FROM pg_create_physical_replication_slot('archiver1'); !  Create archive directory mkdir /var/lib/pgsql/9.4/archive !  Start archiving process in background /usr/pgsql-9.4/bin/pg_receivexlog -h 127.0.0.1 -p 5432 -U replication –S 'archiver1' -n -v -D /var/lib/pgsql/9.4/archive !  Put under init.d for continuous run !  Switch xlog : primary_db_sever# select pg_switch_xlog(); 45
  • 47. !  Monitor Disk space !  Monitor slave lag select pg_xlog_location_diff(sent_location, write_location) AS byte_lag from pg_stat_replication where application_name='pg_receivexlog'; !  Monitor WAL archive process select pg_xlog_location_diff(sent_location, write_location) AS byte_lag from pg_stat_replication where application_name='walreceiver'; 46
  • 48. !  Number of pg_xlogs on master !  Monitor pg_recievexlog process !  Make sure archive location has new files !  pg_basebackup log files for successful backup… look for “pg_basebackup: base backup completed” 47
  • 49. !  OmniTI for travel sponsorships !  Pgcon conference committee !  Peter Eisentraut !  You!! 48