Since we have no idea what HTTP server, OS, or application structure you're using, this is all theory and high-level concepts. You'll want to create an active/passive cluster and have a front end load balancer that mediates incoming traffic, sending it to the proper web front end servers based on their availability. Of course, this chokes you down to one single point of failure in the load balancer, so you'll want an active/passive load balancer solution. Things quickly become complex and expensive, as you can see. However if your site truly needs to be up 100% of the time, then it will be worth it.
The poor man's means of doing this would be to truly have identically configured web servers, whatever that means in your scenario. That could mean filesystem replication, copy scripts, or any number of other methods. Nevertheless, as long as you can guarantee that the web servers contain identical content, you could simply schedule your downtime, and change your DNS records to point from one front end server to another front end server and wait 48 hours or so before performing maintenance on the one. This is, of course, only for planned downtime.
For unplanned downtime, return to paragraph 1. It's going to be expensive, complex, and expensive again.