If you want to be 100% reliable that implies you need servers at more than one ISP/location. That way if a single one dies you're still up and running on the others.
Unfortunately that gets expensive because instead of having a single machine you suddenly need two/three/four/many.
Then you need to factor in the overhead of setting things up to work in a distributed fashion - database replication, load-balancing to route traffic, etc.
If you want to do things cheaply your best bet is to rent hosts at two locations, and have DNS handled at a third. Configure one host to be live, and leave the other one receiving constant dumps of html/db-content. In the event of the main ISP dying you switch DNS to the second - that gives you a migration time of ~5 minutes.
i.e. If budget is a concern have a hot-spare and use DNS records with very short TTL settings, so you can switch promptly.