Up until now, we've performed a great deal of preliminary work. We know the proper settings, we can create replicas in our sleep, and have all the skills necessary to troubleshoot and fix a misbehaving server or two. Yet we're still missing one critical element to truly achieve high availability: automation.
Many of the recipes in previous chapters cover utilities that are almost automated. We learned how to combine PgBouncer and pgpool in the Chapter 3, Pooling Resources, for example. The Replication chapter got us even further, giving us the necessary tools to maintain a veritable army of alternate servers for primary substitution at a moment's notice.
But we still need manual intervention. We don't want a central point of failure, so pgpool and PgBouncer must run on all candidate servers. Only one of these is writable, so we have a virtual IP address or CNAME that needs to be...