SlideShare a Scribd company logo
POSTGRESQL HIGH AVAILABILITY
IN A CONTAINERIZED WORLD
Jignesh Shah
Chief Architect, Data Platform
About @jkshah
ü  appOrbit
•  Focus is on data management of applications running in Containers
ü  VMware
•  Lead and manage Postgres and Data Management teams at VMware for various products embedding
PostgreSQL running in virtualized embedded instances
ü  Sun Microsystems
•  Team Member of first published SpecJAppServer 2004 benchmark with PostgreSQL
•  Performance of PostgreSQL on Solaris/Sun Servers
ü  Working with PostgreSQL community since 2005
•  http://jkshah.blogspot.com/2005/04/profiling-postgresql-using-dtrace-on_22.html
ü  Working with Container technologies (Solaris Zones) since 2004
•  http://jkshah.blogspot.com/2004/08/db2-working-under-solaris-10-zones_30.html
Agenda
ü Containers
ü Enterprise Needs
ü PostgreSQL Replication
ü Modern Projects
ü Blueprint Of deployments
What are Containers?
ü OS Level virtualization where kernel allows for multiple isolated user-
space instances
Operating
System
Bare Metal
Server
OS
Bare Metal
Server
Hypervisor
OS
Operating
System
Bare Metal
Server
C C C C C OS
Bare Metal
Server
Hypervisor
OS
C C C C
Advantages of Containers
ü Lower footprint
ü Very Quick Startup and Shutdown
ü Density
ü Nesting
Disadvantages of Containers
ü Same Kernel version
ü Cannot run other OS natively
ü Security (to be improved)
ü Not a complete solution for enterprise needs
Where to use container?
ü Recreate identical environment (cookie-cutter)
ü Resource Grouping of specific processes in heavily loaded server
ü Handling multiple versions of software applications
ü Ephemeral application instances (Dev/Test)
ü Production instances (Growing everyday)
ü Many more
Docker – Popular Container engine
•  Installation
# sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
# yum install docker-engine
# systemctl enable docker.service
# systemctl start docker.service
Docker
ü Quick Guide to use a docker based container
# docker run --name mycontainer –e
POSTGRES_PASSWORD=mysecretpassword -d postgres
# docker exec -ti mycontainer psql -U postgres
# docker stop mycontainer
# docker rm mycontainer
# docker rmi postgres
Container Volumes
ü Persists beyond the life of a Docker container
•  VOLUME command in Dockerfile or
•  Using –v using docker run command
•  Automatically created if not already present during docker run
•  Not part of docker push/pull operations
•  Can select a non-local directory using --volume-driver
•  Third party components required to get multi-host support (NFS, etc )
ü Different options using –v
•  -v /hostsrc/data:/opt/data:ro # for read only volumes (default rw)
•  -v /hostsrc/data:/opt/data:Z # Z – private volume, z – shared volume
•  -v /etc/nginx.conf:/etc/nginx.conf # for mounting a single file only
ü Volumes can be shared from another container using --volumes-from on
same host
ü Starting from docker 1.9 gives first class status to Docker Volumes
PostgreSQL Container as a DB server
ü Maybe you want a database server standalone
•  Not all database clients will be in the same host
•  Need to limit memory usage
•  Need different layout of how files are distributed
ü Use the –p option to make the port available even to non containers
clients
ü Use –m to limit memory usage by the DB server (by default it can see
and use all)
•  Note this does not set shared buffers automatically with the library image
docker run --name mycontainer -m 4g -e POSTGRES_PASSWORD=mysecretpassword 
-v /hostpath/pgdata:/var/lib/postgresql/data -p 5432:5432 -d postgres
PostgreSQL in an enterprise environment
ü However for a real production use case we would need
•  Bigger shared memory configurations
•  Need different layout of how files are distributed
•  Ability to backup the database
•  Ability to setup replication
•  etc
ü In short we need a more custom image of PostgreSQL
Best Practices for custom image
ü For production install customize the docker image
•  Allocate proper memory limits - example 8GB
•  All pagecache usage shows up as docker container memory usage
•  Bump up shared buffers and other parameters as required
•  Hint: use PostgreSQL 9.3 or later otherwise have to privileged containers
•  http://jkshah.blogspot.com/2015/09/is-it-privilege-to-run-container-in.html
•  Support multiple volumes in your image
•  PITR archives
•  Full Backup directory
•  PostgreSQL Extensions
•  Setup replication support
•  Out of box replication setup
•  Monitoring Tool
•  Your favorite monitoring agent
Enterprise Needs for
Databases
Planning a High Availability Strategy
ü Requirements
•  Recovery Time Objective (RTO)
•  What does 99.99% availability really mean?
•  Recovery Point Objective (RPO)
•  Zero data lost?
•  HA vs. DR requirements
ü Evaluating a technology
•  What’s the cost for implementing the technology?
•  What’s the complexity of implementing, and managing the technology?
•  What’s the downtime potential?
•  What’s the data loss exposure?
Availability %	 Downtime / Year	 Downtime / Month *	 Downtime / week	
"Two Nines" - 99% 	 3.65 Days	 7.2 Hours	 1.69 Hours	
"Three Nines" - 99.9% 	 8.76 Hours	 43.2 Minutes	 10.1 Minutes	
"Four Nines" - 99.99% 	 52.56 Minutes	 4.32 Minutes	 1.01 Minutes	
"Five Nines" - 99.999% 	 5.26 Minutes	 25.9 Seconds	 6.06 Seconds	
* Using a 30 day month
Simplified View of HA PostgreSQL
ü  Easy to setup
ü  Handles Infrastructure problems
ü  Exploit Storage features
ü  Exploit replication features
DNS Name
Applications
Somewhere
in Cloud/
Data Center
Causes of Downtime
ü  Planned Downtime
•  Software upgrade (OS patches, SQL Server cumulative updates)
•  Hardware/BIOS upgrade
ü  Unplanned Downtime
•  Datacenter failure (natural disasters, fire)
•  Server failure (failed CPU, bad network card)
•  I/O subsystem failure (disk failure, controller failure)
•  Software/Data corruption (application bugs, OS binary corruptions)
•  User Error (shutdown a SQL service, dropped a table)
Typical Plan of action
ü  Minimize reasons that leads to downtime
ü  Faster recovery time (Balanced checkpoints)
ü  Proxies for fast switching between production and DR copy
ü  Shared Storage for HA
ü  PostgreSQL Synchronous Replication to go beyond
HA PostgreSQL with Shared Storage
ü  Ability to leverage hardware Snapshots/Restore
ü  Automated Failover using OS Clustering Software
ü  Block Level Replication for DR
ü  Distributed Shared Storage getting popular
Virtual IP or
DNS or
pgPool or
pgBouncerApplications
Site 1
PostgreSQL Replication
ü  Single master, multi-slave
ü  Cascading slave also possible
ü  Mechanism based on WAL (Write-Ahead Logs)
ü  Multiple modes and multiple recovery ways
•  Warm standby
•  Asynchronous hot standby
•  Synchronous hot standby
ü  Slaves can perform read operations optionally
•  Good for read scale
ü  Node failover, reconnection possible
HA PostgreSQL with Sync Replication
ü  Synchronous Replication within Data Center
ü  Low Down Time (lower than HA)
ü  Automated Failover for hardware issues including Storage
Virtual IP or
DNS or
pgPool or
pgBouncer
Applications
Site 1
PostgreSQL Replication
ü  In-core replication does great replication
•  But no automated failover
•  “failback” (pg_rewind – thank god)
•  Load Balanced IP Address
•  Get your own proxy (haproxy ?,
pgbouncer?, pgpool?)
•  No-way to preserve connections
Photo Credit: dundanim/ Shutterstock.com
Just PostgreSQL?
ü  Need more projects
•  pgPool2 / HAProxy /pgbouncer
•  Repmgr, etc
ü  Some Customers at this time prefer Cloud DBaaS
•  Heroku
•  Amazon RDS
ü  Some end up preferring Enterprise version of DBaaS
•  appOrbit J
Modern HA Projects
ü  Patroni / Governor
•  https://github.com/zalando/patroni (Python)
•  Docker container
•  Etcd
•  HAProxy
ü  Stolon
•  https://github.com/sorintlab/stolon (Golang)
•  Docker
•  Etcd /Consul
•  Custom Proxy
Governor
https://github.com/compose/governor/blob/master/postgres-ha.pdf
Stolon
https://github.com/sorintlab/stolon/blob/master/doc/architecture_small.png
Basic Container based HAArchitecture
ü  Need a distributed store to store configuration status
•  Consul
•  Zookeeper
•  etcd
ü  PostgreSQL Cluster Peer (Self Managing)
•  Determines local instance status and updates configuration status
•  Master regularly updates its status, failing which it is considered failed
•  If master fails, election based on least lag and new leader takes over
•  Other standby now follows the new master
•  Potentially a third party can even provision the dead master as slave
Some New Trends in Container World
ü Binaries and data often separated
•  One lives in Container image and other in Volumes
ü No longer pg_xlog deployed on separate volumes
•  Underlying storage technologies leads to inconsistent point in time restore
causing DB to be unusable
ü  No new table spaces
•  Hard to get easy replication setups done on the fly
•  Could lead to lost data if new tablespaces are not on volumes
ü  Replications setup with automation rather than manually by Admins
Some New Trends in Container World
ü Adoption of Micro services
•  Leading to lots of smaller databases for each micro service
ü Faster Updates
•  Schema changes sometimes need to be backward compatible
ü Repeatable Deployments
•  Need to redeploy at a moment’s notice
Deployment of PostgreSQL “Cluster”
ü  Can be made self healing
ü  Integrate with pg_rewind to reuse master as slave
ü  Integrate with shared storage to leverage snapshot create new slaves
Virtual IP
Applications
Instance 1
Instance 2
Instance 3
Shared
Storage
But Wait I have multiple DB Servers
ü  I need my clusters to dynamically grow (read scaling)
ü  I also want things to auto-heal as much as it can
Applications
Kubernetes
ü Production grade container orchestrator
ü Horizontal scaling
•  Setup rules to scale slaves
ü ConfigMap
•  postgresql.conf
•  pg_hba.conf
ü Secrets
•  Username passwords
•  Certificates
Kubernetes
ü Persistent Storage features evolving
•  Plugins for storage drivers
ü External Services
•  Services are accessible from all nodes
•  Shared Storage plugins makes your Stateful containers also HA
•  Powerful Combination along with PostgreSQL Replication
•  can spin up fast slaves for multi-TB databases
Production Grade Orchestrator
ü  Can even add rules to spin up new slaves as for read load
Operations
Applications
But Wait .. Need to support Multi-Geo
ü  It could be DR Strategy
ü  It could be Compliance requirements
ü  Service Discovery now getting complicated
Operations
Applications
Consul
•  Service Discovery
•  Failure Detection
•  Multi Data Center
•  DNS Query Interface
{
"service": {
"name": ”mypostgresql",
"tags": ["master"],
"address": "127.0.0.1",
"port": 5432,
"enableTagOverride": false,
}
}
nslookup master.mypostgresql.service.domain
nslookup mypostgresql.service.domain
Service Discovery
ü  Uniform DNS name for your database
ü  Cloud-agnostic naming
ü  Certificates created using DNS names you own
ü  No Single Point of Failures
Operations
Applications
PostgreSQL Enhancement
ü  SRV Record of NameServer
•  https://en.wikipedia.org/wiki/SRV_record
•  IP:Port
ü  PostgreSQL LIBPQ Client Enhancement
•  Support Service Discovery using SRV Records
•  servicename is passed
•  libpq looks up the SRV Record from nameserver
•  Connects port provided by SRV record
Summary
ü  PostgreSQL “Cluster” deployments is the wave of change
ü  Container is one of the technology but not the solution
Your Feedback is Important!
ü  We’d like to understand your use of Postgres for HA / DR.
ü  If interested,
ü  Twitter: @jkshah
ü  Email: jignesh@apporbit.com
Thanks.
Questions?
Follow me on twitter: @jkshah
Blog: http://jkshah.blogspot.com Full copies of your applications
at the push of a button
We are
HIRING !!!

