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 /]#