では、今日も授業を始める。今日のテーマは「うるう秒」だ
うるう秒って何?
うるう秒とは、原子時計に基づく正確な時刻と、地球の自転による時刻との間に生じるズレを調整するために
追加もしくは削除される秒のことだ。
何それ?
地球は、太陽の周りを回っている。このことを公転という。
地球が太陽の周りを公転しているという。
地球は自分自身が回転している。このことを自転という。
地球の自転は、1回転で23時間56分かかる。地球は24時間で、太陽の方を向く。
地球が1回転する時間を、人間が1日って勝手に決めてるの?
うむ。地球がひとまわりする時間を1日と定義した。
地球の自転って、同じ速さで回ってるの?
Noだ。地球の自転は常に同じ速さで回っているわけではない。
自転にもズレが生じるのだ。ズレが1秒に近づくと、時刻を調整するために、うるう秒の挿入が行われる。
うるう秒は、地球の自転による時刻のズレを修正するためのものね。
うるう秒とは異なるが、うるう年は4年に1回ある。公転の周期は365日ではなくて、
それよりも約6時間多いからなんだ。つまり、地球が4回公転すると1日多くなる。そこで、うるう年で調整するようになっている。
だから4年に1回ってことか~。
うるう秒に話を戻すと、例えば、7月1日の午前9時に1秒挿入される場合、
8時59分59秒→8時59分60秒→9時00分00秒というように、
「8時59分60秒」をはさむんだ。これがうるう秒だ。
その日は1秒だけ長くなるってことね。
うるう秒の時刻調整は1972年に実施されてから、今までに数十回実施されている。過去の履歴は以下を見るといい。
うるう秒はいつ実施されるか決まっていない。次回いつになるか以下サイトで公開される。
http://jjy.nict.go.jp/QandA/data/leapsec.html
最近は、2年~3年くらいで、うるう秒の調整が実施されてるのか~。
うるう秒実施日 調整時間
第27回 2017年1月1日 +1秒
第26回 2015年7月1日 +1秒
第25回 2012年7月1日 +1秒
第24回 2009年1月1日 +1秒
第23回 2006年1月1日 +1秒
第22回 1999年1月1日 +1秒
第21回 1997年7月1日 +1秒
第20回 1996年1月1日 +1秒
第19回 1994年7月1日 +1秒
第18回 1993年7月1日 +1秒
第17回 1992年7月1日 +1秒
第16回 1991年1月1日 +1秒
第15回 1990年1月1日 +1秒
第14回 1988年1月1日 +1秒
第13回 1985年7月1日 +1秒
第12回 1983年7月1日 +1秒
第11回 1982年7月1日 +1秒
第10回 1981年7月1日 +1秒
第 9回 1980年1月1日 +1秒
第 8回 1979年1月1日 +1秒
第 7回 1978年1月1日 +1秒
第 6回 1977年1月1日 +1秒
第 5回 1976年1月1日 +1秒
第 4回 1975年1月1日 +1秒
第 3回 1974年1月1日 +1秒
第 2回 1973年1月1日 +1秒
第 1回 1972年7月1日 +1秒
日本時間(JST)はUTC(協定世界時)から+9時間のため、日本時間の7月1日午前9時もしくは日本時間の1月1日午前9時に、うるう秒の調整が実施される。
どうしてITエンジニアが、うるう秒を知っていないといけないの?
うるう秒の調整が実施されたタイミングで、システムにトラブルが発生する可能性があるからだ。
でも、実際は発生しないんでしょう?
そんなことはない。過去に何件も発生している。
うるう秒が挿入されたことでシステム障害が発生している。
2012年7月1日のうるう秒のときは、特定バージョンのLinuxカーネルが動いている
Linuxサーバ上で、MySQLやJavaなどを利用している場合にCPU使用率が急上昇して障害になった。
この時はLinuxカーネルの不具合が原因だった。
Red Hat Enterprise Linux 6(RHEL6)やUbuntu 12.04などの比較的、新しいLinuxのバージョンで不具合を起こした。
2012年は、SNSのmixi(ミクシィ)やLinkedIn、Reddit、Yelpなどが、うるう秒の時刻挿入により障害になって、ニュースにもなっていた。
うるう秒によって、ソフトウェアが異常を起こすことがあるってことね。
だから、エンジニアはうるう秒が挿入される日を把握しておくべきなのか~。
2015年7月1日にうるう秒が挿入されたときも、2012年よりは少なくなったが、影響を受けたシステムがあった。
2017年1月1日(元旦)に、うるう秒が挿入されると公開されたとき、
ツイッターとかでは、「年末年始の休みがなくなった~」「うるう秒対応のため早朝から出勤」
「なんで元旦なんかにやるんだ~」など、エンジニアが悲鳴をあげていた。
障害が発生したら、ソフトウェアがうるう秒に対応していなかった、もしくは、
ソフトウェアの不具合で、うるう秒の挿入に耐えれなかったということね。
うるう秒って、事前に対策できないの?
対策はできる。ミッションクリティカルなサービスを提供している一部の金融機関などは、
「うるう秒」が発生するテスト環境を作って、事前テストで動作確認を行うなど、
うるう秒の日に備える企業もあった。
1.うるう秒は、原子時計の正確な時刻と、地球の自転によるズレを調整するために追加もしくは削除される秒のこと 2.公転は、地球が太陽の周りを回ること 3.自転は、地球自身が回転すること 4.地球の自転は1回転で23時間56分。地球は24時間で太陽の方を向く 5.うるう秒の時刻調整は1972年から実施 6.2012年7月1日のうるう秒は、mixiやLinkedIn、Reddit、Yelpなどで障害発生 7.うるう秒の24時間前から LI(Leap Indicator)というフラグが「01」に設定される 8.うるう秒の対策はNTPを止める、もしくはNTPをslewモードで動かす(tzdataなどのアップデートも必要なケースあり) 9.Linuxサーバはうるう秒の影響を受ける可能性がある 10.Windowsサーバはうるう秒の影響を受けない
技術的なところを説明しよう。サーバやネットワーク機器などは、NTP(Network Time Protocol)という時刻同期のプロトコルを使って、
時間を正確に合わせることをしている。
NTPによる時刻同期ね。
もちろん、事前に、機器側(サーバやネットワーク機器側)で、NTPで時刻同期するための設定を有効にする必要がある。
Linux OSはntpdというデーモンによって、NTPプロトコルで時刻同期が行われる。
これでNTPによって国際原子時と同期されるようになり、
うるう秒の挿入により1秒が追加された場合、ソフトウェアが対応できていないと障害になる。
NTPで時刻同期していない機器は、うるう秒によるシステムトラブルは発生しない。
8時59分59秒→8時59分60秒→9時00分00秒というように、1秒長くなるわけだから、
NTPで時刻同期していない場合は、普通に時刻が1秒ズレるだけだ。
うるう秒のタイミングだけ、NTPによる時刻同期の設定を無効にしておけば、うるう秒の影響は受けないってことね。
うむ。NICT(情報通信研究機構)のNTPサーバは、うるう秒の24時間前から
LI(Leap Indicator)というフラグが「01」に設定される。
NTPパケットの中のLIビット(Leap Indicator)をLinuxサーバが受信しないように、
うるう秒が行われる24時間前から、うるう秒の実施後まで、外部NTPサーバへ参照しないようにする必要がある。
LinuxサーバがLIビットを受信しなければ影響を受けないってことね。
うむ。他の対策として、うるう秒挿入前に、ntpdをslewモードで起動するという対策もある。
NTPの時刻同期のモードは、stepモードとslewモードの2つがある。
通常はデフォルトの同期方法がstepモードになっている。
stepモードは、時刻を一気に同期するモードで、
stepモードはすぐに時刻を合わせることができるが、時間の逆行が発生する可能性がある。
slewモードは、徐々にゆっくり時刻を合わせていくモードだ。
ntpdをslewモードに設定すれば過去の時刻に戻るということを避けられるが、
事前にtzdataのアップデートが必要になることもある。
うるう秒は、めちゃ大変だね。
Linuxサーバは、うるう秒の影響を受ける可能性があるが、
Windowsサーバは、影響を受けないようになっている。
これも覚えておいて。
は~い
では、今日はここまで。
今回のまとめ
次の章へ