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の設定をしなければなりません。