Azure Linuxにおける時刻同期について

Azure Linuxにおける時刻同期の仕組みが、MSドキュメントの記述だとわかりにくかったので備忘録

結論

クラウドサービスである、Azure上にマーケットプレイス(MSが既定で用意しているもの)で用意されているLinuxの7.X系(CentOS,RHELなど)は、VMICTimesync  + Chrony の併用が標準であるため、基本的にはChronyの同期先を指定するのみが推奨の設定らしい。

結論に至った経緯

発端はMSのドキュメント(Azure でのLinux VMでの時刻同期)の記述がわかりにくいところ。

Linux7.X 系では、どうもVMICtimesync と Chrony が動作するようだが、VMICtimesync / Chrony をそれぞれ止めてもいいのか?どちらか片方だけで動作した場合どのようになるのか?が分からなかった。

VMICtimesyncというのは、Hyper-Vのサービス名のことで、LinuxVMにおいてはHyper-V統合サービスによると、hv_utilsというデーモンの中に含まれる動作の一つとのこと。

となると、Azure上でVMICtimesyncを止めることは難しいのではないかと考えられる。(Azureマーケットプレイスの仮想マシンが、Hyper-Vの上記デーモンの動作を標準として搭載しているため。)

このhv_utilsというデーモンは、Hyper-Vにおいては短期間での同期を行ってくれるらしいが、どうも前述のMSドキュメントを見るとHyper-Vと同じ動作といった書き方はではない。

で、じゃあVMICtimesyncはどんな同期をしてくれるのかというと、
[2018/9/19 既知の事象 (Windows Server 2012 向け) 追記] Azure 仮想マシンの時刻同期の仕組み によると、Linux VMの同期間隔はNTPサーバを設定することが必須のように書かれている。

Linux VM の場合、Hyper-V の Linux Integration Service (LIS) の機能を使って、VM の起動時や VM の一時停止を行うメンテナンスからの復帰時のみ、ホスト OS と時刻同期を行います。
Windows VM であれば、 5 秒に一度、ホスト OS と時刻を同期させる動きをしていますが、Linux VM ではこのような動作は無く、一度 VM があがってからは、NTP サーバーを参照して時刻の修正処理が行われます。

このため、NTP サーバーを設定していただくことが重要です。

この記述の太字部が、発端となったドキュメントのVMICtimesyncの動作のことらしい。となると、VMICTimesyncだけでは定期的な時刻同期は行われないので、Linux7.X でのChronyは必須と考えていいだろう。

ちなみに、英語等で調べると2020年現在でも、Linux VMの時刻同期についてはVMICtimesync + Chronyが推奨とMSから回答された、みたいなやり取りも割と目にした。(公式の回答ではないが。)

この開発チームのericsuhongaの回答でLinuxチームに問い合わせたらそう言われたみたいなことを言っている

また、Chronyで指定すべきNTPサーバは別途指定する必要があるが、Azure上にはNTPサーバが用意されていないので、仮想基盤内に別途用意するか、アウトバウンドの通信制限を解除して[time.windows.com]などの一般的なサーバを指定すればよいと思われる。

タイトルとURLをコピーしました