Xen上でNTPをインストールしてハマってみたメモ

PUMA


NTPを導入すべく、Xen上の環境(Linux)でインストール〜動作検証を行ったのですが、見事にハマりました。
そのメモを残しておくことにします。


# 仮想OS上で起こる事象の模様ですので、XenXenベースの商用プロダクト(Virtual Ironとか。対応されていそうだけど。)を触っている方、気をつけませう。
# VMWareでも似たようなことが起こる可能性があるみたい。


Debian GNU/Linux(etch)でntp(サーバ)をインストール。まぁ普通に以下のような感じ。

# apt-get update
# apt-get install ntp ntp-doc

で、次に/etc/ntpd.confの設定。
serverやrestrictのIPアドレスは適切な値を入力してください。(ここでは4つのNTPサーバとの同期を前提とし、IPアドレスはxxx.xxx.xxx.xxxにしています)


# ntpの設定については、下記のサイトにかなり詳しく載っています。ご参考まで。
# http://www.asahi-net.or.jp/~AA4T-NNGK/ntpd.html

# /etc/ntp.conf, configuration for ntpd

driftfile /var/lib/ntp/ntp.drift 
statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable 

server xxx.xxx.xxx.xxx prefer iburst
server xxx.xxx.xxx.xxx iburst
server xxx.xxx.xxx.xxx iburst
server xxx.xxx.xxx.xxx iburst

restrict default ignore
restrict xxx.xxx.xxx.xxx
restrict xxx.xxx.xxx.xxx
restrict xxx.xxx.xxx.xxx
restrict xxx.xxx.xxx.xxx

restrict 127.0.0.1
restrict xxx.xxx.xxx.0 mask 255.255.255.0 nomodify notrap noquery

で、サービスのリスタート(スタート)。

# /etc/init.d/ntp restart

NTPサーバでの動作確認。

# ntpq -pn
     remote           refid          st t when poll reach   delay   offset  jitter
==================================================================================
*xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx     3 u   25  128  377    0.615  -10.414   6.128
 xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx     4 u  102  128  377    0.692   -8.291   9.209
 xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx     4 u   18  128  377   22.656  -11.170  11.661
 xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx     4 u  109  128  377   22.393  -13.528  16.404

ここまではOK。問題はココから。


次に、サーバとは別のクライアントからntpdateを使って時刻同期をやってみたところ。。。
# ntpdateは、Debianの場合、apt-get install ntpdate あたりで。
# 下のXXX.XXX.XXX.XXXは、今回構築したXen上で稼動している仮想OSのNTPサーバ。

# ntpdate -q XXX.XXX.XXX.XXX
server XXX.XXX.XXX.XXX, stratum 16, offset - 0.311207, delay 0.02571
13 Jun 14:16:09 ntpdate[6741]: no server suitable for synchronization found

ずっと、この調子。デバッグモードでは、

# ntpdate -d XXX.XXX.XXX.XXX
13 Jun 14:19:51 ntpdate[6946]: ntpdate 4.2.2p4@1.1585-o Sat Oct 21 14:37:06 UTC 2006 (1)
transmit(XXX.XXX.XXX.XXX)
receive(XXX.XXX.XXX.XXX)
transmit(XXX.XXX.XXX.XXX)
receive(XXX.XXX.XXX.XXX)
transmit(XXX.XXX.XXX.XXX)
receive(XXX.XXX.XXX.XXX)
transmit(XXX.XXX.XXX.XXX)
receive(XXX.XXX.XXX.XXX)
transmit(XXX.XXX.XXX.XXX)
XXX.XXX.XXX.XXX: Server dropped: strata too high
server XXX.XXX.XXX.XXX, port 123
stratum 16, precision -20, leap 11, trust 000 
refid [XXX.XXX.XXX.XXX], delay 0.02580, dispersion 0.00003
transmitted 4, in filter 4
reference time:    00000000.00000000  Thu, Feb  7 2036 15:28:16.000
originate timestamp: ca19fcf7.12fb9eb6  Wed, Jun 13 2007 14:19:51.074
transmit timestamp:  ca19fcf7.629dd7ec  Wed, Jun 13 2007 14:19:51.385
filter delay:  0.02585  0.02582  0.02629  0.02580
         0.00000  0.00000  0.00000  0.00000
filter offset: -0.31117 -0.31118 -0.31144 -0.31117
         0.000000 0.000000 0.000000 0.000000
delay 0.02580, dispersion 0.00003
offset -0.311175

13 Jun 14:19:51 ntpdate[6946]: no server suitable for synchronization found

このような感じ。

最後に出る「no server suitable for synchronization found」を調べてみたところ、このエラーが起こるのは、

  • FW等で123番ポートがフィルタされている
  • NFSサーバ側でntpdが起動して間もないので時刻の同期がまだ行われていない(しばし待て)


の状況で良く起こるものらしい。


しかし、iptablesも確認したし、
冒頭で「server XXX.XXX.XXX.XXX, stratum 16, offset -0.311207, delay 0.02571」が出ているあたり、NTPサーバへの接続は出来ているらしい。
サーバ側で、/var/log/daemon.logを確認しても、「synchronized to xxx.xxx.xxx.xxx , stratum 3」と出力されている。(上位のNTPサーバと同期してるよ、と)
うーむ。


仮想ハードウェアのレイヤが怪しいなぁと思いつつ、調べていくと核心にたどりつきました。
http://ken-etsu-tech.blogspot.com/2007/05/xendomuntp.html


以下、引用。

XenのDomUでntpdやntpdateを実行すると、時刻同期できないことがある。
これは、XenがDom0からのみ時刻を更新できるというXenの仕様による。

Dom0で時刻を合わせていれば、DomUも正確な時刻を得ることができるので、通常は問題にならない。
しかし、Dom0とDomU、もしくはDomUとDomUで違う時刻源に同期しなければならない場合や、ntpdの動作をXenを使って検証する場合などでは問題になる。


大ビンゴ。
が、ちゃんと制御は出来る模様。またまた引用。

この動作は、カーネルパラメータxen.independent_wallclockにより制御できる。通常、このパラメータの値は0だが、これを1にすればDomUで独自にntpdを正常に実行できる。実行途中ならば、

# sysctl xen.independent_wallclock=1

もしくは、

# echo 1 >/proc/sys/xen/independent_wallclock

のいずれかを実行する。

起動時から動作を変更するなら、/etc/sysctl.confに以下の行を追加する。
# For ntpd on Xen DomU.xen.independent_wallclock = 1


上記の設定をした後は全く問題なく動きました。ハマるわー、これ。

# ntpdate -q XXX.XXX.XXX.XXX
server XXX.XXX.XXX.XXX, stratum 4, offset -0.345743, delay 0.02573
13 Jun 14:29:14 ntpdate[10395]: adjust time server XXX.XXX.XXX.XXX offset -0.345743 sec

上記は、正しい動作時のntpdate。


仮想化技術Xen-概念と内部構造

仮想化技術Xen-概念と内部構造

  • 作者: David Chisnall,日本仮想化技術(株),渡邉了介
  • 出版社/メーカー: 毎日コミュニケーションズ
  • 発売日: 2008/08/20
  • メディア: 単行本(ソフトカバー)
  • 購入: 3人 クリック: 61回
  • この商品を含むブログ (26件) を見る