许多文件的gluster性能

时间:2018-04-21 14:15:47

标签: rsync glusterfs

只是想知道这种表现是否正常。我正在将dir(大约20 gb的图像)发送到gluster卷(3个节点,3个副本,同一个数字海洋数据中心的每个节点)。

rsync --info=progress2 -r /var/www/app/_appdata/ /mnt
    251,670,295  62%  716.84kB/s    0:05:42 (xfr#5708, ir-chk=1257/7830)

当我只复制一个大文件时,我的速度大约为30 MB /秒。

当我复制一个包含许多文件的目录时,我得到大约700 kB / s

任何想法为什么它对于许多文件来说都慢得多?

1 个答案:

答案 0 :(得分:1)

对于GlusterFS,Rsync的工作量特别艰巨,因为默认情况下,Rsync会对GlusterFS进行一些最坏的操作。因此,要从rsync获得最佳性能,就需要双方进行一些调整/调整。

接下来描述当Rsync和GlusterFS一起工作时,性能提高的痛点。

第一个

rsync和GlusterFS的主要问题是rsync在创建文件时使用“先写后重命名”的习惯用法。这意味着对于每个创建的文件,GlusterFS被迫重命名该文件,这是迄今为止最昂贵的文件操作(FOP)。 Gluster开发人员添加了两个可调参数来帮助解决此工作负载:

例如,rsync和类似工具经常使用“先写入然后重命名”的习惯用法,其中文件“ xxx”实际上写为“ .xxx.1234”,然后仅在内容包含被完全写成。为了使此过程更有效,DHT使用正则表达式将文件名的永久部分(在本例中为“ xxx”)与可能是临时部分(前导“。”和后缀“ .1234”)分开。 )。这样,文件重命名后将位于正确的哈希位置-如果“ xxx”和“ .xxx.1234”的哈希不同,则不会存在该哈希位置-不需要链接文件或广播查找。

实际上,有两个正则表达式可用于此目的– cluster.rsync-hash-regexcluster.extra-hash-regex。顾名思义,rsync-hash-regex默认为正则表达式使用的模式,而用户可以设置extra-hash-regex以使用相同的临时文件惯用语来支持第二个工具。

第二个

Rsync的默认请求大小很小,这也是GlusterFS的弱点。 GlusterFS往往在请求大小超过64KB时表现最佳; 1MB倾向于提供最佳性能。请求大小小于4KB时,情况实际上开始恶化。 Rsync确实具有更改此行为的可调参数。称为block-size。 Rsync的默认块大小为2KB,这在与GlusterFS进行同步时确实会影响性能。例如:

# rsync -vrah /gluster-mount/ /home/bturner/Downloads/ --progress -B=131072

您还可以查看以下选项(请参见rsync手册页):

-W, --whole-file

This option disables rsync’s delta-transfer algorithm, which causes all 
transferred files to be sent whole. The transfer may be faster if this
option is used when the bandwidth between the source and destination
machines is higher than the bandwidth to disk (especially when the “disk”
is actually a networked filesystem). This is the default when both
the source and destination are specified as local paths, but only if
no batch-writing option is in effect.

第三

--inplace选项。该选项的行为与上述rsync regex选项类似,不同之处在于它是在rsync端而不是GlusterFS端实现的。以下信息来自手册页:

–inplace update destination files in-place

This option changes how rsync transfers a file when its data needs to be
updated: instead of the default method of creating a new copy of the file
and moving it into place when it is complete, rsync instead writes
the updated data directly to the destination file.

查看更多here