I'm unsure of how to provide a fault-tolerant solution when serving uploaded files.
I have a single load balancer, with two servers (webserver1, webserver2) as nodes, both running Apache2, and a database that is accessible by both nodes, but not the WAN.
The webservers shall eventually be scaled, and the database shall be sharded.
General file replication
At this time, I am running a scheduled rsync from webserver2 to webserver1, webserver1 is the master, who's files are being distributed to webserver2. At this time there are only two servers, though this is intended to scale.
I have three directories in my Web application that are to be used for user-generated files that are uploaded to both webserver1, and webserver2 (these are exceptions for the rsync operation).
Currently, I have 3 NFS shares being made available from webserver1, said shares are being mounted by webserver2.
I'm quite new to the distributed architecture scene, but from what I can see, the NFS solution leads to a single point-of-failure - I've altered the weighting on the load balancer to ensure that webserver2 receives more traffic, so the load on webserver1 shouldn't be higher.
I've no more budget to spend on any Cloud solutions (such as Amazon S3), so my only course of action is to provide a free software solution.
Are there any viable software solutions? My highest priority is the remove the single point-of-failure whilst keeping server loads to a minimum.