ZFS」タグアーカイブ

ProxmoxでZFS ARCの利用上限を設定

ZFSではL1ARCでRAMの50%をデフォルトで使用する。他の用途で優先的に使われ、影響はないとのことだが、Proxmox GUIの表示上、気になるので設定する。

起動直後にAでRAM使用率が50%にスパイクしていることがわかる。BとCはVMを2台起動した挙動。Ballooningが効いている。

現状ステータス確認

“c_max”列に表示される。16GBの場合、”8589934592″がデフォルト値。

nano /proc/spl/kstat/zfs/arcstats

上限設定

以下のサイトによると、システムで2GB、ZFSプール1TBに1GB必要とのこと。今回5GBにしてみる。本番環境では、FreeNASのように8GB以上にしたほうがいいかもしれない。

echo 5368709120 > /sys/module/zfs/parameters/zfs_arc_max
# 再起動後も永続させる
echo 'options zfs zfs_arc_max=5368709120' > /etc/modprobe.d/zfs.conf

結果確認

参考サイト

ARC(メモリキャッシュ)の設定

https://qiita.com/juze9/items/563b67b9f2d67d1fa270

“ZFS uses 50 % of the host memory for the Adaptive Replacement Cache (ARC) by default. Allocating enough memory for the ARC is crucial for IO performance, so reduce it with caution. As a general rule of thumb, allocate at least 2 GiB Base + 1 GiB/TiB-Storage. For example, if you have a pool with 8 TiB of available storage space then you should use 10 GiB of memory for the ARC.”

https://pve.proxmox.com/pve-docs/chapter-sysadmin.html#sysadmin_zfs_limit_memory_usage

“ZFS will also use available memory as a read cache. I’m not sure of the exact defaults, but its max is usually set somewhere around half the total memory available. All of those things are opportunistic. They’ll use whatever memory they think they might need if it’s available, but will release it other things need it more.”

https://www.reddit.com/r/Proxmox/comments/qlav4j/high_memory_usage_with_one_vm_running/

ProxmoでZFS RAIDZ1のベンチマーク

ProxmoxでSSD*3のZFS RAIDZ1のベンチマークをとる。RAMキャッシュが効いているため、5~10倍くらいの速度になっているが、目安として記録。

UnsafeはVM強制停止すると、NTFSのエラーチェックが走ることがある。Proxmox公式が推奨している、Write Backに帯域リミッターを組み合わせるのが良いかもしれない。

キャッシュなし(既定)

Write back(Unsafe)

Write back

ProxmoxでZFS RAID10とRAIDZ1の検証④ ~復旧テスト編~

前回の続き。SSD*4でストライピングミラーを作り、HDD*5でRAIDZ1(RAID5相当)を作ってみる。耐障害性のテスト。

障害一次回避テスト

VMが使用中のZFSプールがダウンしていると、(OSディスクでなくても)そのVMが起動できないことがわかったので、ディスクをデタッチできるか試す。

デタッチはできるがディスク削除はエラーとなる。コマンドでは可能かもしれない。障害一次回避はせず、まずZFSプール自体を復旧させる必要がある。

致命障害復旧テスト

HDD1.VHDX(RAIDZ1の致命障害分ディスク)を再接続してProxmoxを起動。

VMは起動可能になり、パーティションも利用可能。

許容障害復旧テスト

ZFSプールに新規ディスクとしてSSD5・SSD6・HDD6を追加し、許容障害分のディスクを復旧してみる。

New-VHD  "D:\VHDX\SSD5.vhdx" -SizeBytes 1GB -Fixed
New-VHD  "D:\VHDX\SSD6.vhdx" -SizeBytes 1GB -Fixed
New-VHD  "D:\VHDX\HDD6.vhdx" -SizeBytes 3GB -Fixed
Add-VMHardDiskDrive -VMName "proxmox" -Path D:\VHDX\SSD5.vhdx
Add-VMHardDiskDrive -VMName "proxmox" -Path D:\VHDX\SSD6.vhdx
Add-VMHardDiskDrive -VMName "proxmox" -Path D:\VHDX\HDD6.vhdx
Get-VMHardDiskDrive -VMName proxmox -ControllerType SCSI | Sort Path

欠番のSSD1・SSD4・HDD5が障害状態という想定。

追加したディスクを確認

使用状況がいいえになっている新しいディスクを特定する。

新しいディスクのDiskIDを確認。

# HDD
ls /dev/disk/by-id/ -l | grep sdd
# SSD
ls /dev/disk/by-id/ -l | grep sdh
ls /dev/disk/by-id/ -l | grep sdi

ZFSプール内ディスクを交換

ZFS Replaceコマンドで故障ディスクと新規ディスクを交換する。

# HDD
zpool replace HDD-RAIDZ /dev/disk/by-id/scsi-36002248032089d99762889efecad5d4d-part1 /dev/disk/by-id/scsi-3600224804da59b97b8a55ea0aff99a55
# SSD
zpool replace SSD-RAID10 /dev/disk/by-id/scsi-360022480330855105876edaaf50bf262-part1 /dev/disk/by-id/scsi-360022480160bd4f5fba3380670d11af0
zpool replace SSD-RAID10 /dev/disk/by-id/scsi-36002248015c81e684fe6d51aa86da9dc-part1 /dev/disk/by-id/scsi-360022480d40b48fd1d568dcba3b81cb7

追加されたディスクがオンライン状態になっている。今回は小容量のためすぐ終わったが、大容量ディスクの場合は以下のようなResilverステータスが表示される。

参考サイト Referred website

Thanks for the informative post.

ProxmoxでZFS RAID10とRAIDZ1の検証① ~ディスク作成編~

前回の記憶域スペース階層ボリュームと同様、SSD*4でストライピングミラーを作り、HDD*5でRAIDZ1(RAID5相当)を作ってみる。

コマンド

New-VHD  "D:\VHDX\HDD1.vhdx" -SizeBytes 1TB
New-VHD  "D:\VHDX\SSD1.vhdx" -SizeBytes 512GB
Add-VMHardDiskDrive -VMName "proxmox" -Path D:\VHDX\SSD1.vhdx
Add-VMHardDiskDrive -VMName "proxmox" -Path D:\VHDX\HDD1.vhdx

RAID10ボリューム作成

圧縮とAShiftオプションはデフォルトのもの。

RAIDZ1ボリューム作成

設定確認

VMに仮想ディスク接続

前回、ネストVMでパフォーマンスが落ちたのはSwapが原因と思われたため、割り当てメモリを増やして調整した。

VHDXのQoSが動作せずベンチマーク結果が安定しなかったため、今回は障害テストのみ行う。Hyper-VではなくProxmoxの2段ネストをしたほうがよさそう。