ストレージ」タグアーカイブ

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

Windows Server CoreとGUIのフットプリントの違い

実測したことがなかったので、PowerShellで取得する。Server CoreはバニラVM、GUIはAD/AADCがインストールしてある状態。

ディスク使用量(GUI)

Get-FolderSize C:\
# シェル確認用
Get-Volume | Where {$_.DriveLetter -ne $null } | Ft
# CSV出力用
Get-Volume | Where {$_.DriveLetter -ne $null } | Select DriveLetter,FileSystemType,Size,SizeRemaining | Export-Csv -Path <出力パス> -Encoding UTF8 -NoTypeInformation

デフォルトでGB表記になっているので、シェル確認ではそのまま使う。

Select-ObjectするとByte表示になり、”GB”の文字列も消えるので、PowerBIで集計する場合は、こちらのほうが都合がよい。

ディスク使用量(Server Core)

メモリ使用量

Proxmoxでディスクベンチマーク

VMに仮想ディスクアサインする前の、基盤ディスクベンチマーク。ZFSのパフォーマンステストなどで使うと良い。

コマンド

apt install hdparm
hdparm -tT /dev/sda

キャッシュメモリが効いていることが分かる。速度はSATA6の仕様値。

実用スクリプト

以下のサイトを参考にし、Read/Writeの複数回テストができた。

# Read
for i in [1] [2] [3] [4] [5];do sleep 5;echo $'\n\n' $i;hdparm -t /dev/sda;done
# Write
for i in [1] [2] [3] [4] [5];do sleep 5;echo $'\n\n' $i;date;time dd if=/dev/zero of=/tmp/hdparm_write$i.tmp ibs=1M obs=1M count=1024;date;done

参考サイト

ProxmoxでSANネットワークを追加する① ~ブリッジ作成編~

まず仮想ブリッジを追加する。IPレンジは10.1.50.0/24とする。

仮想ブリッジ追加

物理NICに紐づける場合は、「ブリッジポート」にeth番号を入力。

ブリッジ有効化

“needs ifupdown2″と表示されているが、GUIから適用できた。「稼働中」が「はい」になっていればOK。

各VMにNIC追加

追加したvmbr1をアタッチする。ドライバはVirtioの準仮想化にする。

固定IPを指定

疎通確認

10.1.50.12のVMと相互にPingが通ればOK。

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相当)を作ってみる。耐障害性のテスト。

仮想HDDの取り外し(1枚目)

SSD RAID10とHDD RAIDZ1からそれぞれ1枚ずつ削除する。

ZFSプール状態確認

SSD・HDDともに状態がDegradedに変化。

OSアクセス確認

VM上のパーティションは継続利用できる。

仮想HDDの取り外し(2枚目)

SSD RAID10とHDD RAIDZ1から追加で1枚ずつ削除する。

障害確認

ネストVMのProxmox上でディスク障害メッセージを確認。

ZFSプールの状態

HDD RAID-Z1の方はプール自体がダウン。SSDの方はミラー0・ミラー1の1台ずつが利用不可になったがプールは生きている。

基盤レベルのエラーとなるため、RAIDZ1プールがアタッチされているVMは起動できない。

次回は復旧テストをする。

ProxmoxでZFS RAID10とRAIDZ1の検証② ~ベンチマーク編~

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

ベンチマーク結果

New-VHDコマンドで-FixedにしたところHDDはQoSが有効になった。SSDは期待値の1000MB/sを超過。そしてWriteが200MB/sで頭打ち。QoS ≠ Bandwidth Limiterなのでいずれ物理ディスクで再テストして正確な結果を得たい。

100MB/s HDD*5 RAID-Z1
500MB/s SSD*4 RAID-10

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段ネストをしたほうがよさそう。