I'm running into the same situation.... Here's my configuration:
Sorry, my ASCII art is no good... This is a typical architecture for redundancy and reliability. Keep in mind, the Database is on a separate network from the SAN from the Webservers, etc. for security purposes.
ARCHITECTURE:
Code:
INTERNET
|
|
v
Firewalls/IDS/IPS +
LoadBalancers
(all w/redundancy)
|
|
v
WebServers
/------+-------\
| | | |
| | | |
[1] [2] [3] [4] <-- iSCSI SAN Attached
| | | |
| | | |
\------+-------/
^
|
v
Database (master/slave) <-- iSCSI SAN for master, local for slave.
SCENARIO:
The issue that I need to overcome when I run anything in a distributed/redudant environment is the fact that you'll need to allow uploads to be posted and replicated across multiple servers.
My situation is that I don't want to make code changes to anything I'm hosting (Joomla, any other CMS, Forum, etc.) and I wanted to work around the SAN in case of Storage failures (just in case) as I've had an issue in the past with a different SAN environment and had all my eggs in one basket, making me rely on backups and recovering data. Not a nice time. Our new SAN is iSCSI with 4TB of RAID-5 + a Hot Spare making it 3TB usable storage and a very nice product, but just recently implemented. Our old SAN was a DAS (Direct Attached Storage), so now we have at least 2 hosts directly attached to the iSCSI SAN with the capability of taking over the other host if the host has a problem. All running Solaris 10 and very relibable.
Regardless, and to be independant of the SAN/network configuration, this is what I'm thinking about doing to upgrade our environment to make this easy and reliabile across all products/platforms/etc.:
1) Modify all web server cofigurations to reflect the new SAN storage as their primary source of the data via NFS mounting the storage locations on each web server.
2) Changing my httpd.conf files to reflect the new storage location so that any writes are made to the backend are immediately available to the other servers but keep a secondary httpd.conf file referencing the content stored locally.
3) Keep the SAN copy and Local copies in sync in case of a failure to the SAN, the web servers are finding the content locally. Probably sycn every hour or so.
CONCERNS:
* NFS Locking, but I only had issues when (in the past) I was NFS mounting a logging directory, but everyting else seemed to work ok.
* If the SAN had network connectivity issues or a failure on that side, then I would need to manually make 2 changes. 1) to the httpd.conf files to relfect the new (local) storage information and 2) update the database IP to the slave server.
I'm sure there's more, but this is what I've been working on so far to make it easy and no code changes to any product running in that environment.