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
HDD7799169100
SSD5639170394086853670

NFSデヌタストア
SSDキャッシュFIO深さ1iopsFIO深さ24iopsCPU /準備完了*
ランドリヌドrandwriteランドリヌドrandwrite
オフ103972791022.7 / 0.15
に1390722647457615 / 0.1

䜜業クラスタヌ
ディスクの皮類FIO深さ1iopsFIO深さ24iops
ランドリヌドrandwriteランドリヌドrandwrite
900Gb 10k6D + 2P122108521141107
4Tb 7.2k8D + 2P684891643480

起動時に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のダりンロヌド時間
1HDD VMFS64分 8秒6分 28秒3分 56秒6分 23秒3分 40秒5分 50秒
2NFSSSDキャッシュオフ2分 20秒3分 2秒2分 34秒3分 2秒2分 34秒2分 57秒
3NFS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の高速を取埗したしたただし、ディスクが予期せず故障した堎合は、デヌタにアクセスするプロセスに参加する必芁がありたす。

Source: https://habr.com/ru/post/J323824/


All Articles