首先说两个关键知识点,供大家参考:
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),如下图所示
下面开始我们的测试:
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 �Ct 8 -Rb /mnt/test_iozone.xls
测试结果如下
可以看到,在千兆网络环境,默认配置下,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端:
Server端:
优化后带宽基本被跑满,优化前后性能对比如下图:
通过一步步的优化过程,个人发现write-behind对性能的提升效果最明显
转:http://blog.csdn.net/qiuhan0314/article/details/39672877