VMWare ESXi上 のVMで完全な時刻同期を目指す(Centos5)
Posted in サーバ運用 on 07/18/2009 03:12 pm by nukesaku調べれば調べるほど奥が深いESXi上の仮想マシン(VM)の時刻同期。
どうやら現状ではNTPを使うのが最善策のようです。
まずお手軽な解決策として考えられるのは、
(1) VMware Toolsの時刻同期設定オプションを設定する
(2) NTPを利用する
のどちらか。
さらに「時刻がずれる」という現象そのものにも2パターンあって、
(A) 時刻が進んでしまう
(B) 時刻が遅れてしまう
という、それぞれのケースについて考えなければなりません。
以前は(1)が鉄板だと思われていた(というか俺が思っていた)のですが、この方法は(B)のケースでしか有効でない事が判明しました。
なぜなら(A)の時刻が進んでしまうのはLinux2.6系で設定されている毎秒1000回(わお)というタイマー割り込みをVM上ではエミュレートできないためで、エミュレートしきれない→タイマー取りこぼし発生→遅延が発生したと思い込んだカーネルが補正しようと時刻を進めてしまう、という堂々巡りの果てに引き起こされる問題であり、VMWare Toolsの設定で何とかなる範疇を超えてしまっているからです。
Time in virtual machine drifts due to hardware timer drift
この(A)の問題については、カーネルパラメータを変更する事でタイマー割り込み頻度をVM上での適正な値に抑えることができます。必要なパラメータについては、VMWare社がKBとして公式に発表しているので、こちらをご参照下さい。
Timekeeping best practices for Linux
ちなみにこのKBによれば、「全ての場合においてVMware Toolsの時刻同期設定(Periodic Time Synchronization)よりも、NTPを(優先して)使え」と明言します。生み親にまで否定されてしまった時刻同期設定オプションの立場ったら。
上記パラメータを設定をすることで時刻のずれをかなり小さくする事ができますが、カーネルパラメーターをいじるのが不安だとか、完璧な時刻同期が必要なんだ!という方はやはりNTPを使うのが良いでしょう。ただしNTPを利用する場合は別途UDP123番のポートを開く必要があるので、ネットワーク運用規定上NGな場合などは別途ネットワーク上にNTPサーバを立てて下さい。最近のルーターはNTPサーバ機能がついているものも多いので、外向きルータ(デフォルトゲートウェイとか)への追加設定とVMマシンへのNTPインストール&設定だけで済むんじゃないでしょうか。
ちなみにNTPを利用する場合はVMware Toolsの時刻同期設定(Periodic Time Synchronization)を無効にする必要があります。つまり(1)と(2)の組み合わせは不可ということですね。完全に居場所を失ってますね時刻同期設定オプション。
よくわかんないけどがんばってください。