首先说两个关键知识点,供大家参考:

1.glusterfs 3.x.x版本后,客户端不再存储配置文件。客户端依靠nfs协议(或gluster native协议)动态的从服务端获取卷的信息。

2.与其它分布式存储不同,如果你建立的是复制卷,gluster客户端会并发的向几个服务器写入\读取数据,而不是通过服务器之间进行数据的传输。

接下来介绍两个测试时可能会用到的工具:

1.iozone:文件系统的benchmark工具,测试不同文件系统的读写性能。具体使用方法可以参考网上资料相关的介绍。

2.nethogs:可以监控每个进程的网络带宽占用情况。

进入正题,开始我们的性能测试及优化工作吧。先来介绍一下配置文件中与性能相关的参数。

performance/quick-read:优化读取小文件的性能。

performance/read-ahead:用预读的方式提高读取的性能,有利于应用频繁持续性的访问文件,当应用完成当前数据块读取的时候,下一个数据块就已经准备好了。

performance/write-behind:在写数据时,先写入缓存内,再写入硬盘,以提高写入的性能。

performance/io-threads:由于glusterfs服务是单线程的,使用IO线程转换器可以较大的提高性能。

performance/io-cache:缓存已经被读过的数据,以提高IO性能,当IO缓存中继检测到有写操作的时候,它就会把相应的文件从缓存中删除。

具体的配置可参考:http://www.gluster.org/community/documentation/index.php/Translators

千兆网环境下,8台物理服务器(32GB内存)组成的glusterfs server,建立复制卷(replicate volume),如下图所示

glusterfs性能优化_第1张图片

下面开始我们的测试:



1.定义测试文件大小为32GB,每条记录大小1MB,进行单线程的读写测试,同时生成存储测试结果的excel文件


iozone-s 32g -r 1m -i 0 -i 1 -f /data/gluster_test/iozone -Rb /mnt/test_iozone.xls

2.定义测试文件大小为32GB,每条记录大小1MB,进行8线程并发读写测试,同时生成存储测试结果的excel文件

iozone -s 32g -r1m -i 0 -i 1 -f /data/gluster_test/iozone –t 8 -Rb /mnt/test_iozone.xls

测试结果如下

glusterfs性能优化_第2张图片

glusterfs性能优化_第3张图片


可以看到,在千兆网络环境,默认配置下,Glusterfs读取性能还是不错的,可以达到100MB/s。写性能30MB/s,还有较大的提升空间。使用一些Translator进行优化后,写性能有了较大的提升,基本可以达到60MB/s,这个速度还是可以接受的。

后面在client端和server端做了一些优化。server端主要是增加io-threads这个Translator,client端主要是增加io-cache,write-behind,read-ahead,quick-read这些Translator。

Client端:

glusterfs性能优化_第4张图片

Server端:

glusterfs性能优化_第5张图片

优化后带宽基本被跑满,优化前后性能对比如下图:

glusterfs性能优化_第6张图片

glusterfs性能优化_第7张图片

通过一步步的优化过程,个人发现write-behind对性能的提升效果最明显


转:http://blog.csdn.net/qiuhan0314/article/details/39672877