FreeNAS 硬件指南③:存储池、性能与缓存

2015-2-25 23:34 Herald 8077 FreeNAS硬件硬件指南

ZFS 存储池配置

ZFS存储池由vdev(虚拟设备)组成。vdev可以模拟单个硬盘(类似RAID0)、可以组成多路镜像(类似RAID1)、RAIDZ (类似RAID5)、RAIDZ2 (类似RAID6)、RAIDZ3 (提供三重奇偶校验,硬RAID无法模拟此种阵列类型)。

你需要了解的重点是ZFS vdev的IOPS性能等于vdev中的一个磁盘设备的IOPS性能。比如你创建了由10块硬盘组成的RAIDZ2阵列,可用空间为8块硬盘,存储池的IPOS性能为阵列中一块硬盘的性能。对于数据库服务器和虚拟化平台,IOPS性能至关重要,这种场景中很少执行连续写操作,因此用大量的多路镜像或多个小型RAIDZ组是很好的选择。相反的,较大的RAIDZ[1|2|3] vdev则很适合单用户连续读写。对于大多数家庭媒体服务器来说,考虑用3-8块独立硬盘组成 RAIDZ[1|2|3] vdev 存储池则比较好。

freenas-volumes-1024x575

这里要特别注意 RAIDZ1。比如一个由10块硬盘组成的RAIDZ1 vdev,其中一块硬盘发生了错误,该存储池能否正常运转,取决于另外9块硬盘是否完好。现在的硬盘容量越来越大,阵列重建所需的时间变得越来越长,同时,重建阵列的过程中所有硬盘I/O都将增加,这种压力会导致阵列中原有硬盘也发生错误或损坏。由于RAIDZ1阵列降级后无法承受额外的错误,重建阵列非常容易导致阵列彻底损坏。

ZIL 写缓存设备

ZFS可以将专门的设备用作ZIL(ZFS日志),用于同步写操作。关键需要知道的是内存中始终存在ZIL。如果你使用一个专门的设备,则该设备与内存中的ZIL彼此互做镜像,同时也与存储池做镜像。通过使用SSD固态硬盘作为ZIL日志设备,可以有效减少存储池的延迟。当ZFS被释放时,专用ZIL设备对保证数据完整性至关重要。ZIL vdev 丢失会导致整个存储池不可用。旧版ZFS,必须通过ZIL之间互做镜像来保护存储池的数据完整性。新版本则无关紧要,丢失ZIL vdev 设备会影响系统性能,但不会导致存储池不可用。需要特别注意的事情是,专用ZIL设备仅仅是与内存中得真实ZIL互做镜像,只有ZIL设备错误和执行写操作时系统崩溃才会导致数据丢失。当专用ZIL日志设备发生错误时,内存中的ZIL会自动与存储池做镜像。固态硬盘本身具备并不稳定的读缓存,这可能会导致在非法关机时丢失数据,因此使用SSD固态硬盘做专用ZIL设备,则应该考虑固态硬盘的电源保护。同时,专用ZIL设备应该考虑做多路镜像。

L2ARC 读缓存设备

ZFS允许装配专门用于写缓存的设备。通常,这种设备比系统主存储池的延迟更低。注意,最主要的读缓存是系统中的内存,它要比任何SSD设备的速度都快。条件允许,为系统增加更多的内存要比用SSD作读缓存的性能更好,增加L2ARC读缓存有时甚至会降低系统性能。比如6GB内存用作ARC(一级读缓存),数据集为5.9GB,读缓存命中率会接近100%,为这个系统额外增加L2ARC(二级读缓存),L2ARC需要额外耗费内存空间来映射其地址空间,ARC命中率会降低。

简言之,并不是所有系统都能从L2ARC上受益。FreeNAS提供了GUI工具和命令行工具用来检查ARC的大小和命中率。如果ARC的大小超过了内存允许的最大值且命中率低于90%,则该系统适合添加L2ARC读缓存设备。如果ARC的大小小于内存或命中率大于90%,增加L2ARC设备则不会提升系统性能。选择用作L2ARC读缓存的设备,应倾向于随机读性能更好的设备。因为存储在L2ARC上的数据并不是持续存在的,同时ZFS会良好的处理L2ARC设备错误,因此不需要为L2ARC设备做镜像或其他冗余处理,同时也没必要为该设备做电源保护。

作者:Josh Paetzel  翻译整理:Herald

{{ headers["x-wp-total"] }} 条评论

{{ post_id = '870' }}

回复 {{ reply_to }}