For last six months, I have been working on moving Postgres from bare metal & VM based systems in Docker. As of today, we have migrated a couple of mission critical Postgres DBs (~ 2TB) on to Docker environment.
During the migration journey, I have listed down some of the things to consider running Postgres production instances in to Docker environment.
- Do not use default Postgres Docker image. Start with your own docker image from scratch.
- Handle Postgres service shutdown gracefully in docker with SIGTERM
- OS can be stored in Docker container
- Data volume MUST be stored in persistent storage
- Use some kind of framework to manage docker containers
- Apache Mesos & Aurora
- OpenStack & Kubernetes
- You can mount NetApp for backups and WAL files on to container
- Make templates for resources for different kind of workloads
- Aurora job for resource templates
- postgresql.conf templates
- Use static IPs for services ; DBs, Front end an backend servers
- It will be easier to control access at container level for better security
- failover is easy to manage with static IP for master DB server
- Benchmark your existing system and compare with new system
- Keep eyes on TPS using pgbench and benchmarksql
- Monitoring solution for Postgres DB
- collectd or other agent based monitoring
- pg_stat_statements is very useful
- Docker container should be monitored separately
- docker stats
- collectd or other agent based monitoring
- Backup container for taking backups
- Standby container for setting up standby jobs
I hope it will be useful for someone working on migrating Postgres into Docker environment!