building a production grade postgresql cloud foundry service
TRANSCRIPT
• Monitoring replica.on performance • Failure detec.on • Automated failover
• Leader elec.on • Master promo.on
• Single VM or single cluster of VMs
• Single PostgreSQL server or single PostgreSQL cluster
• Isola8on limited to PostreSQL mul8-tenancy capabili8es
Shared PostgreSQL Cluster > Bad idea
3 VMs
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
1 VM
Postgresql VM#1
PostgreSQL Cluster
Single PostgreSQL Server
Service Instance
Service Instance 2
Service Instance 3
Service Instance 1
Service Instance 2
Service Instance 3
Service Instance 1
Service Instance 2
Service Instance 3
Service Instance 1
Service Instance 2
Service Instance 3
Service Instance 1
OR
1x
1x
Cloud Foundry Run.me
3 VMs
PostgreSQL Cluster
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
Cloud Foundry Run.me
3 VMs
PostgreSQL Cluster
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
App App App App
App App App App
App App App App App
App App App App App App
App App
App App
App App
App App App
App
App App App App App App App
App App App App App App
App App App App App App
App App App App App
App App App App
App App App App App App App App
App App App App App App App App
App App App App App App App App
App App App App App App App
App App App App App App App App App
App App App
Service Instance
Service Instance
Service Instance
Cloud Foundry Run.me
3 VMs
PostgreSQL Cluster
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
App App App App
App App App App
App App App App App
App App App App App App
App App
App App
App App
App App App
App
App App App App App App App
Service Instance
Service Instance
Service Instance
Cloud Foundry Run.me
3 VMs
PostgreSQL Cluster
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
Service Instance
App App App App
App App App App
App App App App App
App App App App App App
App App
App App
App App
App App App
App
App App App App App App App
Service Instance
Service Instance
Service Instance
• Service instance = dedicated VM or dedicated cluster of VMs
• Uses infrastructure isola8on to enable mul8-tenancy support
Dedicated PostgreSQL instances > Good idea
my-3node-postgres-cluster-2
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Service Instance
Service Instance
n x
m x
and / or
Cloud Foundry Run.me
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Cloud Foundry Run.me
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Cloud Foundry Run.me
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
App App App App App App App App App App
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
Postgresql VM
Service Instance
Postgresql VM
Service Instance
Pre-provisoned service instances
my-3node-postgres-cluster-2
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Service InstanceService Instance
Service Broker
Pre-provisioned service instances
my-3node-postgres-cluster-2
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Service InstanceService Instance
Service Broker
Pre-provisioned service instances
my-3node-postgres-cluster-2
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Service InstanceService Instance
Service Broker
On-demand provisioned service instances
my-single-postgres-1
Postgresql VM#1
Service Instance
Service Broker
Some Automa.on
Pre-provisoned service instances
my-3node-postgres-cluster-2
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Service InstanceService Instance
Service Broker
Some Automa.on
my-single-postgres-1
Postgresql VM#1
my-3node-postgres-cluster-1
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-3node-postgres-cluster-1
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Single node postgresql service instance > turned into a 3-node postgresql cluster.
my-3node-postgres-cluster-1
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Small cluster turned into a large cluster.
a9s Deployer
Templates Deployments
Bosh
a9s Service Broker
my-3node-postgres-cluster-2
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
my-single-postgres-1
Postgresql VM#1
Middleware Adapter
Cloud Foundry Adapter
a9s PostgreSQL SPI
Service InstanceService Instance
my-3node-postgres-cluster-3
Postgresql VM#1
Postgresql VM#2
Postgresql VM#3
Service Instance
…
Cloud ControllerCF Clientcreate service
create service
create deployment from template xy with a_ributes {…}
deploy release abc & deployment manifest xyz
Execute deployments
create service specific
creden.als
create binding
• Service catalog metadata, e.g. service plans
• PostgreSQL instance creden8al management (service bindings)
a9s PostgreSQL SPI
• Dedicated service instances are mandatory
• On-demand provisioning is essen.al • Bosh does a great job
• Finding a PostgreSQL replica.on & clustering toolset that allows automa.on
• Itera.vely learn how to configure and automate common and edge-case scenarios.