我有一个 ZFS 系统,为许多虚拟机提供服务。在其中,我们安装了 12 个 4TB SAS 磁盘,并将它们配置为镜像。我们添加了两个 PCI-E SSD(三星 960,每个 512GB),但它们的消耗量都刚好超过 50%,而不是缓存所有可以缓存的数据。我们消耗的存储空间很多,但 SSD 只占了大约一半。
系统是 CentOS 7 盒,带有 Linux 版本 0.6.5.9-1.el7_3.centos 上的 ZFS。
以下是 zpool iostat 的快照:
capacity operations bandwidth
pool alloc free read write read write
------------------------------------------------- ----- ----- ----- ----- ----- -----
stgpool 13.3T 8.46T 26 1020 482K 10.6M
mirror 2.21T 1.41T 4 165 50.5K 1.79M
S1D0 - - 3 158 52.0K 2.05M
S2D0 - - 0 158 11.2K 2.05M
mirror 2.21T 1.41T 2 184 51.7K 1.97M
S3D0 - - 2 177 47.2K 2.26M
S4D0 - - 0 177 13.6K 2.26M
mirror 2.21T 1.41T 3 170 104K 1.66M
S1D1 - - 2 169 90.4K 1.94M
S2D1 - - 1 169 21.6K 1.94M
mirror 2.21T 1.41T 5 142 129K 1.61M
S3D1 - - 3 139 109K 1.86M
S4D1 - - 1 139 32.8K 1.86M
mirror 2.21T 1.41T 4 170 93.7K 1.81M
S1D2 - - 4 162 95.2K 2.11M
S2D2 - - 0 162 11.2K 2.11M
mirror 2.21T 1.41T 4 186 54.2K 1.78M
S3D2 - - 3 175 40.0K 2.10M
S4D2 - - 0 175 27.2K 2.10M
logs - - - - - -
ata-Samsung_SSD_850_EVO_250GB_S21NNXAG918721R 0 232G 0 0 0 0
ata-Samsung_SSD_850_EVO_250GB_S21NNXAGA59337A 0 232G 0 0 0 0
ata-Samsung_SSD_850_EVO_250GB_S21NNXAGA69590F 0 232G 0 0 0 0
cache - - - - - -
nvme-Samsung_SSD_960_PRO_512GB_S3EWNCAHC01880D 266G 211G 38 81 556K 2.85M
nvme-Samsung_SSD_960__PRO_512GB_S3EWNCAHB04288W 266G 211G 37 56 416K 2.10M
------------------------------------------------- ----- ----- ----- ----- ----- -----
Zpool 设置:
NAME PROPERTY VALUE SOURCE
stgpool size 21.8T -
stgpool capacity 61% -
stgpool altroot - default
stgpool health ONLINE -
stgpool guid 1784205276891874933 default
stgpool version - default
stgpool bootfs - default
stgpool delegation on default
stgpool autoreplace off default
stgpool cachefile - default
stgpool failmode wait default
stgpool listsnapshots off default
stgpool autoexpand off default
stgpool dedupditto 0 default
stgpool dedupratio 1.00x -
stgpool free 8.46T -
stgpool allocated 13.3T -
stgpool readonly off -
stgpool ashift 0 default
stgpool comment - default
stgpool expandsize - -
stgpool freeing 0 default
stgpool fragmentation 58% -
stgpool leaked 0 default
stgpool feature@async_destroy enabled local
stgpool feature@empty_bpobj active local
stgpool feature@lz4_compress active local
stgpool feature@spacemap_histogram active local
stgpool feature@enabled_txg active local
stgpool feature@hole_birth active local
stgpool feature@extensible_dataset enabled local
stgpool feature@embedded_data active local
stgpool feature@bookmarks enabled local
stgpool feature@filesystem_limits enabled local
stgpool feature@large_blocks enabled local
arcstat.py 信息:
time read l2read hit% hits miss% miss l2hit% l2miss% arcsz c l2size
01:44:35 2.1K 268 87 1.8K 12 268 2 97 125G 125G 778G
01:44:36 6.5K 583 91 6.0K 8 583 1 98 125G 125G 778G
01:44:37 1.1K 277 75 835 24 277 6 93 125G 125G 778G
01:44:38 1.5K 230 84 1.3K 15 230 1 98 125G 125G 778G
01:44:39 1.8K 141 91 1.6K 8 141 2 97 125G 125G 778G
01:44:40 1.4K 203 85 1.2K 14 203 19 80 125G 125G 778G
01:44:41 4.0K 291 92 3.7K 7 291 11 88 125G 125G 778G
01:44:42 1.7K 95 94 1.6K 5 95 8 91 125G 125G 778G
01:44:43 1.1K 84 92 1.0K 7 84 2 97 125G 125G 778G
我正在尝试最大化读取率并利用 960 的容量。任何帮助都非常感谢 :)
答案1
熟悉arcstat
ZFS 缓存的工作原理......类似于:
arcstat.py -f "time,read,l2read,hit%,hits,miss%,miss,l2hit%,l2miss%,arcsz,c,l2size" 1'
这将显示 ZFS ARC 和 L2ARC 缓存的命中率。您可能有大量数据写入磁盘,命中率很高,但可能只是因为读取了一小部分数据。下面的数据集使用了 6.5TB,但 L2ARC 缓存中只有 127GB 的数据。
您的设置中可能未使用 ZIL 设备 (SLOG)。ZFS 使用 SLOG 设备进行同步写入活动。一些数据库会这样做,NFS 流量也是如此。如果虚拟机在此服务器上运行,则永远不会使用 SLOG 设备,因此这些设备在此版本中可能是一种浪费。