VMware / Microsoft 製品はこう使う。

好きなことを好きに描く.

【ESXiホストの動作が不安定になったとき - ATS Heartbeat の無効化を検討してみる - VMware KB 2118921 】

こんにちは。

 

ESXi5.5 Update 2 以降でESXi の動作が不安定であったり、
仮想マシンの動作が不安定になったときには、
いろいろな観点で切り分けを行おうとすると思います。


今回ご紹介するのはVMware KB 2118921 です。

(日本語)ESXi ホストが VMFS3 および VMFS5 データストアから切断される (2118921)
https://kb.vmware.com/kb/2118921

(英語)ESXi host loses connectivity to a VMFS3 and VMFS5 datastore

https://kb.vmware.com/kb/2113956

このKB だけみてもワカラナイこともあると思いますので、少し解説します。


まず、次の内容が単体で稼働するESXi5.5 Update 2 以降のマシン、もしくはクラスタで
発生した場合は、このKB を見てみるといいことがあるかもしれません。

・vCenter Server 配下のクラスタ全体で動作が不安定
・ESXiホストが vSphere vCenter から切断される
・仮想マシンのディスク I/O 操作が不安定、もしくはハングする



これらの事象が発生したとき、正直なところ運用担当者としては ”勘弁してほしい" と
思うでしょう。私だって思います(汗


では、内容に入ろうと思いますが、この事象(VMware KB)が影響を及ぼしている機能は、
ESXi 5.5 Update 2 以降で実装された ATS(Atomic Test and Set) です。

 

ATS(Atomic Test and Set)とは?
まず参考になる資料はこちらです。

https://pubs.vmware.com/vsphere-50/topic/com.vmware.vsphere.storage.doc_50/GUID-DE30AAE3-72ED-43BF-95B3-A2B885A713DB.html


ESXi5.5 Update 2 以降からAtomic Test and Set という機能が実装されました。
これは、従来行っているSCSI Reservation を利用してストレージを利用するのではなく、
Atomic Test and Set(ATS)と呼ばれるアルゴリズムを用いて小さいファイル単位でファイルをロックするため、これによりSCSI  Reservation よってディスクI/O待ちと
なった問題が最小限に抑えられ、処理が向上するようになっています。

ご存知のとおり、VMFSは複数のホストから共有できる優れたファイルシステムですが、ストレージを共有している以上は、整合性を保つ必要があり、
データの一貫性を保つためにVMFSのメタデータ領域に対して排他制御が行われます。


例を挙げると従来行っているSCSI Reservation を利用した場合、
LUN単位でロックし排他制御が行われるため
同じLUNを利用している仮想マシン全てが待たされます。

一方でATSでは、LUN単位ではなくロック対象のセクタのみ排他制御を行いますので、
排他制御の影響を受ける仮想マシンを大幅に減らすことが可能です。
これによりSCSI Reservation の衝突が発生し性能(パフォーマンス)が劣化するという
問題を解消し、効率の良い排他ロック機能を提供するため、
SCSI Resetが発生しづらい状況にもなります。


この機能は、ハードウェア アクセラレーションをサポートするストレージ デバイスを
利用している場合に利用可能です。(ハードウェアオフロードとかいう言い方も)


しかし、この機能により、ESXi カーネルがストレージ システムに発行する ATS コマンドの量が大幅に増え、
ストレージ システムへの負荷が増え、場合によっては、ATS を使用する VMFS へのハートビートが
うまく動作せず失敗し、ESXi カーネルが VMFS データストアへのアクセスを再検証を繰り返す結果になることがあります。
これにより、データストアへの接続が切断されたり、切断されてすぐに接続されるなどの不安定な状況になることがあります。

こういったときは一度ATS heartbeat を無効化してみるといいかと思います。

この部分はVMware KB に記載されている以下のコマンドをESXiにSSH接続して
実行することで無効化が可能です。日本語版も英語版もコマンドに間違いはありませんでした。

esxcli system settings advanced set -i 0 -o /VMFS3/UseATSForHBOnVMFS5

 

実行例を記載します。
まずは、現在の状況を確認し、ATS有効化になっていることを確認。
■画像

f:id:japan-vmware:20161128000621p:plain■テキスト
esxcli system settings advanced list -o /VMFS3/UseATSForHBonVMFS5

Path: /VMFS3/UseATSForHBOnVMFS5
Type: integer
Int Value: 1
Default Int Value: 1
Min Value: 0
Max Value: 1
String Value:
Default String Value:
Valid Characters:
Description: Use ATS for HB on ATS supported VMFS5 volumes

==========

 

ではATS heartbeat を無効化します。

■画像

f:id:japan-vmware:20161128001354p:plain

■テキスト

esxcli system settings advanced set -i 0 -o /VMFS3/UseATSForHBOnVMFS5
esxcli system settings advanced list -o /VMFS3/UseATSForHBonVMFS5
Path: /VMFS3/UseATSForHBOnVMFS5
Type: integer
Int Value: 0
Default Int Value: 1
Min Value: 0
Max Value: 1
String Value:
Default String Value:
Valid Characters:
Description: Use ATS for HB on ATS supported VMFS5 volumes

==========


また、判断材料の1つとしてvmkernel.log を見ることも有効です。
vmkernel.log にこのような記録が多く確認できることがあります。
====================
2016-xx-xxTxx:xx:xxx.xxxZ cpuxx:xxxxx)ScsiDeviceIO: xxxx: Cmd(0x4136c3d842c0) 0x89, CmdSN 0x1088c from world 32797 to dev "naa.xxxxxxxxxxxxxxxxx082xxx" failed H:0x5 D:0x0 P:0x0 Possible sense data: 0xe 0x1d 0x0.
====================

この Sense data : 0xe 0x1d 0x0  がVMware KBに記載されている以下の内容と一致します。
====================
/var/log/vmkernel.log ファイルに、ATS の不一致を示す次のようなエラー メッセージが記録される。
2015-11-20T22:12:47.194Z cpu13:33467)ScsiDeviceIO: 2645: Cmd(0x439dd0d7c400) 0x89, CmdSN 0x2f3dd6 from world 3937473 to dev "naa.50002ac0049412fa" failed H:0x0 D:0x2 P:0x0 Valid sense data: 0xe 0x1d 0x0. 
====================


Hewlett-Packard Enterprise からはStorage観点でもドキュメントが公開されていました。
+ Array Host Disconnects While Running VMware vSphere 5.5 Update 2 and Later
http://h20564.www2.hpe.com/hpsc/doc/public/display?docId=c05228694

 

もし、障害に困っている方がいらっしゃれば、
お試し頂けると幸いです。

 

私の備忘録として記事を書きましたがどなたかに見てもらえると嬉しいです。

 

オワリ