
我们的Mongodb几乎只写.在没有ZFS的副本上,当应用程序每隔30秒写入数据库并且中间没有磁盘活动时,磁盘完全忙于〜5s峰值,因此我将其作为比较的基准行为.
在使用ZFS的副本上,磁盘始终处于完全忙碌状态,副本需要与MongoDB主数据库保持同步.我在所有副本上都启用了lz4压缩,并节省了大量空间,因此磁盘上的数据应该少得多
所以在这些ZFS服务器上,我首先拥有默认的recordsize = 128k.然后我擦除数据并在重新同步Mongo数据之前设置recordsize = 8k.然后我再次擦拭并尝试了recordize = 1k.我还尝试了recordize = 8k而没有校验和
尽管如此,它并没有解决任何问题,磁盘始终保持100%的忙碌状态.
在recordize = 8k的一台服务器上只有一次,磁盘比任何非ZFS副本都忙得多,但在尝试不同的设置并再次尝试使用recordsize = 8k后,磁盘为100%,我无法看到之前的良好行为,并且也无法在任何其他副本上看到它.
此外,应该几乎只有写入,但在不同设置下的所有副本上看到,磁盘完全忙于75%的读取,只有25%的写入
(注意,我相信MongoDB是mmap的数据库.我被告知在AIO模式下尝试MongoDB,但我没有找到如何设置它,并且在运行MySQL InnoDB的另一台服务器上我意识到ZFSonLinux无论如何都不支持AIO.)
我的服务器是CentOS 6.5内核2.6.32-431.5.1.el6.x86_64.
SPL-0.6.2-1.el6.x86_64
ZFS-0.6.2-1.el6.x86_64
#PROD 13:44:55 root@rum-mongo-backup-1:~: zfs listNAME USED AVAIL REFER MOUNTPOINTzfs 216G 1.56T 32K /zfszfs/mongo_data-rum_a 49.5G 1.56T 49.5G /zfs/mongo_data-rum_azfs/mongo_data-rum_old 166G 1.56T 166G /zfs/mongo_data-rum_old#PROD 13:45:20 root@rum-mongo-backup-1:~: zfs list -t snapshotno datasets available#PROD 13:45:29 root@rum-mongo-backup-1:~: zfs list -o atime,devices,compression,copies,dedup,mountpoint,recordsize,casesensitivity,xattr,checksumATIME DEVICES COMPRESS COPIES DEDUP MOUNTPOINT RECSIZE CASE XATTR CHECKSUM off on lz4 1 off /zfs 128K sensitive sa off off on lz4 1 off /zfs/mongo_data-rum_a 8K sensitive sa off off on lz4 1 off /zfs/mongo_data-rum_old 8K sensitive sa off
可能会发生什么?我应该怎么看出ZFS正在做什么或哪个设置设置不当?
EDIT1:
硬件:这些是租用的服务器,Xeon 1230或1240,16或32GB RAM上的8个vcores,zfs_arc_max = 2147483648,使用HP硬件RAID1.所以ZFS zpool在/ dev / sda2上,并不知道有底层RAID1.即使是ZFS的次优设置,我仍然不明白为什么磁盘在读取时会阻塞,而DB只会写入.
我理解了很多原因,我们不需要在这里再次公开,这是坏的和坏的,…对于ZFS,我很快就会有一个JBOD / NORAID服务器,我可以使用ZFS自己的RAID1进行相同的测试在sda2分区上实现,使用/,/ boot和交换分区使用mdadm执行软件RAID1.
我的解决方案?!?
XFS在ZFS zvols之上.
为什么?!?
因为XFS运行良好并且消除了我在本机ZFS中遇到的特定于应用程序的问题. ZFS zvols允许我精简配置卷,添加压缩,启用快照并有效利用存储池.对我的应用程序来说更重要的是,zvol的ARC缓存减少了磁盘上的I / O负载.
看看你是否可以遵循这个输出:
# zpool status pool: vol0 state: ONLINE scan: scrub repaired 0 in 0h3m with 0 errors on Sun Mar 2 12:09:15 2014config: NAME STATE READ WRITE CKSUM vol0 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 scsi-SATA_OWC_Mercury_AccOW140128AS1243223 ONLINE 0 0 0 scsi-SATA_OWC_Mercury_AccOW140128AS1243264 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 scsi-SATA_OWC_Mercury_AccOW140128AS1243226 ONLINE 0 0 0 scsi-SATA_OWC_Mercury_AccOW140128AS1243185 ONLINE 0 0 0
ZFS zvol,使用以下命令创建:zfs create -o volblocksize = 128K -s -V 800G vol0 / pprovol(请注意,启用了自动快照)
# zfs get all vol0/pprovolNAME PROPERTY VALUE SOURCEvol0/pprovol type volume -vol0/pprovol creation Wed Feb 12 14:40 2014 -vol0/pprovol used 273G -vol0/pprovol available 155G -vol0/pprovol referenced 146G -vol0/pprovol compressratio 3.68x -vol0/pprovol reservation none defaultvol0/pprovol volsize 900G localvol0/pprovol volblocksize 128K -vol0/pprovol checksum on defaultvol0/pprovol compression lz4 inherited from vol0vol0/pprovol readonly off defaultvol0/pprovol copies 1 defaultvol0/pprovol refreservation none defaultvol0/pprovol primarycache all defaultvol0/pprovol secondarycache all defaultvol0/pprovol usedbysnapshots 127G -vol0/pprovol usedbydataset 146G -vol0/pprovol usedbychildren 0 -vol0/pprovol usedbyrefreservation 0 -vol0/pprovol logbias latency defaultvol0/pprovol dedup off defaultvol0/pprovol mlslabel none defaultvol0/pprovol sync standard defaultvol0/pprovol refcompressratio 4.20x -vol0/pprovol written 219M -vol0/pprovol snapdev hidden defaultvol0/pprovol com.sun:auto-snapshot true local
ZFS zvol块设备的属性. 900GB卷(磁盘上实际大小为143GB):
# fdisk -l /dev/zd0Disk /dev/zd0: 966.4 GB, 966367641600 bytes3 heads, 18 sectors/track, 34952533 cylindersUnits = cylinders of 54 * 512 = 27648 bytesSector size (logical/physical): 512 bytes / 131072 bytesI/O size (minimum/optimal): 131072 bytes / 131072 bytesDisk identifier: 0x48811e83 Device Boot Start End Blocks Id System/dev/zd0p1 38 34952534 943717376 83 Linux
ZFS块设备上的XFS信息:
# xfs_info /dev/zd0p1meta-data=/dev/zd0p1 isize=256 agcount=32, agsize=7372768 blks = sectsz=4096 attr=2, projid32bit=0data = bsize=4096 blocks=235928576, imaxpct=25 = sunit=32 swidth=32 blksnaming =version 2 bsize=4096 ascii-ci=0log =internal bsize=4096 blocks=65536, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0
XFS挂载选项:
# mount/dev/zd0p1 on /ppro type xfs (rw,noatime,logbufs=8,logbsize=256k,nobarrier)
注意:在某些情况下,我也会在HP Smart Array硬件RAID之上执行此操作.
池创建如下:
zpool create -o ashift=12 -f vol1 wwn-0x600508b1001ce908732af63b45a75a6b
结果如下:
# zpool status -v pool: vol1 state: ONLINE scan: scrub repaired 0 in 0h14m with 0 errors on Wed Feb 26 05:53:51 2014config: NAME STATE READ WRITE CKSUM vol1 ONLINE 0 0 0 wwn-0x600508b1001ce908732af63b45a75a6b ONLINE 0 0 0