目录

ZFS最佳实践指南

(注:本文目前的写作背景是Solaris 10 以及 OpenSolaris,但同样对FreeBSD具有参考作用,

原文请参见:http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide

原文2007年11月12日更新

1 ZFS管理事项

1.1 ZFS存储池建议

本节描述了配置ZFS存储池的通用建议。

1.1.1 系统

1.1.1.1 内存与交换空间

1.1.2 存储池

# zpool create tank mirror c1t0d0 c2t0d0
# zpool create tank mirror c1t0d0 c2t0d0 spare c1t1d0 c2t1d0

1.1.2.1 简单的或条带化的存储池限制

简单的或条带化的存储池有一些应被考虑的限制。

# zpool add tank c2t2d0
# zpool replace tank c0t2d0 c2t2d0
# zpool replace tank c0t2d0         ### 错误:不能再创建数据因为不存在冗余

# zpool replace tank c0t2d0 c2t2d0  ### ok

1.1.3 多个存储池于同一系统

1.1.3 根存储池建议

若您正在使用ZFS根文件系统(root file system),请保持根存储池(即存储池的数据集是被分配给根文件系统的)与用于数据的存储池分开。 关于这一策略存在几个理由:

给我们当前分配的作为单独的文件系统(例如:根,/usr和/var)配置不同的存储池根本不合理。这或许都不是一个所支持的配置。对于这些目录有单独的数据集倒是可能,但只能在同一个存储池中。 关于ZFS和SVM镜像的根内容,请参见UFS/SVM节。

1.2 存储池性能事项

1.2.1 通用存储池性能事项

1.2.1.1 单独日志设备

ZFS intent log(ZIL,ZFS意图日志)符合POSIX的同步事务(synchronous transactions)的要求。例如,数据库从系统调用返回时常常需要其事务要在稳定的存储设备上。在默认情况下,intent log从主存储池中分配块。然而,若使用独立的intent log设备,其可能会获得更佳的性能,像NVRAM或专用磁盘。请确定是否一个单独的日志设备适合您的环境:

1.2.1.2 内存与动态重构(Dynamic Reconfiguration)建议

ZFS的自适应置换高速缓存(Adaptive Replacement Cache,ARC)试图使用最多的系统可用内存来缓存文件系统数据。默认是使用除了1GB以上的所有的物理内存。当内存压迫性增长时,ARC会放弃内存。 请在如下情形时考虑限制最大ARC内存的使用范围:

这些限制内存使用范围的方式被认为会使ARC不能缓存更多的文件系统数据,这可能会对性能有所影响。 总之,若内存既没被ZFS使用也没被其他系统组件使用,限制ARC则是浪费资源的。注意非ZFS文件系统通常仍会设法使用系统的空闲内存来缓存数据。 调节ARC的详细信息,请参考如下段落: http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide#Limiting_the_ARC_Cache

1.2.2 RAID-Z配置要求及建议

一个以N块X大小和P个奇偶校验磁盘的RAID-Z配置可以拥有大约(N-P)×X的字节并能承受P个设备故障而不破坏数据完整性。

1.2.3 镜像配置建议

1.2.3 我应该配置RAID-Z、RAID-Z2还是镜像存储池?

通常需要考虑的是您的目标是最大磁盘空间还是最优性能

为获得更好的性能,在大量的、不可缓存的、随机读取负载上,镜像配置要显著的胜于RAID-Z配置。 关于RAIDZ所需注意事项的更多信息,请参考如下blog: WHEN TO (AND NOT TO) USE RAID-Z

1.2.4 RAID-Z配置举例

例如在Tunmper上的RAID-Z配置,将c3t0和c3t4(磁盘0和1)镜像作为您的根存储池,剩下的46块可用磁盘用于用户数据。如下的raidz2配置举例说明了如何配置剩下的46块盘:

1.3 ZFS迁移事项

1.3.1 ZFS与分区技术(Zone)

当在安装有区域(zone)的Solaris系统上使用ZFS数据集(dataset)时请牢记如下几点:

想要了解区域使用ZFS的更多信息,请参见如下FAQ条目: [1](http://opensolaris.org/os/community/zones/faq/#cfg_zfsboot

1.3.2 UFS/SVM

当下,您不能在当前的Solaris 10发行版中使用ZFS为根文件系统。如果您想使用基于镜像备份的根文件系统,您需要使用SVM将包含系统软件(root,/usr,/var,等等)的分区(slice)进行镜像。其他所有存储都可以使用ZFS来进行管理。请不要使用ZFS和SVM重叠存储。例如,您可以使用磁盘或分区作为SVM卷或者ZFS存储池的一部分。但请不要在相同的磁盘或者分区上使用SVM和ZFS配置。 当将数据从UFS文件系统迁移至ZFS文件系统时,请参考如下实践:

1.3.2.1 UFS/SVM 交互

ZFS 可以不需要任何额外的卷管理软件即能很好工作。 如果您需要额外级别的卷管理,ZFS要求能将连续的1至4MB的逻辑块映射至连续的物理块上。若可以达到这一要求,我们就能以ZFS的功能使用卷了。

1.3.3 VxVM/FS

2 常规ZFS管理信息

3 应用服务器使用ZFS事项

3.1 ZFS NFS 服务器实践

请参考如下课程所述之UFS至ZFS迁移经验:

      # zfs set sharenfs=on export/home
      # zfs share export/home

关于跨NFS的ZFS的性能信息,请参阅ZFS与NFS服务器性能。

3.1.1 基于ZFS的NFS服务器优势

3.2 ZFS主目录服务器实践

当规划您的ZFS主目录(home directory)时,请参考如下实践:

当从UFS文件系统向ZFS文件系统迁移数据时,请参考如下实践:

请参阅 #ZFS_NFS_Server_Practices section for additional tips on sharing ZFS home directories over NFS.

3.2.1 ZFS主目录服务器的好处

3.3 ZFS邮件/新闻服务器

3.4 ZFS软件开发服务器

3.5 ZFS备份还原建议

3.5.1 使用ZFS快照

# zfs snapshot -r tank/home@monday

3.5.2 使用ZFS于AVS

Sun StorageTek Availability Suite(AVS),是一套Solaris的基于主机的数据服务,其同Veritas VVR(Volume Replicator)和Flashsnap(point-in-time copy,时间点副本)产品类似,当前在Solaris Express发行版中可用。 SNDR(Sun StorEdge Network Data Replicator)同ZFS send和recv功能不同,其具备的是固定时间(time-fixed)的复制功能。例如,您可以获得一时间点快照,复制它,或是基于先前快照的差别进行复制。AVS II与SNDR功能的结合,还允许您进行固定时间复制。其他模式的AVS SNDR复制功能允许您获得CDP(Continuous Data Replication,持续数据复制)。ZFS当前并没有这类功能。 关于AVS的更多信息,请参见OpenSolaris AVS项目。 请在此查看AVS/ZFS演示。

3.5.3 使用ZFS于企业备份解决方案

tsm> q file /opt/SUNWexplo/output # Last Incr Date Type File Space Name — ————– —- —————

1   08/13/07   09:18:03   ZFS     /opt/SUNWexplo/output
                           ^
                           |__正确的文件系统类型

关于ZFS的企业级备份解决方案问题的最新信息,请参见ZFS FAQ 为了能充分利用ZFS的功能,如快照,来提高备份和还原的进度,ndmp服务会在Solaris(首先在OpenSolaris)中发行。根据这些附加功能,企业级备份解决方案可以通过充分利用快照来提升对大存储库的数据保护。

3.6 ZFS与数据库建议

关于正在进行的ZFS和数据库性能测试的信息,请参看zfs_and_databases。还可参见ZFS for Databases

概要说明

截至2007年7月,如下功能会对数据库性能产生影响:

Oracle事项

请参阅一些在PostgreSQL和MySQL中用db_STRESS性能测试获得的真实结果。

3.7 ZFS与复合存储事项

3.8 驱动问题

4 ZFS管理/观察工具

5 虚拟化事项

5.1 ZFS与虚拟带库(VTL)

虚拟带库解决方案是通过对模拟磁带、磁带驱动器和带库的使用而出现的一种硬件与软件的结合体。虚拟带库被用于备份/存档系统,被定位于用来减少硬件和软件的成本。 虚拟带库是大量磁盘空间的吞噬者,我们相信ZFS将允许其更有效和安全的管理大量的、在线磁盘空间。

5.2 ZFS与VMWare

6 ZFS性能事项

对于基本系统、内存、存储池和副本建议,请参考如下章节:

6.1 ZFS与应用程序事项

6.1.1 ZFS与NFS服务器性能

配有ZFS的NFS,这被应用在许多不同地方并未报有明显不足。很多人报告对性能表示失望,但这恐怕是将跨NFS的ZFS的性能同本地文件系统所比较了。众所周知相比于本地或直连的文件系统而言,提供NFS服务会明显降低速度。尤其是对于低线程并发的作业量而言。有一种危险的创建更优的跨NFS的ZFS的方式,是以牺牲数据完整性为代价设定内核变量zil_disable。该参数的设定并不被推荐。 请参考:ZFS与数据库建议。 关于跨NFS的ZFS性能的更多详细信息,请参见 zfs and nfs。

6.2 ZFS文件系统的其他行为与使用误区

6.3 DTrace剖分(profile)以分类应用程序

6.4 性能优化

6.5 调节与策略设置

6.6 ZFS更多事项

6.7 可扩展性