Posterous theme by Cory Watilo

Filed under: VMware

[linux] VMware ESX 4.1 on HP Blade System における時刻ずれ問題

ある時、HP Blade System上で動作しているVMware ESX 4.1において時刻ずれが発生したのでまとめ

出てくるのはこういった方々

  • Bladeエンクロージャー
  • Bladeサーバー
  • ESXホスト
  • GuestOS(Linux/Windows)

上記それぞれのシステムにおける TimeZone (TZ)JST に設定されている

 

調査したところ、下記のように動作していることが判明

 

))) now

# date
2011/01/01 10:00:00 JST

 

))) Bladeエンクロージャーには通電された状態

  1. Power OFF
  2. ESXホストは 10:00 (TZ:JST) を UTC に変換し、-9したハードウェアクロックを 1:00 にセット
  3. Bladeサーバーで時刻を確認すると、1:00 (TZ: JST) となってしまう
  4. Bladeエンクロージャーの時刻に変化はないため、10:00 (TZ:JST) になっている
  5. Power ON
  6. Bladeサーバーは 1:00 (TZ:JST) のまま
  7. ESXホストはハードウェアクロック(Bladeサーバー)から得た 1:00 をUTCとして扱い、+9した 10:00 (TZ:JST) をシステム時間にセット
  8. GuestOSはハードウェアクロック(ESXホスト)から得た、10:00 (TZ:JST) をシステム時間にセットする

 

調査したときに、上記のような動きをしていることが分かったのだが、通常の運用では特に問題ないように見えていた(サーバーなので電源断など基本ないため)

だが、UPSの導入による動作試験時にこの時刻ずれの扱いのため問題が発生する

 

その問題に遭遇後に調査した結果、分かった動作が下記の通り

 

))) Bladeエンクロージャーへの電源供給を停止

  1. Power OFF
  2. ESXホストは 10:00 (TZ:JST) を UTC に変換し、-9したハードウェアクロックを 1:00にセット
  3. Bladeサーバーで時刻を確認すると、1:00 (TZ: JST) となってしまう
  4. Bladeエンクロージャーの時刻に変化はないため、10:00 (TZ:JST) になっている
  5. Power Failure - Recovery
  6. Power ON
  7. Bladeエンクロージャーの時刻は 10:00 (TZ:JST) になっている
  8. Bladeサーバーはエンクロージャーから時刻を取得するため 10:00 (TZ:JST) となる
  9. ESXホストはハードウェアクロック(Bladeサーバー)から得た 10:00UTC として扱い、+9した 19:00 (TZ:JST) をシステム時間にセットする
  10. GuestOSはハードウェアクロック(ESXホスト)から得た 19:00 (TZ:JST) をシステム時間にセットする

 

ということで、UPS試験から起動したサーバーはすべて時間が狂い、ドメイン環境も無茶苦茶になり、おかげでMSFCもおかしくなりましたとさ

 

ESXのTime Zoneについては、下記のVMware KBにあるとおり認められているようなのに、上記のように動作してしまう

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=...

さらにESXホストを調査したところ

/etc/init.d/halt/etc/rc.d/rc.sysinit のどちらにも他のLinuxにもあるような "UTC=true" や "UTC=false" などの設定をチェックをしておらず、VMware KBどおりに設定したとしても、常にUTCとしてハードウェアクロックを扱うことが判明

 

VMwareの「ESXスタートガイド ESX4.0」によると "ハードウェアクロックはUTCに設定されていること" という記述があり、こちらに従う方が正しい様子

 

もし、JSTで運用したい場合は、ESXホストに手を入れる必要がある

/etc/init.d/halt

before

 CLOCKFLAGS="$CLOCKFLAGS --systohc --utc"

after

CLOCKFLAGS="$CLOCKFLAGS --systohc --localtime"

 

/etc/rc.d/rc.sysinit

下記の行を最終行に追加

/sbin/hwclock –hctosyc --localtime

 

もちろん、こんなことすると VMware の正式サポートは受けることができない

で、最初に今回のシステムを構築したのは、HPのBlade SystemとVMwareのプロフェッショナルであるHPエンジニアだったりしたのでした