Detection and recovery of node and service-level failures
Storage agnostic, no requirement for shared storage
Resource agnostic, anything that can be scripted can be clustered
Supports STONITH for ensuring data integrity
Supports large and small clusters
Supports both quorate and resource driven clusters
Supports practically any redundancy configuration
Automatically replicated configuration that can be updated from any node
Ability to specify cluster-wide service ordering, colocation and anti-colocation
Support for advanced service types
Clones: for services which need to be active on multiple nodes
Multi-state: for services with multiple modes (eg. master/slave, primary/secondary)
Unified, scriptable, cluster management tools.