More Related Content

PDF
Patroni - HA PostgreSQL made easy
PDF
High Availability PostgreSQL with Zalando Patroni
PDF
Patroni: Kubernetes-native PostgreSQL companion
PDF
Deploying PostgreSQL on Kubernetes
PDF
Linux tuning to improve PostgreSQL performance
PDF
PostgreSQL Replication High Availability Methods
PDF
How Prometheus Store the Data
PDF
Deep Dive on ClickHouse Sharding and Replication-2202-09-22.pdf
Patroni - HA PostgreSQL made easy
High Availability PostgreSQL with Zalando Patroni
Patroni: Kubernetes-native PostgreSQL companion
Deploying PostgreSQL on Kubernetes
Linux tuning to improve PostgreSQL performance
PostgreSQL Replication High Availability Methods
How Prometheus Store the Data
Deep Dive on ClickHouse Sharding and Replication-2202-09-22.pdf

What's hot (20)

PDF
より深く知るオプティマイザとそのチューニング
PDF
PostgreSQL WAL for DBAs
PDF
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Operating PostgreSQL at Scale with Kubernetes
PDF
Introduction and Deep Dive Into Containerd
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
PDF
sslcompressionの設定方法および性能測定結果
PDF
Autoscaling Kubernetes
PDF
FIFA 온라인 3의 MongoDB 사용기
PDF
Replication Troubleshooting in Classic VS GTID
PDF
PostgreSQL - C言語によるユーザ定義関数の作り方
PPTX
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PDF
Nginx dhruba mandal
PDF
Mvcc in postgreSQL 권건우
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
まずやっとくPostgreSQLチューニング
より深く知るオプティマイザとそのチューニング
PostgreSQL WAL for DBAs
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
Operating PostgreSQL at Scale with Kubernetes
Introduction and Deep Dive Into Containerd
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
sslcompressionの設定方法および性能測定結果
Autoscaling Kubernetes
FIFA 온라인 3의 MongoDB 사용기
Replication Troubleshooting in Classic VS GTID
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
Nginx dhruba mandal
Mvcc in postgreSQL 권건우
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
まずやっとくPostgreSQLチューニング
Ad

