ZFS文件系统(8) -- SLOG

添加一个SLOG

      有些磁盘不存在以磁盘一致的方式重新启动Linux内核,因此,有时候引导磁盘可能是/dev/sda,而下一次可能就是/dev/sdb了,对于主存储池,这倒不是什么问题,因为ZFS可以基于元数据重建VDEVS,但是对于L2ARC和SLOG这些没有元数据存在的设备,难道还是要通过/dev/sdx的方式来添加?或许下一次启动,你就不能确定那一次才是需要配置为SLOG的设备,因此我们需要使用/dev/disk/by-id/*这样的名字来确定磁盘,如果你这样做,你的SLOG可能不能加入到存储池中,这可能会影响一些需要依赖SLOG的应用程序的性能。

      在一个现有的zpool中添加SLOG并不困难,要创建一个最佳的实践的镜像SLOG,下面的例子我会遵循最佳的实践。假设我的存储池已经有了4个盘片,以及一个OCZ Revodrive SSD提供2个60G的磁盘驱动系统,我会在SSD上各分出一个5GB的分区,然后生成镜像SLOG。如何添加一个SLOG到存储池中,首先通过GNU parted来创建一个分区,然后加入固态硬盘,该设备在/dev/disk/by-id/下指向/dev/sda和/dev/sdb,命令如下:

# parted /dev/sda mklabel gpt mkpart primary zfs 0 5G
# parted /dev/sdb mklabel gpt mkpart primary zfs 0 5G
# zpool add tank log mirror \
/dev/disk/by-id/ata-OCZ-REVODRIVE_OCZ-69ZO5475MT43KNTU-part1 \
/dev/disk/by-id/ata-OCZ-REVODRIVE_OCZ-9724MG8BII8G3255-part1
# zpool status
  pool: tank
 state: ONLINE
 scan: scrub repaired 0 in 1h8m with 0 errors on Sun Dec  2 01:08:26 2012
config:

        NAME                          STATE     READ WRITE CKSUM
        pool                            ONLINE       0     0     0
          raidz1-0                       ONLINE       0     0     0
            sdd                         ONLINE       0     0     0
            sde                         ONLINE       0     0     0
            Sdf                         ONLINE       0     0     0
            sdg                         ONLINE       0     0     0
        logs
          mirror-1                       ONLINE       0     0     0
            ata-OCZ-REVODRIVE_OCZ-KNTU-part1  ONLINE       0     0     0
            ata-OCZ-REVODRIVE_OCZ-3255-part1  ONLINE       0     0     0


SLOG 平均寿命

      由于你可能会使用一般级别的SSD在你的Linux服务器上搭建SLOG,我们需要模拟一个对SSD磨损和破快的密集型读写场景,当然,这很大程度上和不同的SSD制造商有关,不过我们可以做一个一般性的设置。

      首先,ZFS拥有先进的损耗均衡算法,这将会在每一个芯片上均衡的磨损。现实就是,没有什么比一个垃圾收集的支持更加重要,没有必要需要TRIM的支持。ZFS能够均衡磨损的主要原因就是他是写时拷贝文件系统。

      其次,各种驱动器是通过不同的纳米工艺制作,纳米工艺越小,你的SSD寿命就越短,一个例子,Intel320是25纳米的MLC300GB  SSD,大约为5000P/E周期,如果采用磨损均衡算法,也就是可以你的SSD大概5000倍,这将可以产生150万GB的写入数据总量,或1500TB,假设我的ZIL保持3MB/s的速度写入,大概就是95TB每年的速度,那么这个设备的寿命大约15年。

      然而,Intel335是20纳米的MLC240GB SSD,大约是3000P/E周期,这意味着你可以写你整个SSD的3000倍,这将产生720TB的数据总量,如果采用3MB/s的速度,这将小于之前的1/2的寿命,Intel320只有7年的寿命,请注意这些东西。

      现在,如果你现在使用电池供电的DRAM驱动器,那么他的损耗均衡就不是一个问题了,你服务器的DIMMs可能会更加持久。10k+ SAS和FC驱动器也很类似。

容量

      一个简短的说明,你可能不需要太大的ZIL,比如我就只有4GB的空间来当作我的ZIL,他几乎就不占用1M或2M的空间。我把我所有的虚拟机管理进程开启,也让系统升级,同时让他们做大量的工作,只看到ZIL最高时才使用了100M的空间,我不能想象什么样的工作需要占用1GB的空间,更不用说是4GB的分区,这里有一条命令可以查看您ZIL空间的大小。

# zpool iostat -v tank
                                           capacity     operations    bandwidth
tank                                      alloc   free   read  write   read  write
------------------------------------------------  -----  -----  -----  -----  -----  -----
tank                                   839G  2.81T     76      0  1.86M      0
  raidz1                                839G  2.81T     73      0  1.81M      0
    sdd                                    -      -     52      0   623K      0
    sde                                    -      -     47      0   620K      0
    sdf                                    -      -     50      0   623K      0
    sdg                                    -      -     47      0   620K      0
logs                                       -      -      -      -      -      -
  mirror                               1.46M  3.72G     20      0   285K      0
    ata-OCZ-REVODRV_OCZ-KNTU-part1      -      -     20      0   285K      0
    ata-OCZ-REVODRV_OCZ-3255-part1       -      -     20      0   285K      0
------------------------------------------------  -----  -----  -----  -----  -----  -----

结论

      一个快速的SLOG会给那些需要低延迟的应用程序非常高的效益,非常适合那些对时间敏感的程序,如数据库等,不过,加入SLOG会增加一定的成本,以电池供电的DRAM芯片就非常的昂贵,通常2500美元/8GB的DDR3,而400GB的MLC SSD也需要话费100美元,一个600GB的15k SAS需要花费200美元,再者,容量对于SLOG来说真的不是问题,效率才是问题,我会使用SSD实现更快的IOPS( 每秒进行读写(I/O)操作的次数),容量比较小的。除非你相对他进行分区,然后共享一个驱动器。这是一个伟大的想法,我会在下一章节说明L2ARC。

你可能感兴趣的:(ZFS文件系统)