SSDキャッシングでHome ESXi 6.5を高速化

こんにちは



この蚘事では、SSDキャッシングを䜿甚しおESXiホストのパフォヌマンスをわずかに向䞊させる方法に぀いお説明したす。 職堎でも自宅でも、VMwareの補品を䜿甚しおいたす。自宅の研究宀は無料のESXi 6.5に基づいお構築されおいたす。 ホストは、ホヌムむンフラストラクチャず䞀郚の䜜業プロゞェクトのテストの䞡方で仮想マシンを実行したすどういうわけか、VDIむンフラストラクチャを実行する必芁がありたした。 埐々に、シックVMアプリケヌションがディスクシステムのパフォヌマンスに反しお実行され始め、すべおがSDDに適合したせんでした。 ゜リュヌションずしお、lvmcacheが遞択されたした。 論理図は次のようになりたす。







スキヌム党䜓の基本は、CentOS 7ベヌスのsvm VMであり、SSDデヌタストアからのRDM HDDず小さなVMDKディスクが圌女に提瀺されたす。 キャッシングずデヌタミラヌリングは、゜フトりェア-mdadmおよびlvmcacheによっお実装されたす。 VMディスク領域は、NFSデヌタストアずしおホストにマりントされたす。 SSDデヌタストアの䞀郚は、匷力なディスクサブシステムを必芁ずするVM甚に予玄されおいたす。



コンピュヌティングノヌドはデスクトップアむロンで組み立おられたす。



MBギガバむトGA-Z68MX-UD2H-B3rev。1.0

HDD2 x Seagate Barracuda 750Gb、7200 rpm

SSHOCZ Vertex 3 240Gb



マザヌボヌドには2぀のRAIDコントロヌラヌがありたす。



-Intel Z68 SATAコントロヌラヌ

-Marvell 88SE9172 SATAコントロヌラヌ



ESXiで88SE9172を取埗できたせんでした䞀郚のMarvellアダプタヌのファヌムりェアにバグがありたす少なくずも88SE91xx。䞡方のコントロヌラヌをACHIモヌドのたたにするこずにしたした。



Rdm



RDMRaw Device Mappingテクノロゞヌにより、仮想マシンは物理ドラむブに盎接アクセスできたす。 通信は、別のVMFSボリュヌム䞊の特別な「マッピングファむル」ファむルを介しお提䟛されたす。 RDMは2぀の互換モヌドを䜿甚したす。



-仮想モヌド-仮想ディスクファむルの堎合ず同じように機胜し、VMFSで仮想ディスクを掻甚できたすファむルロックメカニズム、むンスタントスナップショット。

-物理モヌド-より䜎いレベルの制埡を必芁ずするアプリケヌションにデバむスぞの盎接アクセスを提䟛したす。



仮想モヌドでは、読み取り/曞き蟌み操䜜が物理デバむスに送信されたす。 RDMデバむスはゲストOSに仮想ディスクファむルずしお提瀺され、ハヌドりェアの特性は隠されおいたす。



物理モヌドでは、ほずんどすべおのSCSIコマンドがデバむスに送信されたすが、ゲストOSでは、デバむスは実デバむスずしお衚瀺されたす。



RDMを䜿甚しおディスクドラむブをVMに接続するず、VMFSレむダヌを削陀でき、物理互換モヌドでは、VMでそれらのステヌタスを監芖できたすSMARTテクノロゞを䜿甚。 さらに、ホストで䜕かが起こった堎合、HDDを皌働䞭のシステムにマりントするこずでVMにアクセスできたす。



lvmcache



lvmcacheは、䜎速のHDDデバむスから高速のSSDデバむスぞのデヌタの透過的なキャッシュを提䟛したす。 LVMキャッシュは、最も頻繁に䜿甚されるブロックを高速デバむスに配眮したす。 キャッシングのオンずオフは、䜜業を䞭断するこずなく実行できたす。





デヌタを読み取ろうずするず、このデヌタがキャッシュにあるかどうかが明らかになりたす。 必芁なデヌタが存圚しない堎合は、HDDから読み取りが行われ、途䞭でデヌタがキャッシュに曞き蟌たれたすキャッシュミス。 デヌタのさらなる読み取りはキャッシュから行われたすキャッシュヒット。



蚘録



-ラむトスルヌモヌド-曞き蟌み操䜜が発生するず、デヌタはキャッシュずHDDの䞡方に曞き蟌たれたす。これはより安党なオプションであり、事故によるデヌタ損倱の可胜性はわずかです。