Similar to PostgreSQL High Availability in a Containerized World (20)

PDF
PostgreSQL High Availability in a Containerized World
PDF
Creating customized openSUSE versions with SUSE Studio
ODP
Pro PostgreSQL, OSCon 2008
PDF
Best Practices & Lessons Learned from Deployment of PostgreSQL
 
PDF
Using PostgreSQL With Docker & Kubernetes - July 2018
PPTX
PostgreSQL and Linux Containers
PDF
Postgre sql linuxcontainers by Jignesh Shah
PPTX
High Availability - Brett Thurber - ManageIQ Design Summit 2016
PDF
Elephants in the Cloud
PDF
Architecture for building scalable and highly available Postgres Cluster
PDF
Postgres & Red Hat Cluster Suite
 
PDF
An Introduction to Using PostgreSQL with Docker & Kubernetes
PDF
Deployment of PostgreSQL inside of Kubernetes with High Availability
 
PDF
Trivadis TechEvent 2017 PostgreSQL für die (Orakel) DBA by Ludovico Caldara
PDF
PostgreSQL HA
PPTX
Enterprise grade deployment and security with PostgreSQL
PDF
Docking postgres
PPTX
Automating the Entire PostgreSQL Lifecycle
PPTX
How to Design for Database High Availability
 
