I'm a developer...treading here on foreign terrain. Please pardon any naivete.
I work on an application that stores data both in a database and the filesystem.
Context: Clustering and Network Shares
In the past when we ran the application clustered (i.e. multiple application servers fronting the data), we have handled the filesystem as follows:
- Node A : shares the "data directory " (via samba or nfs)
- Nodes B,C,D, etc: mounts the "network share" and uses that at its "data directory"
Reduced "disk speed" for nodes B,C,D was suboptimal, but not a big problem.
Also note: The application uses its own file locking mechanism. Concurrent writes are not a problem.
The Questions
So in a modern data center fibre-channel connects servers to SANS, what's the best way to share a "hunk of disk" amongst several servers ?
Is such 'disk sharing' widely used?
Any OS-specific concerns ("works on linux, but not available on Windows")
Any caveats? Hard to configure, unreliable, etc?
I have heard a lot of "we can't do that" from our sysadmins ..which finally when I asked more details, they said "well, technically it's possible, but it's not how we do it here"
thanks in advance,
Update: Thanks for the answers. (They were all good: i had to pick one. Sorry if it wasn't yours) Just as I had (somewhat) expected: my hopes that you could simply attach NTFS or XFS or whatever "regular" filesystem to the same 'hunk of 'disk' proved naive. Clustered filesystem is the ticket. And fancy filesystems aren't on our hosting team's top priorities).
Answer
"well, technically it's possible, but it's not how we do it here"
That sounds quite a lot like what I regularly tell developers ;)
From an enterprise operational perspective you want as much as possible that applications use standard repeatable solutions. If your application doesn't need/warrant special treatment you're not going to get it. Non-standard solutions require specialised skills, more expensive or simply more equipment and if it's "state-of-the-art" failures are often catastrophic as well.
For many applications a (highly available) file share is still a very suitable and commonly deployed solution.
Common HA alternate solutions to using a file-share are:
Do not store files on file-systems but use a highly available database and store them as BLOB's instead. A very common approach. Often you already need a database anyway and this makes application servers almost stateless, solves a lot of locking, replication, HA, consistency and access problems by shifting them to the database layer, where a lot of those problems are old news, well understood and solved. It can be expensive to maintain though once you reach (a sizeable fraction of) the petabyte range.
A proper clustered file-system, that allows concurrent read-write block-level access to your shared storage over Fiber Channel or iSCSI. Enterprise storage arrays tend to be pretty expensive but this can scale very well. Often the cluster file system requires (expensive) licensing for each node for the cluster FS software. Also quite common in enterprise environments for specialised applications.
Use a distributed object store. This is the more open source solution, with low-end commodity hardware, creating redundancy and scalability in the software. This is a common "cloud" approach.
Comments
Post a Comment