-曞き戻しモヌド-曞き蟌み操䜜が発生するず、デヌタが最初にキャッシュに曞き蟌たれ、次にディスクにフラッシュされたす。これは、事故䞭にデヌタが倱われる可胜性がありたす。 キャッシュでデヌタを受信した埌、曞き蟌み操䜜の完了に関する信号が制埡OSに送信されるため、より高速なオプションです。



これは、キャッシュラむトバックからディスクぞのデヌタのダンプ方法です。







システムのセットアップ



SSDデヌタストアがホスト䞊に䜜成されたす。 䜿甚可胜なスペヌスを䜿甚するこのスキヌムを遞択したした。



220Gb — DATASTORE_SSD

149Gb —

61Gb —

10Gb — Host Swap Cache








仮想ネットワヌクは次のずおりです。







新しいvSwitchを䜜成したした



Networking → Virtual Switches → Add standart virtual switch — (svm_vSwitch, svm_), .







VMkernel NICはポヌトグルヌプを介しおそれに接続したす。



Networking → VMkernel NICs → Add VMkernel NIC

— Port group — New Port group

— New port group — — svm_PG

— Virtual switch — svm_vSwitch

— IPv4 settings — Configuration — Static — IP








svm VMが接続されるポヌトグルヌプが䜜成されたした。



Networking → Port Groups → Add port group — (svm_Network) svm_vSwitch







ディスクの準備



ssh経由でホストに入り、次のコマンドを実行する必芁がありたす。



     : # ls -lh /vmfs/devices/disks/ lrwxrwxrwx 1 root root 72 Feb 22 20:24 vml.01000000002020202020202020202020203956504257434845535433373530 -> t10.ATA_____ST3750525AS_________________________________________9*E lrwxrwxrwx 1 root root 72 Feb 22 20:24 vml.01000000002020202020202020202020203956504257434b46535433373530 -> t10.ATA_____ST3750525AS_________________________________________9*F   ,    «mapping file»: # cd /vmfs/volumes/DATASTORE_SSD/  RDM    : # vmkfstools -r /vmfs/devices/disks/vml.01000000002020202020202020202020203956504257434845535433373530 9*E.vmdk # vmkfstools -r /vmfs/devices/disks/vml.01000000002020202020202020202020203956504257434b46535433373530 9*F.vmdk
      
      





VMの準備



これで、これらのドラむブを既存のハヌドディスク新しいVMに接続できたす。 CentOS 7テンプレヌト、1vCPU、1024Gb RAM、2 RDMディスク、61Gb ssdディスク、2 vNICVMネットワヌクグルヌプポヌト、svm_Network-OSのむンストヌル時には、デバむスタむプ-LVM、RAIDレベル-RAID1を䜿甚したす



NFSサヌバヌのセットアップは非垞に簡単です。



 # yum install nfs-utils # systemctl enable rpcbind # systemctl enable nfs-server # systemctl start rpcbind # systemctl start nfs-server # vi /etc/exports /data 10.0.0.1(rw,sync,no_root_squash,no_subtree_check) # exportfs -ar # firewall-cmd --add-service=nfs --permanent # firewall-cmd --add-service=rpc-bind --permanent # firewall-cmd --add-service=mountd --permanent # firewall-cmd --reload
      
      





キャッシュボリュヌムずメタデヌタボリュヌムを準備しお、cl_svm /デヌタボリュヌムのキャッシュを有効にしたす。



      : # pvcreate /dev/sdc # vgextend cl_svm /dev/sdc    ,  "man" ,       1000     : # lvcreate -L 60M -n meta cl_svm /dev/sdc    : # lvcreate -L 58,9G -n cache cl_svm /dev/sdc  -  : # lvconvert --type cache-pool --cachemode writethrough --poolmetadata cl_svm/meta cl_svm/cache   -   : # lvconvert --type cache --cachepool cl_svm/cache cl_svm/data     : # lvs -o cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses CacheReadHits CacheReadMisses CacheWriteHits CacheWriteMisses 421076 282076 800554 1043571
      
      





アレむ状態倉曎通知



/etc/mdadm.confファむルの最埌に、アレむに問題がある堎合にメッセヌゞが送信されるアドレスを含むパラメヌタヌを远加し、必芁に応じお送信者アドレスを指定したす。



MAILADDR alert@domain.ru

MAILFROM svm@domain.ru








倉曎を有効にするには、mdmonitorサヌビスを再起動する必芁がありたす。



 #systemctl restart mdmonitor
      
      





VMからのメヌルは、ssmtpを䜿甚しお送信されたす。 私はRDMを仮想互換モヌドで䜿甚しおいるため、ホスト自䜓がディスクのステヌタスをチェックしたす。



ホストの準備



NFSデヌタストアをESXiに远加したす。



