I would actually recommend something more along the rsync lines you were considering. For a fairly static set of files (like a website docroot), this setup works quite well. Getting into distributed filesystems (OCFS2, GFS2) or NFS is going to add additional points of potential failure, present potential performance problems, and significantly increase the complexity of the setup. On top of that, most distributed filesystem setups require (expensive) SAN hardware to share disks (unless you're using something like DRDB, which I'm not sure would work well for your setup).
I would setup one server (it can have minimal resources, or even be virtual) as your production staging server. Configure it exactly as your production webservers will be, and any production changes are made there. Then, put together a set of scripts (possibly/probably using rsync or an analog) that will push your web root from the staging server to all of your production servers.
Another possible setup is to store your webroot in your favorite source code revision control system (which you should be doing anyway), and have the three production servers pull the document root directly from the repository.