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