High Availability describes a set of techniques and procedures to maximize availability. We define a few types of high availability.
Our configurations start with building a single server and a replica, including an automatic failover system. A more regular high availability solution consists of multiple load balancers, a set of web or application servers, a database cluster with internal data mirrors and automatic failover systems. All components like switches, routers and firewalls will be installed in duplicate to create redundancy on all levels. Next to this we split a cluster in multiple independent racks and powerfeeds. In this way any failures that causes problems in another functional component are eliminated.
Load balancers can provide high availability as well as scalability. Traffic is routed to multiple backend machines which enables us to accept failure in the backend machines without any consequences for the service the system provides. When more capacity is needed the solution is to just put in more backend machines. When backend machines need to be serviced they can very easily be removed and put back from service. When upgrades create problems on a backend machine, they can be removed from the cluster without any problems. This can all be done without disruption of service.
Load balancers can also be used for SSL-offloading and securing against cross-site scripting (XSS) and SQL-injection. When multiple load balancers are put in front of a cluster we can always guarantee accessibility to the cluster.
By using clustering, replication or a combination of both we can deliver very high availibility and scalability. Clustering is a form of cooperation between multiple systems to enable spreading of work and to prevent failure of machine to affect other machines or general service. i.e. a MySQL database cluster. Replication on the other hand means we keep a functional and preferably realtime copy of a system to take over tasks in case of a failure of the primary machine. Even cluster can have complete failures and this is way a replica of a cluster is advised depending on the uptime guarantees.
Technologies we use for clustering and replication are among others the database clustering solutions of MSSQL, MySQL and PostgreSQL, DRBD and SAN or NAS storage.
Complete disaster resilience is achieved by creating two identical configurations in two independent data centres. This can be an active/passive solution or an active/active depending on the demands and to what extent the application software is able to support those solutions. By solutions like global load balancing, anycast and geo-enabled round-robin DNS we can deliver maximum availibility.