The key to achieving high availability is to eliminate single points of failure. If a web presence is hosted on a single Linux box running Apache, then this is a single point of failure. If a database is hosted on a lone PostgreSQL server, then this is a single point of failure. If a site's internet connectivity comes through a single core router then this is a single point of failure and if a site has only one link to the internet then this too is a single point of failure.
Elimination of single points of failure inevitably requires provisioning additional resources -- more often than not hardware -- that can be utilised when failure occurs. It is the role of high availability solutions to architect and manage these resources such that when a failure occurs users are still able to access the service. This may be a full service, this may be a degraded service, it may even be a service advising users to come back later, but it is still a service and is better than an ``HTTP 404 server unreachable'' error.