1、安装zfsonlinux的epel源:

yum install -y http://download.zfsonlinux.org/epel/zfs-release.el7_7.noarch.rpm 


 
注意:

(1).提供了kABI-tracking kmod 和 DKMS 两种模式的包,用户可以选择安装kABI-tracking kmod或DKMS风格的包。

(2).默认情况下,zfs-release包被配置为安装DKMS风格的包,因为它们可以与各种内核一起工作。

(3).如果为了安装kmods,在/etc/yum.repos.d/zfs.repo中使用缺省存储库。必须从zfs切换到zfs-kmod。

(4). Starting with EL7.7 zfs-0.8 will become the default, EL7.6 and older will continue to track the zfs-0.7 point releases.


 

 
2、安装zfs:

yum install -y kernel-devel zfs


 

 
3、创建pool:

[root@cent7db02 ~]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0   40G  0 disk 

├─sda1            8:1    0    1G  0 part /boot

└─sda2            8:2    0   39G  0 part 

  ├─centos-root 253:0    0   37G  0 lvm  /

  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]

sdb               8:16   0   10G  0 disk 

sdc               8:32   0   10G  0 disk 

sdd               8:48   0   10G  0 disk 

sde               8:64   0   10G  0 disk 

sr0              11:0    1 10.3G  0 rom  

[root@cent7db02 ~]# 

系统中提供了4块磁盘。sdb 和 sdc 当作机械盘;sdd 和 sde 当作ssd,后期用作读缓存和写缓存。


 
检查zfs模块是否工作:

[root@cent7db02 ~]# lsmod |grep zfs

zfs                  3980511  0 

zunicode              331170  1 zfs

zlua                  147429  1 zfs

zcommon                89315  1 zfs

znvpair                94388  2 zfs,zcommon

zavl                   15167  1 zfs

icp                   288913  1 zfs

spl                   103804  5 icp,zfs,zavl,zcommon,znvpair

[root@cent7db02 ~]# 

如果zfs模块未加载,则手动加载:

[root@cent7db02 ~]# /sbin/modprobe zfs


 
创建资源池:

[root@cent7db02 ~]# zpool create tank mirror sdb sdc cache ata-VBOX_HARDDISK_VB840e479a-2bbfb13c

[root@cent7db02 ~]#

说明:

sdb 和 sdc 创建成mirror模式的永久存储,sdd 作为cache使用。此处使用sdd的vvid,而不能直接使用sdd.


 
检查资源池状态:

[root@cent7db02 /]# zpool status

  pool: tank

 state: ONLINE

  scan: none requested

config:


 
        NAME                                     STATE     READ WRITE CKSUM

        tank                                     ONLINE       0     0     0

          mirror-0                               ONLINE       0     0     0

            sdb                                  ONLINE       0     0     0

            sdc                                  ONLINE       0     0     0

        cache

          ata-VBOX_HARDDISK_VB840e479a-2bbfb13c  ONLINE       0     0     0


 
errors: No known data errors

[root@cent7db02 /]# df -h

Filesystem               Size  Used Avail Use% Mounted on

devtmpfs                 908M     0  908M   0% /dev

tmpfs                    919M     0  919M   0% /dev/shm

tmpfs                    919M  8.6M  911M   1% /run

tmpfs                    919M     0  919M   0% /sys/fs/cgroup

/dev/mapper/centos-root   37G  1.5G   36G   4% /

/dev/sda1               1014M  148M  867M  15% /boot

tmpfs                    184M     0  184M   0% /run/user/0

/dev/sr0                  11G   11G     0 100% /mnt/cdrom

tank                     9.3G  128K  9.3G   1% /tank

[root@cent7db02 /]# 

说明:

资源池其实是一个文件系统,例如当前的/tank.


 
[root@cent7db02 /]# zpool iostat -v

                                           capacity     operations     bandwidth 

pool                                     alloc   free   read  write   read  write

---------------------------------------  -----  -----  -----  -----  -----  -----