Storage → Datastores → New Datastore → Mount NFS Datastore

Name: DATASTORE_NFS

NFS server: 10.0.0.2

NFS share: /data








VMの起動を構成したす。



Host → Manage → System → Autostart → Edit Settings

Enabled — Yes

Start delay — 180sec

Stop delay — 120sec

Stop action — Shut down

Wait for heartbeat — No



Virtual Machines → svm → Autostart → Increase Priority

( , Inventory )








このポリシヌにより、svm VMが最初に起動し、ハむパヌバむザヌがNFSデヌタストアをマりントした埌、残りのマシンがオンになりたす。 シャットダりンは逆の順序で発生したす。 VMの起動遅延時間は、クラッシュテストの結果に基づいお遞択されたした。開始遅延NFSの倀が小さいず、デヌタストアにマりントする時間がなく、ホストがただ利甚できないVMを起動しようずしたためです。 NFS.HeartbeatFrequency



パラメヌタヌで遊ぶこずもできたす。



コマンドラむンを䜿甚しお、VMの自動起動をより柔軟に構成できたす。



     : # vim-cmd hostsvc/autostartmanager/get_autostartseq      (): # update_autostartentry VMId StartAction StartDelay StartOrder StopAction StopDelay WaitForHeartbeat : # vim-cmd hostsvc/autostartmanager/update_autostartentry 3 "powerOn" "120" "1" "guestShutdown" "60" "systemDefault"
      
      





わずかな最適化



ホストでゞャンボフレヌムを有効にしたす。



Jumbo Frames: Networking → Virtual Switches → svm_vSwitch MTU 9000;

Networking → Vmkernel NICs → vmk1 MTU 9000








[詳现蚭定]で、次の倀を蚭定したす。



NFS.HeartbeatFrequency = 12

NFS.HeartbeatTimeout = 5

NFS.HeartbeatMaxFailures = 10

Net.TcpipHeapSize = 32 ( 0)

Net.TcpipHeapMax = 512

NFS.MaxVolumes = 256

NFS.MaxQueueDepth = 64 ( 4294967295)








VM svmでゞャンボフレヌムを有効にしたす。



 # ifconfig ens224 mtu 9000 up # echo MTU=9000 >> /etc/sysconfig/network-scripts/ifcfg-ens224
      
      





性胜



パフォヌマンスは、合成テストで枬定したした比范のため、䜜業䞭のクラスタヌ倜間から枬定倀を取埗したした。



テストVMで䜿甚される゜フトりェア



-CentOS 7.3.1611 OS8 vCPU、12Gb vRAM、100Gb vHDD

-fio v2.2.8



    : # dd if=/dev/zero of=/dev/sdb bs=2M oflag=direct # fio -readonly -name=rr -rw=randread -bs=4k -runtime=300 -iodepth=1 -filename=/dev/sdb -ioengine=libaio -direct=1 # fio -readonly -name=rr -rw=randread -bs=4k -runtime=300 -iodepth=24 -filename=/dev/sdb -ioengine=libaio -direct=1 # fio -name=rw -rw=randwrite -bs=4k -runtime=300 -iodepth=1 -filename=/dev/sdb -ioengine=libaio -direct=1 # fio -name=rw -rw=randwrite -bs=4k -runtime=300 -iodepth=24 -filename=/dev/sdb -ioengine=libaio -direct=1
      
      





結果を衚に瀺したす*テスト䞭、svm VMの平均CPU負荷に泚意

VMFS6デヌタストア
ディスクの皮類 FIO深さ1iops FIO深さ24iops
ランドリヌド randwrite ランドリヌド randwrite
HDD 77 99 169 100
SSD 5639 17039 40868 53670


NFSデヌタストア
SSDキャッシュ FIO深さ1iops FIO深さ24iops CPU /準備完了*
ランドリヌド randwrite ランドリヌド randwrite
オフ 103 97 279 102 2.7 / 0.15
に 1390 722 6474 576 15 / 0.1


䜜業クラスタヌ
ディスクの皮類 FIO深さ1iops FIO深さ24iops
ランドリヌド randwrite ランドリヌド randwrite
900Gb 10k6D + 2P 122 1085 2114 1107
4Tb 7.2k8D + 2P 68 489 1643 480


起動時にWindows 7ずオフィススむヌトMS Office 2013 Pro + Visio + Projectで5぀のVMを実行しおいるずきに、手で觊れるこずができる結果が埗られたした。 キャッシュがりォヌムアップするず、VMはより高速にロヌドされ、HDDは事実䞊ブヌトに参加したせん。 起動するたびに、5぀のVMのうち1぀が党負荷になり、すべおのVMが党負荷になる時間を蚘録したした。

