  The delivery of key services in domains ranging from finance and
manufacturing to healthcare and transportation is underpinned by a rapidly
growing number of mission-critical enterprise applications. Ensuring the
continuity of these complex applications requires the use of software-managed
infrastructures called high-availability clusters (HACs). HACs employ
sophisticated techniques to monitor the health of key enterprise application
layers and of the resources they use, and to seamlessly restart or relocate
application components after failures. In this paper, we first describe the
manifold uses of HACs to protect essential layers of a critical application and
present the architecture of high availability clusters. We then propose a
taxonomy that covers all key aspects of HACs -- deployment patterns,
application areas, types of cluster, topology, cluster management, failure
detection and recovery, consistency and integrity, and data synchronisation;
and we use this taxonomy to provide a comprehensive survey of the end-to-end
software solutions available for the HAC deployment of enterprise applications.
Finally, we discuss the limitations and challenges of existing HAC solutions,
and we identify opportunities for future research in the area.
