The aim of clustering is to take a single point of failure and, by letting it run across multiple servers, make the service more reliable. In theory this sounds relatively simple: if server A goes down, start the service on server B. In practice, however, there are several considerations that need to be taken into account; otherwise, there is a risk that availability will likely be worse than a single server, or even worse, that data corruption may occur. High availability is very hard to get right and very easy to get wrong.