tank                                      120K  9.50G      0      6  12.5K  46.2K

  mirror                                  120K  9.50G      0      6  12.5K  46.2K

    sdb                                      -      -      0      3  6.23K  23.1K

    sdc                                      -      -      0      3  6.23K  23.1K

cache                                        -      -      -      -      -      -

  ata-VBOX_HARDDISK_VB840e479a-2bbfb13c     1K  9.99G      0      0  1.80K    338

---------------------------------------  -----  -----  -----  -----  -----  -----

[root@cent7db02 /]# 


 
注意:资源池提供多种方式进行创建。以上命令创建的资源池类似于2块机械磁盘做成一个raid1,另外一块SSD当作读缓存。


 
资源池的创建模式如下所示:

(1).simple pool :       创建命令:zpool create tank sdb sdc sdd sde

(2).simple mirrored zpool:      创建命令:zpool create tank mirror sdb sdc sdd sde    类似于软raid1.

(3).Nested VDEVs :      创建命令:zpool create tank mirror sdb sdc mirror sdd sde     类似于raid 1+0

(4).File VDEVs :  将文件当作磁盘设备来创建资源池。仅用于测试目的,不建议用于生产。

(5).Hybrid pools:       创建命令:zpool create tank mirror sdb sdc cache ata-VBOX_HARDDISK_VB840e479a-2bbfb13c ata-VBOX_HARDDISK_VB05a337a8-f5d56dc0      类似于带cache缓存. cache设备只能使用vvid,而不能使用盘符。而永久存储数据的pool设备可以使用盘符,并且不需要指定/dev这个绝对路径。

(6).RAIDZ-1      :      创建命令:zpool create tank raidz1 sdb sdc sdd       类似于raid 5

(7).RAIDZ-2      :      创建命令:zpool create tank raidz2 sdb sdc sdd sde      类似于raid 6

(8).RAIDZ-3      :      创建命令:zpool create tank raidz3 sdb sdc sdd sde sdf     没有与之对应的硬件级raid。它是RAIDZ-1和RAIDZ-2的组合。

(9).Hybrid RAIDZ :      创建命令:zpool create tank raidz1 sde sdf sdg raidz1 sdh sdi sdj raidz1 sdk sdl sdm raidz1 sdn sdo sdp     目的是提升性能,如果大量的磁盘放在一个RAID组时,性能会非常差。 


 
性能变化,RAID最好,RAIDZ最差:

RAID-0 (fastest)

RAID-1

RAIDZ-1

RAIDZ-2

RAIDZ-3 (slowest)


 
给资源池增加SLOG :

[root@cent7db02 /]# zpool add tank log /dev/disk/by-id/ata-VBOX_HARDDISK_VB05a337a8-f5d56dc0

[root@cent7db02 /]# 

[root@cent7db02 /]# zpool status   

  pool: tank

 state: ONLINE

  scan: none requested

config:


 
        NAME                                     STATE     READ WRITE CKSUM

        tank                                     ONLINE       0     0     0

          mirror-0                               ONLINE       0     0     0

            sdb                                  ONLINE       0     0     0

            sdc                                  ONLINE       0     0     0

        logs

          ata-VBOX_HARDDISK_VB05a337a8-f5d56dc0  ONLINE       0     0     0

        cache

          ata-VBOX_HARDDISK_VB840e479a-2bbfb13c  ONLINE       0     0     0


 
errors: No known data errors

说明:

最佳实践中增加SLOG时, 应该至少用两块SSD做成log mirror. 这样缓存写入的数据时可以数据冗余,不会造成数据丢失。


 
[root@cent7db02 /]# zpool iostat -v

                                           capacity     operations     bandwidth 

pool                                     alloc   free   read  write   read  write

---------------------------------------  -----  -----  -----  -----  -----  -----

tank                                      160K  9.50G      0      8  10.6K  56.4K

  mirror                                  160K  9.50G      0      8  7.07K  38.6K

    sdb                                      -      -      0      4  3.53K  19.3K

    sdc                                      -      -      0      4  3.53K  19.3K

logs                                         -      -      -      -      -      -

  ata-VBOX_HARDDISK_VB05a337a8-f5d56dc0      0  9.50G      0      3  38.5K   194K

