Hi,
I'm looking for a write one, read many file synchronization, file system or similar technique. In fact I want a to imitate a zfs_send/zfs_receive similar behaviour on Linux. My requirements are pure local (or in terms of distributed file systems: rack-aware) file handling with remote synchronization. Some random features/requirements I want to achieve are (I use the terms file and "file system" here interchangeable, as I don't care wheter I have to synchronize file based or use full file system supporting that):
- Access on files from a specific host is pure local, i.e. the node has a full copy of a file, no parts are distributed.
- Read and write access is local, the remote side gets synchronized with write changes only
- Write changes on the remote side are non-blocking and asynchronous
- No need for concurrent file access, concurrent, distributed locking and so on
- Every file is changed by a single node only, other nodes have read access
- The file "owner", thus the node allowed to write files must be changeable
Similar techniques (some as technology concept, not usable for me) exist, among those DRBD, MySQL Replication or even pure rsync.
I don't care whether I'm referring to a pure local solution (i.e. between two block devices) or a client/server mode. DRBD won't fit because its a peer to peer solution, I need to synchronize a lot of clients with a central storage through that way where DRBD just mirrors from peer to peer among two nodes and doesn't allow another node to take over the role of the primary node (i.e. node A is master, storage B secondary, I want to change to a thrid node C which becomes master and receives hence a full update from storage B.
Just as a guess, I'd make a local LVM volume on every node where write access happens. In the same time there exists a iSCSI target with multipath to a remote hosts which is shared with every node, again providing a clustered LVM. So I'd need to synchronize a local LVM volume with a remote LVM image. The question is just by which technique I could achieve that (i.e. as RAID 0, where every read and write goes to one node only and doesn't wait the other node to succeed). I
could achieve this with rsync by a cyclic push to the remote host, but the problem is, that rsync isn't block based thus I'd need to synchronize every time the whole file, not only changes.
To illustrate my demand:
http://img839.imageshack.us/img839/4914/storaged.png
(I'm sorry if my question fits better in the Linux Enterprise forum. If so, please move)