[Gluster-users] AFR/replicate questions

Keith Freedman freedman at FreeFormIT.com
Fri Jan 30 21:20:36 UTC 2009


At 04:20 AM 1/30/2009, Barnaby Gray wrote:
>I'm in the process of setting up server-side AFR with 2 servers in
>separate data centres, separated by a WAN. Writes will be relatively
>few, so we can live with the performance limitations of the WAN.
>
>I noticed unexpected performance though when listing directories of
>around 1k files with ls -al. It looks like for this operation server1 is
>sending traffic to server2 in the other data centre, which for a
>read-only operation I wasn't expecting.

anytime a directory is accessed, gluster/replicate checks with the 
other server to see if the information it has is current.
It does this because if something changed on the other machine it 
might not have known about it.  If something has changed, it auto-heals.

Since gluster doesn't cache information about the other machines in a 
replicate group, it has to do this everytime.

>tshark shows a reasonable amount of traffic that looks related to xattr:
>lots of mentions of filenames and 'trusted.glusterfs.afr.metadata-pending'.
>
>I'm using the "option read-subvolume local" to point read operations to
>the volume local to either server.

this means.   Once it's determined that my version of the file is the 
most up to date, then serve it from my disk (or my favorite server in 
a client-server model) which is faster than streaming it over the network.

>Have tried both with and without the performance translators client-side
>to no avail. We're using 2.0.0rc1.

I dont suspect any performance translator can help with this 
particular situation.  Gluster HAS to insure that it's delivering the 
most up to date version of a file, in order to do that, upon any file 
request, it has to collaborate with other replicate servers to find out.

>Apologies if this is an obvious question - can someone spot what I'm
>doing wrong?

one might think, "well, both servers haven't lost connections with 
eachother, so they should be able to assume they're in sync," but 
this isn't necessarily the case because you can't know the 
configuration on the other end.

there may be a situation where Server A decided Server B was down 
because of a network latency, so it wrote and updated a file but 
didn't replicate it to Server A.  Server B goes to read that file, if 
it assumes that all has been well with Server A and doesn't bother 
checking then it will serve the wrong version of the file.

The only way to resolve this would be to make server B responsible 
for notifying server A  when it re-establishes a connection to 
it.   While this seems logical and would improve performance for your 
case, this would require some sort of journaling on server B.  This 
would be terribly inefficient and would require an additional journal 
filesystem, or modifying the underlying filesystem in a some 
way.  Then there's the case of changing architecture.   If you have 
10 servers in your replicate group, you have to run a journal for all 
10,  lets say you just shut 5 of them off forever, you'd then need a 
way to clear out the journal for those so that space isn't wasted.

So given that gluster wants to be non-intrusive

>cheers,
>
>Barnaby
>
>_______________________________________________
>Gluster-users mailing list
>Gluster-users at gluster.org
>http://zresearch.com/cgi-bin/mailman/listinfo/gluster-users





More information about the Gluster-users mailing list