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).
"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 href="https://serverfault.com/questions/263694/why-is-enterprise-storage-so-expensive">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