添加一个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
------------------------------------------------ ----- ----- ----- ----- ----- -----