一组NFS和OCFS2的对比数据
[测试环境]
两台DELL PowerEdge R420服务器,分别配置2 颗Intel E5-2620处理器(6 个核心,12个线程),24 GB内存,2 块300GB的15000转SAS硬盘做RAID1。一台DELL MD3200磁盘阵列,配置10块300GB的15000转SAS硬盘做RAID5。将磁盘阵列的存储空间划分为两块,一块750 GB通过SAS线缆连接到服务器A,另一块750 GB通过SAS线缆连接到服务器B。两台服务器均运行64位Ubuntu 12.04服务器版操作系统,通过KVM进行虚拟化。两台服务器之间通过万兆交换机提供网络连接。
服务器A 将来自磁盘阵列的存储空间/dev/sdb挂载为本机上的/nfs目录,并在此基础上提供NFS服务。服务器B 通过NFS客户端将来自服务器A 的/nfs目录挂载为本机上的/nfs目录。
服务器B 安装iSCSI TGT服务,将来自磁盘阵列的存储空间/dev/sdb通过iSCSI协议暴露到局域网。服务器A 和服务器B 均通过open-iscsi将如上所述iSCSI目标发现为本机上的/dev/sdc。在服务器A 和服务器B 上通过配置OCFS2集群文件系统共享同一个块设备,且都挂载为本机上的/tgt目录。
[测试方法]
利用iozone软件分别测试服务器A 上的/目录(本地磁盘)和/nfs目录(磁盘阵列)、服务器B 上的/nfs目录(NFS共享文件系统)和/tgt目录(OCFS2集群文件系统)、以及运行在NFS和OCFS2上的虚拟机/目录的文件IO性能进行测试。虚拟机的配置为4 个处理器核,4 GB内存,10 GB磁盘,运行64位Ubuntu 12.04服务器版,磁盘和网卡都启用了virtio,并且设置虚拟机磁盘缓存参数为cache=”none”。在对虚拟机进行测试的时候,虚拟机运行在计算节点B 上。
测试参数:
$ ./iozone -Mcew -i0 -i1 -s3g -r256k -f [file_name]
[测试结果]
测试环境 | write | rewrite | read | reread |
服务器A | 本地硬盘 | 168123 | 177677 | 3775577 | 6146712 |
服务器A | 磁盘阵列 | 312041 | 335915 | 3566998 | 5952576 |
服务器B | NFS共享文件系统 | 246113 | 285600 | 3798812 | 5695323 |
服务器B | OCFS2集群文件系统 | 250326 | 300573 | 5193533 | 5346467 |
虚拟机 | NFS | 189379 | 238361 | 3534514 | 6041784 |
虚拟机 | OCFS2 | 108236 | 213260 | 3582519 | 4949598 |
基于这个特定的试验环境,有三个小小的发现:
(1)基于磁盘阵列的NFS共享文件系统与OCFS2集群文件系统的文件IO性能在同一水平线上。
(2)NFS共享文件系统的性能可以达到磁盘阵列性能的80%左右。
(3)运行在NFS上的虚拟机比运行在OCFS2上的虚拟机似乎具有更好的文件IO性能,原因待进一步研究。
[测试结果]
后续工作,找几个更大的测试环境,弄两台真正的IP SAN和FC SAN进行对比测试。
我觉得OCFS2可能是为oracle数据库的使用做了优化, 比如对于8K或以上的块更友好。 但是虚拟机软件可能都是读小文件, 这个OCFS2可能不擅长…
不一定。虚拟机磁盘映像文件是个大文件。