I'm looking for a distributed, fault-tolerant network storage system which exposes block devices (not filesystems) on the clients. Matching my requirements I only found ceph's rdb, but it's still very experimental as far as I know. So I'm thinking about implementing the system myself using nbd and the design of moosefs, http://www.moosefs.org/, which is quite simple (the single point of failure master server is ok for me).
But there's a question left: I read nbd can easily be deadlocked when not properly dealt with memory requests:
when the system is short of memory, it tries to write back dirty pages. So the nbd client asks the nbd server to write back data, but as nbd-server is a userland process, it may require creating dirty pages to fullfill the request.
I suppose this is still an issue? Should it be possible to work around those problems completely if my userland programs allocate all memory needed upfront and I mlock them? Or is there anything else to take care of?
What do you think of my idea at all? Did I miss anything?