AWS Developper Forumで、EC2インスタンスでの時刻の同期についてというスレッドがあり、EC2の時刻同期について議論されていたので、NTPを利用した時刻同期をSUZ-LAB CentOS AMIで試してみました。

注意として、このAMIは、/proc/sys/xen/independent_wallclockが設定することができるので、この値を0(デフォルトですが)にすることで、仮想サーバホストのclock(NTPで同期されている)を参照することが可能です。

ということで、上記設定で、NTPでの同期は必要ないかもしれませんが、/proc/sys/xen/independent_wallclockが設定できないものもあるようなので、そのような時のためにに予習しておきます。

まずは、/proc/sys/xen/independent_wallclockの値を1にします。
(こうすることで、時刻の変更ができるようになります)
直接書き換えるのもいいのですが、設定が永続的になるように/etc/sysctl.confに下記を加えるようにします。

# For ntpd on Xen DomU.
xen.independent_wallclock = 1

次に、下記のように設定内容を反映します。

# sysctl -p
...
xen.independent_wallclock = 1

そして、NTPをインストールして、起動してみます。

# yum install -y ntp
# /etc/init.d/ntp start

すると/var/log/messagesに下記のような出力があり、起動できません。

May 23 20:23:44 suz-lab ntpd[2835]: ntpd 4.2.2p1@1.1570-o Sat Dec 19 00:58:16 UTC 2009 (1)
May 23 20:23:44 suz-lab ntpd[2836]: precision = 1.000 usec
May 23 20:23:44 suz-lab ntpd[2836]: Listening on interface wildcard, 0.0.0.0#123 Disabled
May 23 20:23:44 suz-lab ntpd[2836]: Listening on interface lo, 127.0.0.1#123 Enabled
May 23 20:23:44 suz-lab ntpd[2836]: Listening on interface eth0, 10.150.173.229#123 Enabled
May 23 20:23:44 suz-lab ntpd[2836]: kernel time sync status 0040
May 23 20:23:44 suz-lab ntpd[2836]: getaddrinfo: "::1" invalid host address, ignored
May 23 20:23:44 suz-lab ntpd[2836]: cap_set_proc() failed to drop root privileges: Operation not permitted

::1という記述からIPv6系の設定が影響していると考え、/etc/ntp.confを下記のようにしてみました。
(restrict -6の部分をはずし、セキュリティ関係を厳しくしました)

restrict default ignore
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
server  127.127.1.0
fudge   127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift

この設定ファイルで/etc/init.d/ntp startすると、 /var/log/messagesの出力は下記のようになりました。

May 23 20:32:05 suz-lab ntpd[2890]: ntpd 4.2.2p1@1.1570-o Sat Dec 19 00:58:16 UTC 2009 (1)
May 23 20:32:05 suz-lab ntpd[2891]: precision = 1.000 usec
May 23 20:32:05 suz-lab ntpd[2891]: Listening on interface wildcard, 0.0.0.0#123 Disabled
May 23 20:32:05 suz-lab ntpd[2891]: Listening on interface lo, 127.0.0.1#123 Enabled
May 23 20:32:05 suz-lab ntpd[2891]: Listening on interface eth0, 10.150.173.229#123 Enabled
May 23 20:32:05 suz-lab ntpd[2891]: kernel time sync status 0040
May 23 20:32:06 suz-lab ntpd[2891]: cap_set_proc() failed to drop root privileges: Operation not permitted

問題は「cap_set_proc() failed to drop root privileges: Operation not permitted」ですが、
これについて調べてみると、Not able to load capalility.ko on 2.6.18-xenU-ec2-v1.4にあるような
カーネルモジュール(2.6.18-xenU-ec2-v1.5)の問題のようで、解決策が見つからなかったので、下記のように/etc/sysconfig/ntpdを調整して回避しました。

#OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"
OPTIONS="-x -p /var/run/ntpd.pid"
...

-xを指定することで、/etc/init.d/ntp start時に時刻同期(ntpdate)するようにもなります。
/var/log/messagesの出力も下記のようになり、
無事、ntpdateとntpdが機能していることがわかります。

May 23 20:37:26 suz-lab ntpdate[2952]: step time server 210.189.110.68 offset 0.001598 sec
May 23 20:37:26 suz-lab ntpd[2956]: ntpd 4.2.2p1@1.1570-o Sat Dec 19 00:58:16 UTC 2009 (1)
May 23 20:37:26 suz-lab ntpd[2957]: precision = 1.000 usec
May 23 20:37:26 suz-lab ntpd[2957]: Listening on interface wildcard, 0.0.0.0#123 Disabled
May 23 20:37:26 suz-lab ntpd[2957]: Listening on interface lo, 127.0.0.1#123 Enabled
May 23 20:37:26 suz-lab ntpd[2957]: Listening on interface eth0, 10.150.173.229#123 Enabled
May 23 20:37:26 suz-lab ntpd[2957]: kernel time sync status 0040
May 23 20:37:26 suz-lab ntpd[2957]: frequency initialized 0.000 PPM from /var/lib/ntp/drift

Linuxでは、/proc/sys/xen/independent_wallclockが利用できないのでNTPの設定をしなければなりません。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら