<html><body><div style="font-family: garamond,new york,times,serif; font-size: 12pt; color: #000000"><div><br></div><div><br></div><hr id="zwchr"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>From: </b>"Shyam" &lt;srangana@redhat.com&gt;<br><b>To: </b>"Krutika Dhananjay" &lt;kdhananj@redhat.com&gt;<br><b>Cc: </b>"Aravinda" &lt;avishwan@redhat.com&gt;, "Gluster Devel" &lt;gluster-devel@gluster.org&gt;<br><b>Sent: </b>Wednesday, September 2, 2015 11:13:55 PM<br><b>Subject: </b>Re: [Gluster-devel] Gluster Sharding and Geo-replication<br><div><br></div>On 09/02/2015 10:47 AM, Krutika Dhananjay wrote:<br>&gt;<br>&gt;<br>&gt; ------------------------------------------------------------------------<br>&gt;<br>&gt; &nbsp; &nbsp; *From: *"Shyam" &lt;srangana@redhat.com&gt;<br>&gt; &nbsp; &nbsp; *To: *"Aravinda" &lt;avishwan@redhat.com&gt;, "Gluster Devel"<br>&gt; &nbsp; &nbsp; &lt;gluster-devel@gluster.org&gt;<br>&gt; &nbsp; &nbsp; *Sent: *Wednesday, September 2, 2015 8:09:55 PM<br>&gt; &nbsp; &nbsp; *Subject: *Re: [Gluster-devel] Gluster Sharding and Geo-replication<br>&gt;<br>&gt; &nbsp; &nbsp; On 09/02/2015 03:12 AM, Aravinda wrote:<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Geo-replication and Sharding Team today discussed about the approach<br>&gt; &nbsp; &nbsp; &nbsp;&gt; to make Sharding aware Geo-replication. Details are as below<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Participants: Aravinda, Kotresh, Krutika, Rahul Hinduja, Vijay Bellur<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; - Both Master and Slave Volumes should be Sharded Volumes with same<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp;configurations.<br>&gt;<br>&gt; &nbsp; &nbsp; If I am not mistaken, geo-rep supports replicating to a non-gluster<br>&gt; &nbsp; &nbsp; local FS at the slave end. Is this correct? If so, would this<br>&gt; &nbsp; &nbsp; limitation<br>&gt; &nbsp; &nbsp; not make that problematic?<br>&gt;<br>&gt; &nbsp; &nbsp; When you state *same configuration*, I assume you mean the sharding<br>&gt; &nbsp; &nbsp; configuration, not the volume graph, right?<br>&gt;<br>&gt; That is correct. The only requirement is for the slave to have shard<br>&gt; translator (for, someone needs to present aggregated view of the file to<br>&gt; the READers on the slave).<br>&gt; Also the shard-block-size needs to be kept same between master and<br>&gt; slave. Rest of the configuration (like the number of subvols of DHT/AFR)<br>&gt; can vary across master and slave.<br><div><br></div>Do we need to have the sharded block size the same? As I assume the file <br>carries an xattr that contains the size it is sharded with <br>(trusted.glusterfs.shard.block-size), so if this is synced across, it <br>would do. If this is true, what it would mean is that "a sharded volume <br>needs a shard supported slave to ge-rep to".<br></blockquote><div>Yep. Even I feel it should probably not be necessary to enforce same-shard-size-everywhere as long as shard translator on the slave takes care not to further "shard" the individual shards gsyncD would write to, on the slave volume.<br></div><div>This is especially true if different files/images/vdisks on the master volume are associated with different block sizes.<br></div><div>This logic has to be built into the shard translator based on parameters (client-pid, parent directory of the file being written to).<br></div><div>What this means is that shard-block-size attribute on the slave would essentially be a don't-care parameter. I need to give all this some more thought though.<br></div><div><br></div><div>-Krutika<br></div><div><br></div><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">&gt;<br>&gt; -Krutika<br>&gt;<br>&gt;<br>&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; - In Changelog record changes related to Sharded files also. Just<br>&gt; &nbsp; &nbsp; like<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp;any regular files.<br>&gt; &nbsp; &nbsp; &nbsp;&gt; - Sharding should allow Geo-rep to list/read/write Sharding internal<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp;Xattrs if Client PID is gsyncd(-1)<br>&gt; &nbsp; &nbsp; &nbsp;&gt; - Sharding should allow read/write of Sharded files(that is in<br>&gt; &nbsp; &nbsp; .shards<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp;directory) if Client PID is GSYNCD<br>&gt; &nbsp; &nbsp; &nbsp;&gt; - Sharding should return actual file instead of returning the<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp;aggregated content when the Main file is requested(Client PID<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp;GSYNCD)<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; For example, a file f1 is created with GFID G1.<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; When the file grows it gets sharded into chunks(say 5 chunks).<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;f1 &nbsp; G1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;.shards/G1.1 &nbsp; G2<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;.shards/G1.2 &nbsp; G3<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;.shards/G1.3 &nbsp; G4<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;.shards/G1.4 &nbsp; G5<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; In Changelog, this is recorded as 5 different files as below<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;CREATE G1 f1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;DATA G1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;META G1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;CREATE G2 PGS/G1.1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;DATA G2<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;META G1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;CREATE G3 PGS/G1.2<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;DATA G3<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;META G1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;CREATE G4 PGS/G1.3<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;DATA G4<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;META G1<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;CREATE G5 PGS/G1.4<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;DATA G5<br>&gt; &nbsp; &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp;META G1<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Where PGS is GFID of .shards directory.<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Geo-rep will create these files independently in Slave Volume and<br>&gt; &nbsp; &nbsp; &nbsp;&gt; syncs Xattrs of G1. Data can be read only when all the chunks are<br>&gt; &nbsp; &nbsp; &nbsp;&gt; synced to Slave Volume. Data can be read partially if main/first file<br>&gt; &nbsp; &nbsp; &nbsp;&gt; and some of the chunks synced to Slave.<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Please add if I missed anything. C &amp; S Welcome.<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; regards<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Aravinda<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; On 08/11/2015 04:36 PM, Aravinda wrote:<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; Hi,<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; We are thinking different approaches to add support in<br>&gt; &nbsp; &nbsp; Geo-replication<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; for Sharded Gluster Volumes[1]<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; *Approach 1: Geo-rep: Sync Full file*<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- In Changelog only record main file details in the same brick<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; where it is created<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- Record as DATA in Changelog whenever any addition/changes<br>&gt; &nbsp; &nbsp; to the<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; sharded file<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- Geo-rep rsync will do checksum as a full file from mount and<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; syncs as new file<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- Slave side sharding is managed by Slave Volume<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; *Approach 2: Geo-rep: Sync sharded file separately*<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- Geo-rep rsync will do checksum for sharded files only<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- Geo-rep syncs each sharded files independently as new files<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- [UNKNOWN] Sync internal xattrs(file size and block count)<br>&gt; &nbsp; &nbsp; in the<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; main sharded file to Slave Volume to maintain the same state as<br>&gt; &nbsp; &nbsp; in Master.<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- Sharding translator to allow file creation under .shards<br>&gt; &nbsp; &nbsp; dir for<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; gsyncd. that is Parent GFID is .shards directory<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- If sharded files are modified during Geo-rep run may end up<br>&gt; &nbsp; &nbsp; stale<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; data in Slave.<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; &nbsp; &nbsp;- Files on Slave Volume may not be readable unless all sharded<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; files sync to Slave(Each bricks in Master independently sync<br>&gt; &nbsp; &nbsp; files to<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; slave)<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; First approach looks more clean, but we have to analize the Rsync<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; checksum performance on big files(Sharded in backend, accessed<br>&gt; &nbsp; &nbsp; as one<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; big file from rsync)<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; Let us know your thoughts. Thanks<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; Ref:<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; [1]<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; http://www.gluster.org/community/documentation/index.php/Features/sharding-xlator<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; --<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; regards<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; Aravinda<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; _______________________________________________<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; Gluster-devel mailing list<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; Gluster-devel@gluster.org<br>&gt; &nbsp; &nbsp; &nbsp;&gt;&gt; http://www.gluster.org/mailman/listinfo/gluster-devel<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; &nbsp;&gt; _______________________________________________<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Gluster-devel mailing list<br>&gt; &nbsp; &nbsp; &nbsp;&gt; Gluster-devel@gluster.org<br>&gt; &nbsp; &nbsp; &nbsp;&gt; http://www.gluster.org/mailman/listinfo/gluster-devel<br>&gt; &nbsp; &nbsp; &nbsp;&gt;<br>&gt; &nbsp; &nbsp; _______________________________________________<br>&gt; &nbsp; &nbsp; Gluster-devel mailing list<br>&gt; &nbsp; &nbsp; Gluster-devel@gluster.org<br>&gt; &nbsp; &nbsp; http://www.gluster.org/mailman/listinfo/gluster-devel<br>&gt;<br>&gt;<br></blockquote><div><br></div></div></body></html>