We've got a production cluster that may be similar to what you're interested in:
- MySQL MMM to keep databases in sync between both servers.
- OCFS2 on top of DRBD 0.8 in multi-master mode to keep web files and configuration files in sync between both servers.
- Keepalived on redundant firewalls in front of the web cluster, which keeps track of which servers are up and evenly distributes client connections between them.
It's reasonably simple to implement and keep running, and provides excellent performance. Keepalived can be a little fiddly because it doesn't put super userful errors into syslog about broken configurations, but once you've got it working it's rock solid. DRBD is about the best non-SAN solution for keeping whole filesystems in sync between machines, and OCFS2 is (in our tests) the best performing open source clustered filesystem, and it's setup is real easy as well.
The only real caveat with this is that if a user's connections are being directed at one server, and then they get switched to the other server, it'll lose Apache / PHP session and state data (unless that's all being stored in the database). This isn't a huge deal though, since keepalived has a mode that'll make sure the same client IPs always connect to the same backend servers (assuming they stay up).