cache                                        -      -      -      -      -      -

  ata-VBOX_HARDDISK_VB840e479a-2bbfb13c    512  9.99G      0      0  1.02K    199

---------------------------------------  -----  -----  -----  -----  -----  -----

[root@cent7db02 /]# 


 
从资源池中划分zvol:

[root@cent7db02 /]# zfs create -V 1G tank/disk1

[root@cent7db02 /]# zfs create -V 1G tank/disk2

[root@cent7db02 /]# zfs create -V 1G tank/disk3

[root@cent7db02 /]# zfs create -V 1G tank/disk4

[root@cent7db02 /]# zpool iostat -v            

                                           capacity     operations     bandwidth 

pool                                     alloc   free   read  write   read  write

---------------------------------------  -----  -----  -----  -----  -----  -----

tank                                      475K  9.50G      0      4    356  1013K

  mirror                                  475K  9.50G      0      4    237  1013K

    sdb                                      -      -      0      2    118   506K

    sdc                                      -      -      0      2    118   506K

logs                                         -      -      -      -      -      -

  ata-VBOX_HARDDISK_VB05a337a8-f5d56dc0      0  9.50G      0      0    122    615

cache                                        -      -      -      -      -      -

  ata-VBOX_HARDDISK_VB840e479a-2bbfb13c  30.5K  9.99G      0      0     34   358K

---------------------------------------  -----  -----  -----  -----  -----  -----

[root@cent7db02 /]# 


 
查看块设备:

[root@cent7db02 tank]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0   40G  0 disk 

├─sda1            8:1    0    1G  0 part /boot

└─sda2            8:2    0   39G  0 part 

  ├─centos-root 253:0    0   37G  0 lvm  /

  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]

sdb               8:16   0   10G  0 disk 

├─sdb1            8:17   0   10G  0 part 

└─sdb9            8:25   0    8M  0 part 

sdc               8:32   0   10G  0 disk 

├─sdc1            8:33   0   10G  0 part 

└─sdc9            8:41   0    8M  0 part 

sdd               8:48   0   10G  0 disk 

├─sdd1            8:49   0   10G  0 part 

└─sdd9            8:57   0    8M  0 part 

sde               8:64   0   10G  0 disk 

├─sde1            8:65   0   10G  0 part 

└─sde9            8:73   0    8M  0 part 

sr0              11:0    1 10.3G  0 rom  /mnt/cdrom

zd0             230:0    0    1G  0 disk 

zd16            230:16   0    1G  0 disk 

zd32            230:32   0    1G  0 disk 

zd48            230:48   0    1G  0 disk 

[root@cent7db02 tank]# 

说明:

系统中多了4个块设备,分别为zd0/zd16/zd32/zd48.


 
注意:

目前zfs不支持通过iSCSI共享出去,看样子还是得用scst.


 

 

 
======================================================================

测试cache功能:

--进入/tank目录,模拟大量的数据写入:

[root@cent7db02 tank]# pwd

/tank

[root@cent7db02 tank]# for i in {1..100}; do dd if=/dev/zero of=test$i.log bs=1M count=30 conv=fsync ; done 


 
--查看logs和cache的使用率:

[root@cent7db02 /]# zpool iostat -v

                                           capacity     operations     bandwidth 

pool                                     alloc   free   read  write   read  write

---------------------------------------  -----  -----  -----  -----  -----  -----

tank                                      541M  8.97G      0      4    242   985K

  mirror                                  541M  8.97G      0      4    161   889K

    sdb                                      -      -      0      2     80   445K

    sdc                                      -      -      0      2     80   445K

logs                                         -      -      -      -      -      -

  ata-VBOX_HARDDISK_VB05a337a8-f5d56dc0   121M  9.38G      0      0     82  97.0K

cache                                        -      -      -      -      -      -

  ata-VBOX_HARDDISK_VB840e479a-2bbfb13c   474M  9.52G      0      0     23   322K

---------------------------------------  -----  -----  -----  -----  -----  -----

[root@cent7db02 /]#