PPTX
Keynote - Hosted PostgreSQL: An Objective Look
 
PostgreSQL High Availability in a Containerized World
Creating customized openSUSE versions with SUSE Studio
Pro PostgreSQL, OSCon 2008
Best Practices & Lessons Learned from Deployment of PostgreSQL
 
Using PostgreSQL With Docker & Kubernetes - July 2018
PostgreSQL and Linux Containers
Postgre sql linuxcontainers by Jignesh Shah
High Availability - Brett Thurber - ManageIQ Design Summit 2016
Elephants in the Cloud
Architecture for building scalable and highly available Postgres Cluster
Postgres & Red Hat Cluster Suite
 
An Introduction to Using PostgreSQL with Docker & Kubernetes
Deployment of PostgreSQL inside of Kubernetes with High Availability
 
Trivadis TechEvent 2017 PostgreSQL für die (Orakel) DBA by Ludovico Caldara
PostgreSQL HA
Enterprise grade deployment and security with PostgreSQL
Docking postgres
Automating the Entire PostgreSQL Lifecycle
How to Design for Database High Availability
 
Keynote - Hosted PostgreSQL: An Objective Look
 
Ad

More from Jignesh Shah (13)

PDF
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
PDF
PostgreSQL Extensions: A deeper look
PDF
Deep Dive into RDS PostgreSQL Universe
PDF
PostgreSQL and Benchmarks
PDF
Tuning DB2 in a Solaris Environment
PDF
Best Practices with PostgreSQL on Solaris
PDF
My experience with embedding PostgreSQL
PDF
SFPUG - DVDStore Performance Benchmark and PostgreSQL
PDF
Best Practices of running PostgreSQL in Virtual Environments
PDF
Understanding PostgreSQL LW Locks
PDF
OLTP Performance Benchmark Review
PDF
Introduction to PostgreSQL for System Administrators
PDF
Best Practices of HA and Replication of PostgreSQL in Virtualized Environments
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
PostgreSQL Extensions: A deeper look
Deep Dive into RDS PostgreSQL Universe
PostgreSQL and Benchmarks
Tuning DB2 in a Solaris Environment
Best Practices with PostgreSQL on Solaris
My experience with embedding PostgreSQL
SFPUG - DVDStore Performance Benchmark and PostgreSQL
Best Practices of running PostgreSQL in Virtual Environments
Understanding PostgreSQL LW Locks
OLTP Performance Benchmark Review
Introduction to PostgreSQL for System Administrators
Best Practices of HA and Replication of PostgreSQL in Virtualized Environments

