【re:Invent発表】Amazon Time Sync Service

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

AWSが提供するNTPサービス
Amazon Time Sync Serviceが発表されました。
Amazon Time Sync Service で時間を維持する
これまで、EC2インスタンスではpool.ntp.orgを利用していました。
pool.ntp.orgは世界規模のNTPサーバクラスタプロジェクトですが、poolに参加するサーバにはあまり厳密な規格が無いため場合に寄っては精度の低いNTPサーバが割り当てられてしまうこともありました。
日本国内のお客様であれば、日本標準時の原子時計と直結したntp.nict.jpを利用する事もありましたが多くはありませんでした。

今回、AWSの各地に原子時計が導入されたことで、AWSのユーザもより正確な時刻源を利用することが可能になりました。

ntpdによる利用方法

ntpdの初期状態

始めに、ntpqで同期状態を確認します。
初期状態では、pool.ntp.orgの様々な名前のサーバが参照されています。

$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+marisa.jp.futa. 133.100.11.8 3 u 476 256 352 2.139 -2.515 2.136
*extendwings.com 103.1.106.69 2 u 515 256 376 2.287 0.764 10.228
+jp.dan.me.uk 140.203.204.77 2 u 421 256 376 2.562 -0.336 0.533
-au.kashra.pictu 90.187.19.113 2 u 105 256 377 111.545 -4.884 0.417

/etc/ntp.confの中見を確認します。

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.amazon.pool.ntp.org iburst
server 1.amazon.pool.ntp.org iburst
server 2.amazon.pool.ntp.org iburst
server 3.amazon.pool.ntp.org iburst

ntpdへのAmazon Time Sync Serviceの登録

/etc/ntp.confに[server 169.254.169.123 prefer iburst]を追加します。
preferは、同程度の精度のserverがいた場合にこちらのサーバを優先するというオプションです。

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 169.254.169.123 prefer iburst
server 0.amazon.pool.ntp.org iburst
server 1.amazon.pool.ntp.org iburst
server 2.amazon.pool.ntp.org iburst
server 3.amazon.pool.ntp.org iburst

NTP の設定

ntpdの再起動

ntpd を再起動します。

$ sudo service ntpd restart

ntpdの同期状態の確認

169.254.169.123=Amazon Time Sync Service との同期が開始されました。

$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*169.254.169.123 10.66.1.98 3 u 26 64 3 0.215 -0.244 0.035
secure.opticner 118.103.146.184 2 u 26 64 3 8.016 0.466 0.047
sv1.localdomain 133.243.238.163 2 u 24 64 3 1.888 -0.206 0.024
static-96-244-9 192.168.10.254 2 u 25 64 3 165.039 2.394 4.494
timpany.srv.jre 133.11.204.98 2 u 22 64 3 1.556 0.488 0.033

chronyによる利用方法

新しいNTPクライアント&サーバ、chrony
chronyはntpdに変わる新しいNTPClient、NTPServerプログラムです。

ntpdのアンインストール

chronyもntpdもどちらもntpClientとして動作するため、サービスが重複しないようにntpd,ntpdateをアンインストールします。

$ sudo yum erase ntp*
Loaded plugins: priorities, update-motd, upgrade-helper
Resolving Dependencies
–> Running transaction check
—> Package ntp.x86_64 0:4.2.6p5-44.34.amzn1 will be erased
—> Package ntpdate.x86_64 0:4.2.6p5-44.34.amzn1 will be erased
–> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Removing:
ntp x86_64 4.2.6p5-44.34.amzn1 installed 1.3 M
ntpdate x86_64 4.2.6p5-44.34.amzn1 installed 110 k

Transaction Summary
=============================================================================================================================================================
Remove 2 Packages

Installed size: 1.4 M
Is this ok [y/N]:

chronyのインストール

yum コマンドでchronyをインストールします。

$ sudo yum -y install chrony
Loaded plugins: priorities, update-motd, upgrade-helper
Resolving Dependencies
–> Running transaction check
—> Package chrony.x86_64 0:3.2-1.22.amzn1 will be installed
–> Processing Dependency: libseccomp.so.2()(64bit) for package: chrony-3.2-1.22.amzn1.x86_64
–> Running transaction check
—> Package libseccomp.x86_64 0:2.3.1-2.4.amzn1 will be installed
–> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Installing:
chrony x86_64 3.2-1.22.amzn1 amzn-updates 248 k
Installing for dependencies:
libseccomp x86_64 2.3.1-2.4.amzn1 amzn-main 79 k

Transaction Summary
=============================================================================================================================================================
Install 1 Package (+1 Dependent package)

Total download size: 328 k
Installed size: 734 k
Downloading packages:
(1/2): libseccomp-2.3.1-2.4.amzn1.x86_64.rpm | 79 kB 00:00:00
(2/2): chrony-3.2-1.22.amzn1.x86_64.rpm | 248 kB 00:00:00
————————————————————————————————————————————————————-
Total 783 kB/s | 328 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : libseccomp-2.3.1-2.4.amzn1.x86_64 1/2
Installing : chrony-3.2-1.22.amzn1.x86_64 2/2
Verifying : chrony-3.2-1.22.amzn1.x86_64 1/2
Verifying : libseccomp-2.3.1-2.4.amzn1.x86_64 2/2

Installed:
chrony.x86_64 0:3.2-1.22.amzn1

Dependency Installed:
libseccomp.x86_64 0:2.3.1-2.4.amzn1

Complete!

chronyの起動

$ sudo service chronyd start
Starting chronyd: [ OK ]

chronyの同期状態の確認

chronyでも169.254.169.123と同期しています。

chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 169.254.169.123 3 6 17 55 -3255ns[ -19us] +/- 1407us
^- 203-137-182-228.jp-east-> 2 6 17 55 +150us[ +136us] +/- 4839us
^- 45.77.9.126.vultr.com 2 6 17 56 +7480us[+7469us] +/- 223ms
^- ec2-54-64-6-78.ap-northe> 2 6 17 55 -666us[ -680us] +/- 32ms
^- y.ns.gin.ntt.net 2 6 17 55 -3268us[-3281us] +/- 104ms

AWS上のchronyでは初期状態でserver 169.254.169.123 prefer iburstの同期設定が入っています。

$ cat /etc/chrony.conf
# use the local instance NTP service, if available
server 169.254.169.123 prefer iburst

まとめ

今回おそらく、DynamoDB Global TablesやAuroraMultiMasterなど、厳密な時刻を必要とするサービスのために、
各データセンターに原子時計が導入されたことで、その副次的な効果として、Amazon Time Sync Serviceが出来たのではないかとおもいます。

AWSではchronyの利用が推奨されていますが監視ツールなどでNTP同期状態を監視している場合、ntpdからchronyに変更する事で、同期状態の監視ができなくなる場合も考えられます。
Amazon Time Sync Serviceはntpdやchrony,Win32Timeでも利用が可能ですので、環境に合わせた時刻同期プログラムでお使いください。

Amazon Time Sync Serviceを利用することで、EC2でもAWSのコンソールやバックエンドシステムと同じように、うるう秒を1秒ではなく24時間かけて、平準化する Leap Smearing が適用されるようになることでうるう秒対策という問題から開放されるようになるでしょう。
正確な時刻源、そしてうるう秒対策からの開放のために、是非Amazon Time Sync Serviceを利用しましょう。
うるう秒のしくみLeap Smearingの仕組みについては、昨年のうるう秒対策資料をご参照ください。

AWS運用自動化サービス「Cloud Automator」