新規事業部の高田です。
この記事は、先日(2017-11-30)の AWS re:Invent 2017 で公開された Amazon Time Sync Service を AWS EC2 で動かしている Ubuntu server でサクっと適応する手順のメモ的な何かです。
私が設定するまでのコマンドの履歴を元にまとめているので、そのまま使えばきっと普通に動くはずです。
Amazon Time Sync Serviceについて
NTPで配信される時刻同期サービスで、各地域で冗長化している衛星接続の原子時計を使って高精度な時刻参照を提供します。このサービスは追加料金なくすぐに全リージョンのVPCの稼働中の全インスタンスで利用できます。
このサービスには 169.254.169.123 のリンクローカル IP アドレスを介してアクセスできます。つまり外部のインターネットアクセスする必要なく、プライベートサブネット内から安全にアクセスできます。
出典:Amazon Time Sync Service で時間を維持する – Amazon Web Services ブログ
なるほどなるほど。
この IP を NTP サーバーとして扱えば良いわけですね。
余計なものはインストールしない
サーバ運用の鉄則ですね。先ずは、入っているものでなんとかする。
今回は Ubuntu server なので、 systemd-timesyncd を使いましょう。
systemd-timesyncd とは
systemd-timesyncdは、ローカルシステム時刻をリモートの NTP サーバーと同期させるために使用できるシステムサービスです。
また、時刻が同期されるたびにローカルの時間をディスクに保存し、システムにバッテリ・バッファ付きRTCチップがない場合でも単調に進歩するように、これを使用して次回の再起動時にシステムのリアルタイム時刻を進めることがあります。
出典:systemd-timesyncd.service, systemd-timesyncd – Network Time Synchronization
このようなものが標準で入っているので、積極的に使っていきましょう。
確認〜導入
先ず、現状の動作を確認します。
$ systemctl -l status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: active (running) since Tue 2017-10-31 05:25:55 UTC; 1 months 3 days ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 549 (systemd-timesyn)
Status: "Synchronized to time server 91.189.94.4:123 (ntp.ubuntu.com)."
Tasks: 2
Memory: 500.0K
CPU: 1.691s
CGroup: /system.slice/systemd-timesyncd.service
└─549 /lib/systemd/systemd-timesyncd
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
どうやら、長いこと同期されていないっぽいです。
設定を確認してみましょう。
$ cat /etc/systemd/timesyncd.conf # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Entries in this file show the compile time defaults. # You can change settings by editing this file. # Defaults can be restored by simply deleting this file. # # See timesyncd.conf(5) for details. [Time] #NTP= #FallbackNTP=ntp.ubuntu.com
どうやら、同期先がコメントアウトされているようですね。
編集して、先ほどの AWS から提供された IP アドレスに変更しましょう。
$ cat /etc/systemd/timesyncd.conf # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Entries in this file show the compile time defaults. # You can change settings by editing this file. # Defaults can be restored by simply deleting this file. # # See timesyncd.conf(5) for details. [Time] NTP=169.254.169.123 #FallbackNTP=ntp.ubuntu.com
そして、設定を反映させましょう。
$ sudo service systemd-timesyncd stop $ sudo service systemd-timesyncd start
設定を反映させたら、確認をしましょう。
$ sudo systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: active (running) since Mon 2017-12-04 01:34:34 UTC; 13s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 5636 (systemd-timesyn)
Status: "Synchronized to time server 169.254.169.123:123 (169.254.169.123)."
Tasks: 2
Memory: 244.0K
CPU: 4ms
CGroup: /system.slice/systemd-timesyncd.service
└─5636 /lib/systemd/systemd-timesyncd
Dec 04 01:34:34 ip-172-31-14-25 systemd[1]: Starting Network Time Synchronization...
Dec 04 01:34:34 ip-172-31-14-25 systemd[1]: Started Network Time Synchronization.
Dec 04 01:34:34 ip-172-31-14-25 systemd-timesyncd[5636]: Synchronized to time server 169.254.169.123:123 (169.254.169.123).
悪くなさそうですね。
設定は以上です。
AWS 上で使うなら、やはり同サービス内にある NTP サーバーに向けておきたいですよね。
また、常駐させるサービスも限りなく少ないほうがいいですね。「メモリの1バイトは血の一滴と思え」は昨今の事情には即していない気もしますが、可能な限り目的となるアプリケーションにメモリを分けてあげたいところです。
ではでは。