Linux – Geographically distributed file system with preferred locality

distributed-filesystemslinuxnfs

I'm building a application that needs to distribute a standard file server across a few sites over a WAN. Basically, each site needs to write a lot of misc files of varying size (some in the 100s MB range, but most small), and the application is written such that collisions aren't a problem. I'd like to have a system set up that meets the following qualifications:

  1. Each site can store files in a shared "namespace". That is, all the files would show up in the same filesystem.
  2. Each site would not send data over the WAN unless necessary. I.e., there would be local storage on each side of the WAN that would be "merged" into the same logical filesystem.
  3. Linux & Free ($$$) is a Plus

Basically, something like a central NFS share would meet most of the requirements, however it would not allow the locally written data to stay local. All data from remote sides of the WAN would be copied locally all the time.

I have looked into Lustre, and have run some successful tests with it, however, it appears to distribute files fairly uniformly across the distributed storage. I have dug through the documentation and have not found anything that automatically will "prefer" local storage over remote storage. Even something that went with the lowest latency storage would be fine. It would work most of the time, which would meet this application's requirements.


Some answers to some questions asked below:

  • Server nodes: 2 or 3 to start. Each server would have dozens of simultaneous reads/write clients connecting.
  • WAN Topology is full mesh and reliable. (large corporation, cost isn't as limiting as red tape)
  • Client failover: I actually hadn't thought about having the clients failover (mostly because our current appliction doesn't do this at just one site). I supposed the practicle answer is that the servers at each geographically distributed site are expected to be single points of failures for the clients they are serving. Though, if you are thinking about something specific here, I think it would be quite germane to the discussion.
  • Roll-my-own: I have thought about rsync/unison, however I would need quite a bit of fancy logic to make the "dynamic" part of this work seamlessly. I.e., file appears to be local, but is only retrieved on demand.
  • MS-DFS: It certainly appears to be something I should look into. My main issue would be potentially being unsure about NFS server configuration/reliability/performance on Windows, as many of the clients connecting are NFS clients.

Best Answer

Shame about the Linux requirement. This is exactly what Windows DFS does. Since 2003 R2, it does it on a block-level basis, too.