うるう秒が2017年元旦に追加、これはどうなのね?もうちょっと待機できる時間が良かったなぁ…と思うシステム管理者は私だけではないはず。
今日は「ntpdが動作するところのうるう秒対策」についてご報告します。
昨日から続きます。
そもそも⇒うっかりしていた
そもそもな、話になりますが、2015年の7月に発生したうるう秒の対策時に動作していたサーバは「同じうるう秒なんだから大丈夫」じゃないの?ってのを見落としていました。
要するに2015年7月以降で会社に導入したLinuxサーバがうるう秒を体験していないのですから、そのサーバについてだけ対策を実行してやればよい、ということです。
で、その対象となるのが、RaspberryPi 3で構成しているサーバだけでした。
そのため、RaspberryPi3のRaspbian(Jessie、バージョン8.0)だけに絞って対策を実行する必要がある、ということですね。
問題はntpdが動作するところ
ntpdが動作するサーバはRaspberryPiとか契約しているVPSなんかが手持ちの環境では対象になる環境といえます。
ntpdが動作していれば上位のNTPサーバから1秒増えた調整済み時間を受信して自分の時間を刻むことになります。
ntpdではSTEPモードが使われているかSLEWモードが使われているかによって挙動が変わってくる、ということになります。
ピンポイントで時刻同期するSTEPモードでは時間が巻き戻ってしまうかもしれないのでSLEWモードで細かく徐々に合わせていく時刻合わせが推奨されています。
RaspberryPi3にインストールしたRaspbian(Jessie)8.0だと、psコマンドで確認したらば、
/usr/sbin/ntpd -p /var/run/ntpd.pid -g -u XXX:XXX
でプロセスが動作していることが確認できます。
つまり今使っているRaspberryPiのRaspbianではSTEPモードでピンポイントで時刻を合わせてしまうようにデフォルト設定されている、ってことになります。問題はピンポイントで時刻合わせされることによって時間が巻き戻ってしまうことによる誤動作を防ぎたいので、動作しているntpdでSLEWモードによる動作へ変更してあげればうるう秒による時刻変動にも時間の巻き戻りが発生せずに時刻合わせを実行してくれる、ということになりまする。
一番簡単な対処方法としてntpをSLEWモードで起動するには「/etc/default/ntp」ファイルにオプション「-x」を付けてntpのリスタートを実行してやる、というのが簡単です。
----------------------------------------------
# cat /etc/default/ntp
NTPD_OPTS='-g'
# vi /etc/default/ntp
# cat /etc/default/ntp
NTPD_OPTS='-g -x'
# /etc/init.d/ntp restart
[ ok ] Restarting ntp (via systemctl): ntp.service.
# ps -ef | grep ntp
ntp 7452 1 0 12:28 ? 00:00:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -x -u 106:111
----------------------------------------------
動作の確認をしたらば、
----------------------------------------------
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-b3.nict.go. .NICT. 1 u 50 64 17 4.077 0.430 0.329
+ntp-a2.nict.go. .NICT. 1 u 54 64 17 3.662 0.339 0.170
+ntp-a3.nict.go. .NICT. 1 u 52 64 17 3.617 0.201 0.259
-ntp-b2.nict.go. .NICT. 1 u 55 64 17 4.080 0.572 0.383
----------------------------------------------
ちゃんと "*"がついているので同期は正常に動作しているのが分かります。
最終手段
当日、つまり2017年の元旦午前9時に待機できるのであれば、
いざ発生した時の最終手段として、
- dateコマンドの実行によってシステム時刻を設定し直す
あるいは
- 最悪の最悪はOS再起動
と、うるう秒カウント後にサーバの動作を確認してこういった操作を対処療法として実行するのでもなんとかなる、と言う前回の実績はあります。
時期が時期だけにOS再起動も視野に入れる必要がありますが、出来れば平穏に済んでもらいたいところです。
RaspberryPiもclockspeedインストールしてtaiclockで同期するようにしようかなぁ…、などと頭によぎりました。