Dfranc3373
Dfranc3373

Reputation: 2177

Keep Uploaded Files in Sync Across Multiple Servers - PHP Linux

I have a website right now that is currently utilizing 2 servers, a application server and a database server, however the load on the application server is increasing so we are going to add a second application server.

The problem I have is that the website has users upload files to the server. How do I get the uploaded files on both of the servers?

I do not want to store images directly in a database as our application is database intensive already.

Is there a way to sync the servers across each other or is there something else I can do?

Any help would be appreciated.

Thanks

EDIT: I am adding the following links for people that helped me understand this question more:

Synchronize Files on Multiple Servers and Keep Uploaded Files in Sync Across Multiple Servers - LAMP

For all Reading this post NFS seems to be the better of the 2.

NFS will keep files in sync but you could also use ftp to upload the files across all servers as well but NFS looks like the way to go.

Upvotes: 7

Views: 6867

Answers (6)

CantThinkOfAnything
CantThinkOfAnything

Reputation: 1179

you could do it with rsync.. people have suggested using nfs.. but that way you create one point of failure... if the nfs server goes down.. both your servers are screwed... correct me if im wrong

Upvotes: 1

marcus
marcus

Reputation: 81

Another answer could be to use a piece of software called BTSync, it is very easy to install and use and could allow you to easily keep files in sync accross as many servers as you need to. It takes only 3 terminal commands to install and is very efficient.

Take a look here


and here

Upvotes: 2

tftd
tftd

Reputation: 17032

This is a question for serverfault.
Anyway I think you should definitely consider getting in the "cloud". Syncing uploads from one server to another is simply unreliable - you have no idea what kind of errors you can get and why you can get them. Also the syncing process will load both servers. For me the proper solution is going in the cloud.

Should you chose the syncing method you have a couple of solutions:

  1. Use rsync to sync the files you need between the servers.
  2. Use crontab to sync the files every X minutes/hours/days.
  3. Copy the files upon some event (user login etc)

Upvotes: 5

Dfranc3373
Dfranc3373

Reputation: 2177

I got this answer from server fault:

The most appropriate course of action in a situation like this is to break the file share into a separate service of its own. Don't duplicate files if you have a network that can let the files be "everywhere (almost) at once." You can do this through NFS/CIFS or through a proper storage protocol like iSCSI. Mount as local storage in the appropriate directory. Depending on the performance of your network and your storage needs, this could add a couple of undetectable milliseconds to page load time.

So using NFS to share server files would work OR

as stated by @kgb you could specify one single server to hold all uploaded files and have other servers pull from that (just make sure you run a cron or something to back up the file)

Upvotes: 4

Sergey Eremin
Sergey Eremin

Reputation: 11080

You can use db server for storage... Not in the db i mean, have a web server running there too. It is not going to increase cpu load much, but is going to require a better channel.

Upvotes: 1

mikegreiling
mikegreiling

Reputation: 1161

Most sites solve this problem by using a 3rd party designated file server like Amazon S3 for the user uploads.

Upvotes: 2

Related Questions