Recently uploaded (20)

PPTX
A Presentation on Artificial Intelligence
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Empathic Computing: Creating Shared Understanding
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
A Presentation on Artificial Intelligence
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Review of recent advances in non-invasive hemoglobin estimation
Advanced methodologies resolving dimensionality complications for autism neur...
A comparative analysis of optical character recognition models for extracting...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
20250228 LYD VKU AI Blended-Learning.pptx
MYSQL Presentation for SQL database connectivity
Programs and apps: productivity, graphics, security and other tools
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Empathic Computing: Creating Shared Understanding
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Electronic commerce courselecture one. Pdf
NewMind AI Weekly Chronicles - August'25-Week II
Digital-Transformation-Roadmap-for-Companies.pptx

PostgreSQL High Availability in a Containerized World

  • 1. POSTGRESQL HIGH AVAILABILITY IN A CONTAINERIZED WORLD Jignesh Shah Chief Architect, Data Platform
  • 2. About @jkshah ü  appOrbit •  Focus is on data management of applications running in Containers ü  VMware •  Lead and manage Postgres and Data Management teams at VMware for various products embedding PostgreSQL running in virtualized embedded instances ü  Sun Microsystems •  Team Member of first published SpecJAppServer 2004 benchmark with PostgreSQL •  Performance of PostgreSQL on Solaris/Sun Servers ü  Working with PostgreSQL community since 2005 •  http://jkshah.blogspot.com/2005/04/profiling-postgresql-using-dtrace-on_22.html ü  Working with Container technologies (Solaris Zones) since 2004 •  http://jkshah.blogspot.com/2004/08/db2-working-under-solaris-10-zones_30.html
  • 4. What are Containers? ü OS Level virtualization where kernel allows for multiple isolated user- space instances Operating System Bare Metal Server OS Bare Metal Server Hypervisor OS Operating System Bare Metal Server C C C C C OS Bare Metal Server Hypervisor OS C C C C
  • 5. Advantages of Containers ü Lower footprint ü Very Quick Startup and Shutdown ü Density ü Nesting
  • 6. Disadvantages of Containers ü Same Kernel version ü Cannot run other OS natively ü Security (to be improved) ü Not a complete solution for enterprise needs
  • 7. Where to use container? ü Recreate identical environment (cookie-cutter) ü Resource Grouping of specific processes in heavily loaded server ü Handling multiple versions of software applications ü Ephemeral application instances (Dev/Test) ü Production instances (Growing everyday) ü Many more
  • 8. Docker – Popular Container engine •  Installation # sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF # yum install docker-engine # systemctl enable docker.service # systemctl start docker.service
  • 9. Docker ü Quick Guide to use a docker based container # docker run --name mycontainer –e POSTGRES_PASSWORD=mysecretpassword -d postgres # docker exec -ti mycontainer psql -U postgres # docker stop mycontainer # docker rm mycontainer # docker rmi postgres
  • 10. Container Volumes ü Persists beyond the life of a Docker container •  VOLUME command in Dockerfile or •  Using –v using docker run command •  Automatically created if not already present during docker run •  Not part of docker push/pull operations •  Can select a non-local directory using --volume-driver •  Third party components required to get multi-host support (NFS, etc ) ü Different options using –v •  -v /hostsrc/data:/opt/data:ro # for read only volumes (default rw) •  -v /hostsrc/data:/opt/data:Z # Z – private volume, z – shared volume •  -v /etc/nginx.conf:/etc/nginx.conf # for mounting a single file only ü Volumes can be shared from another container using --volumes-from on same host ü Starting from docker 1.9 gives first class status to Docker Volumes
  • 11. PostgreSQL Container as a DB server ü Maybe you want a database server standalone •  Not all database clients will be in the same host •  Need to limit memory usage •  Need different layout of how files are distributed ü Use the –p option to make the port available even to non containers clients ü Use –m to limit memory usage by the DB server (by default it can see and use all) •  Note this does not set shared buffers automatically with the library image docker run --name mycontainer -m 4g -e POSTGRES_PASSWORD=mysecretpassword -v /hostpath/pgdata:/var/lib/postgresql/data -p 5432:5432 -d postgres
  • 12. PostgreSQL in an enterprise environment ü However for a real production use case we would need •  Bigger shared memory configurations •  Need different layout of how files are distributed •  Ability to backup the database •  Ability to setup replication •  etc ü In short we need a more custom image of PostgreSQL
  • 13. Best Practices for custom image ü For production install customize the docker image •  Allocate proper memory limits - example 8GB •  All pagecache usage shows up as docker container memory usage •  Bump up shared buffers and other parameters as required •  Hint: use PostgreSQL 9.3 or later otherwise have to privileged containers •  http://jkshah.blogspot.com/2015/09/is-it-privilege-to-run-container-in.html •  Support multiple volumes in your image •  PITR archives •  Full Backup directory •  PostgreSQL Extensions •  Setup replication support •  Out of box replication setup •  Monitoring Tool •  Your favorite monitoring agent
  • 15. Planning a High Availability Strategy ü Requirements •  Recovery Time Objective (RTO) •  What does 99.99% availability really mean? •  Recovery Point Objective (RPO) •  Zero data lost? •  HA vs. DR requirements ü Evaluating a technology •  What’s the cost for implementing the technology? •  What’s the complexity of implementing, and managing the technology? •  What’s the downtime potential? •  What’s the data loss exposure? Availability % Downtime / Year Downtime / Month * Downtime / week "Two Nines" - 99% 3.65 Days 7.2 Hours 1.69 Hours "Three Nines" - 99.9% 8.76 Hours 43.2 Minutes 10.1 Minutes "Four Nines" - 99.99% 52.56 Minutes 4.32 Minutes 1.01 Minutes "Five Nines" - 99.999% 5.26 Minutes 25.9 Seconds 6.06 Seconds * Using a 30 day month
  • 16. Simplified View of HA PostgreSQL ü  Easy to setup ü  Handles Infrastructure problems ü  Exploit Storage features ü  Exploit replication features DNS Name Applications Somewhere in Cloud/ Data Center
  • 17. Causes of Downtime ü  Planned Downtime •  Software upgrade (OS patches, SQL Server cumulative updates) •  Hardware/BIOS upgrade ü  Unplanned Downtime •  Datacenter failure (natural disasters, fire) •  Server failure (failed CPU, bad network card) •  I/O subsystem failure (disk failure, controller failure) •  Software/Data corruption (application bugs, OS binary corruptions) •  User Error (shutdown a SQL service, dropped a table)
  • 18. Typical Plan of action ü  Minimize reasons that leads to downtime ü  Faster recovery time (Balanced checkpoints) ü  Proxies for fast switching between production and DR copy ü  Shared Storage for HA ü  PostgreSQL Synchronous Replication to go beyond
  • 19. HA PostgreSQL with Shared Storage ü  Ability to leverage hardware Snapshots/Restore ü  Automated Failover using OS Clustering Software ü  Block Level Replication for DR ü  Distributed Shared Storage getting popular Virtual IP or DNS or pgPool or pgBouncerApplications Site 1
  • 20. PostgreSQL Replication ü  Single master, multi-slave ü  Cascading slave also possible ü  Mechanism based on WAL (Write-Ahead Logs) ü  Multiple modes and multiple recovery ways •  Warm standby •  Asynchronous hot standby •  Synchronous hot standby ü  Slaves can perform read operations optionally •  Good for read scale ü  Node failover, reconnection possible
  • 21. HA PostgreSQL with Sync Replication ü  Synchronous Replication within Data Center ü  Low Down Time (lower than HA) ü  Automated Failover for hardware issues including Storage Virtual IP or DNS or pgPool or pgBouncer Applications Site 1
  • 22. PostgreSQL Replication ü  In-core replication does great replication •  But no automated failover •  “failback” (pg_rewind – thank god) •  Load Balanced IP Address •  Get your own proxy (haproxy ?, pgbouncer?, pgpool?) •  No-way to preserve connections Photo Credit: dundanim/ Shutterstock.com
  • 23. Just PostgreSQL? ü  Need more projects •  pgPool2 / HAProxy /pgbouncer •  Repmgr, etc ü  Some Customers at this time prefer Cloud DBaaS •  Heroku •  Amazon RDS ü  Some end up preferring Enterprise version of DBaaS •  appOrbit J
  • 24. Modern HA Projects ü  Patroni / Governor •  https://github.com/zalando/patroni (Python) •  Docker container •  Etcd •  HAProxy ü  Stolon •  https://github.com/sorintlab/stolon (Golang) •  Docker •  Etcd /Consul •  Custom Proxy
  • 27. Basic Container based HAArchitecture ü  Need a distributed store to store configuration status •  Consul •  Zookeeper •  etcd ü  PostgreSQL Cluster Peer (Self Managing) •  Determines local instance status and updates configuration status •  Master regularly updates its status, failing which it is considered failed •  If master fails, election based on least lag and new leader takes over •  Other standby now follows the new master •  Potentially a third party can even provision the dead master as slave
  • 28. Some New Trends in Container World ü Binaries and data often separated •  One lives in Container image and other in Volumes ü No longer pg_xlog deployed on separate volumes •  Underlying storage technologies leads to inconsistent point in time restore causing DB to be unusable ü  No new table spaces •  Hard to get easy replication setups done on the fly •  Could lead to lost data if new tablespaces are not on volumes ü  Replications setup with automation rather than manually by Admins
  • 29. Some New Trends in Container World ü Adoption of Micro services •  Leading to lots of smaller databases for each micro service ü Faster Updates •  Schema changes sometimes need to be backward compatible ü Repeatable Deployments •  Need to redeploy at a moment’s notice
  • 30. Deployment of PostgreSQL “Cluster” ü  Can be made self healing ü  Integrate with pg_rewind to reuse master as slave ü  Integrate with shared storage to leverage snapshot create new slaves Virtual IP Applications Instance 1 Instance 2 Instance 3 Shared Storage
  • 31. But Wait I have multiple DB Servers ü  I need my clusters to dynamically grow (read scaling) ü  I also want things to auto-heal as much as it can Applications
  • 32. Kubernetes ü Production grade container orchestrator ü Horizontal scaling •  Setup rules to scale slaves ü ConfigMap •  postgresql.conf •  pg_hba.conf ü Secrets •  Username passwords •  Certificates
  • 33. Kubernetes ü Persistent Storage features evolving •  Plugins for storage drivers ü External Services •  Services are accessible from all nodes •  Shared Storage plugins makes your Stateful containers also HA •  Powerful Combination along with PostgreSQL Replication •  can spin up fast slaves for multi-TB databases
  • 34. Production Grade Orchestrator ü  Can even add rules to spin up new slaves as for read load Operations Applications
  • 35. But Wait .. Need to support Multi-Geo ü  It could be DR Strategy ü  It could be Compliance requirements ü  Service Discovery now getting complicated Operations Applications
  • 36. Consul •  Service Discovery •  Failure Detection •  Multi Data Center •  DNS Query Interface { "service": { "name": ”mypostgresql", "tags": ["master"], "address": "127.0.0.1", "port": 5432, "enableTagOverride": false, } } nslookup master.mypostgresql.service.domain nslookup mypostgresql.service.domain
  • 37. Service Discovery ü  Uniform DNS name for your database ü  Cloud-agnostic naming ü  Certificates created using DNS names you own ü  No Single Point of Failures Operations Applications
  • 38. PostgreSQL Enhancement ü  SRV Record of NameServer •  https://en.wikipedia.org/wiki/SRV_record •  IP:Port ü  PostgreSQL LIBPQ Client Enhancement •  Support Service Discovery using SRV Records •  servicename is passed •  libpq looks up the SRV Record from nameserver •  Connects port provided by SRV record
  • 39. Summary ü  PostgreSQL “Cluster” deployments is the wave of change ü  Container is one of the technology but not the solution
  • 40. Your Feedback is Important! ü  We’d like to understand your use of Postgres for HA / DR. ü  If interested, ü  Twitter: @jkshah ü  Email: [email protected]
  • 41. Thanks. Questions? Follow me on twitter: @jkshah Blog: http://jkshah.blogspot.com Full copies of your applications at the push of a button We are HIRING !!!