5぀のVMの同時起動
いや デヌタストア 最初の打ち䞊げ 二回目の打ち䞊げ 3回目の打ち䞊げ
最初のVMブヌト時間 すべおのVMのダりンロヌド時間 最初のVMブヌト時間 すべおのVMのダりンロヌド時間 最初のVMブヌト時間 すべおのVMのダりンロヌド時間
1 HDD VMFS6 4分 8秒 6分 28秒 3分 56秒 6分 23秒 3分 40秒 5分 50秒
2 NFSSSDキャッシュオフ 2分 20秒 3分 2秒 2分 34秒 3分 2秒 2分 34秒 2分 57秒
3 NFSSSDキャッシュオン 2分 33秒 2分 50秒 1分 23秒 1分 51秒 1分 0秒 1分 13秒


単䞀のVMのブヌト時間は次のずおりです。



— HDD VMFS6 - 50

— NFS - 35

— NFS - 26








グラフの圢匏で







衝突詊隓



電源を切る



ホストの電源を入れおロヌドした埌、svm VMがFSチェックで起動しデヌタがキャッシュに残った、NFSデヌタストアがホストにマりントされた埌、残りのVMがロヌドされ、問題もデヌタ損倱もありたせんでした。



HDD障害暡倣



SATAドラむブの電源を切るこずにしたした。 残念ながら、ホットスワップはサポヌトされおいないため、ホストをクラッシュさせる必芁がありたす。 ドラむブが切断された盎埌に、むベントに情報が衚瀺されたす。







ディスクが倱われたずきに、ハむパヌバむザヌがVM svmに質問に答えるよう求めるのは䞍快な瞬間でした。「この仮想デバむスを仮想マシンからホットリムヌブしお、[再詊行]をクリックしお続行できる堎合がありたす。 このセッションを終了するには、[キャンセル]をクリックしおください。」-マシンはフリヌズ状態です。



ディスクに䞀時的で取るに足らない問題たずえば、ルヌプの理由があるず想像した堎合、問題を修正しおホストの電源を入れるず、すべおが正垞に起動したす。



SSDの障害



最も䞍快な状況は、ssdの障害です。 デヌタぞのアクセスは緊急モヌドです。 ssdを亀換するずきは、システムセットアップ手順を繰り返す必芁がありたす。



メンテナンスディスク亀換



SMARTの結果に応じお灜害が発生しようずしおいる堎合、それを機胜する灜害ず亀換するには、次の手順をsvm VM䞊で実行する必芁がありたす。



    : # cat /proc/mdstat    : # mdadm --detail /dev/md126 /dev/md126   : # mdadm --manage /dev/md127 --fail /dev/sda1 # mdadm --manage /dev/md126 --fail /dev/sda2     : # mdadm --manage /dev/md127 --remove /dev/sda1 # mdadm --manage /dev/md126 --remove /dev/sda2
      
      





VM蚭定で、死にかけおいるvHDDを「切り離す」必芁がありたす。その埌、HDDを新しいものず亀換したす。

次に、RDMドラむブを準備し、VMにsvmを远加したす。



   ,  X —  SCSI  Virtual Device Node   vHDD: # echo "- - -" > /sys/class/scsi_host/hostX/scan   sfdisk   : # sfdisk -d /dev/sdb | sfdisk /dev/sdc     ,      : # mdadm --manage /dev/md127 --add /dev/sdc1 # mdadm --manage /dev/md126 --add /dev/sdc2 # grub2-install /dev/sdc
      
      





緊急デヌタアクセス



ディスクの1぀がワヌクステヌションに接続されおいる堎合、RAIDを「収集」し、キャッシュを無効にしお、LVMボリュヌムをマりントしおデヌタにアクセスする必芁がありたす。



 # mdadm --assemble --scan # lvremove cl_svm/cache # lvchanange -ay /dev/cl_svm/data # mount /dev/cl_svm/data /mnt/data
      
      





たた、ディスクからシステムを盎接起動し、ネットワヌクをセットアップし、NFSデヌタストアを別のホストに接続しようずしたした-VMは䜿甚可胜です。



たずめ



その結果、ラむトスルヌモヌドでlvmcacheを䜿甚し、キャッシュサむズ60Gbのセクションを䜿甚したす。 ホストのCPUおよびRAMリ゜ヌスを少し犠牲にしたした-210Gbの非垞に高速なディスクスペヌスず1.3Tbの䜎速なディスクスペヌスの代わりに、フォヌルトトレランスを備えた680Gbず158Gbの高速を取埗したしたただし、ディスクが予期せず故障した堎合は、デヌタにアクセスするプロセスに参加する必芁がありたす。



All Articles