20
うううううう うううううううううううううう ううううううううううう ううう

20161206 うるう秒社内勉強会 社外向け資料

Embed Size (px)

Citation preview

うるう秒対策株式会社ネットマーケティング

管理本部インフラチーム 久松剛

うるう秒 – Leap Second

うるう秒とは 原子時計の登場

地球の自転にムラにあることが分かる 地球の自転と原子時計の時刻差を 0.9 秒以内に収めるための「うるう秒」

1 秒足す( 59 分 60 秒) 1 秒減らす( 59 分 58 秒の次は 0 分 0 秒)

将来の長期的な自転速度の予測が困難なためうるう秒の実施時期は未定

国際原子時と協定世界時 1958 年 1 月 1 日 0 時を原子時 0 時として始動 国際度量衡局が管理

世界各地にある原子時計の示す時刻を加重平均して決定→協定世界時 国際原子時と協定世界時

2017 年の段階で 37 秒ずれ http://jjy.nict.go.jp/mission/page1.html

うるう秒がないと・・・?

600-700 年後には 30 分~ 60 分程度ずれる

うるう秒とコンピュータ

前回起きたこと 2015 年 7 月 1 日 Java プロセスの CPU 使用率上昇 Ruby プロセスの CPU 使用率上昇 下記コマンドを投入して回避

date `date +'%m%d%H%M%C%y.%S'`

うるう秒と NTP

1. うるう秒実施予告情報の送付 NTP パケット内 Leap Indicator が 12 月 31 日 9 時より有効になる

2. 当該時間にうるう秒の挿入 NTP  Timeは過去のうるう秒を積算していない

Linux でうるう秒を取り扱うことはできる? 08:59:60 を取得するには?

right/Asia/Tokyo という特殊なタイムゾーンを設定する :59:60 を刻んで問題なければ・・・

ただし MySQL では datetime 型で :59:60 、 :59:61 はエラーになる https://dev.mysql.com/doc/refman/5.7/en/time-zone-leap-seconds.html

うるう秒と NTP/UNIX Time の積算秒数UTC JST NTP Time UNIX Time

2016/12/31 23:59:59

2017/01/01 08:59:59 3692217599 1483228799

2016/12/31 23:59:60

2017/01/01 08:59:60 3692217600 1483228800

2016/01/01 00:00:00

2017/01/01 09:00:00 3692217600 1483228800

2016/01/01 00:00:01

2017/01/01 09:00:01 3692217601 1483228801

http://jjy.nict.go.jp/news/leaps2017.html

NTP の各モードSTEP モード

NTP サーバから取得した時刻をシステム時刻に即反映 ±128 ミリ秒以上の差があると即座

SLEW モード NTP サーバから取得した時刻をシステム時刻に徐々に反映 ±600 ミリ秒を超過した差

即座に反映 システム再起動などを想定

±600 ミリ秒以内の場合 1 秒間に最大 5 ミリ秒ずつ修正

参考: http://www.seiko-sol.co.jp/leap-second/no-03/

NTP の各モードとうるう秒STEP モード

59 秒が 2 度発生するSLEW モード

秒間 5 ミリ秒ずつ修正 200 秒かけて修正完了

STEPモード SLEWモード8:59:59.000000 8:59:59.000000

... ...8:59:59.999999 8:59:59.9999998:59:59.000000 9:00:00.000000

... ...8:59:59.999999 ...9:00:00.000000 ...

... ...9:03:20.000000 9:03:20.000000

Windows は?1. Leap Indicator の反映無し2. 実際の時刻より 1 秒進む3. 「この時間の差は、次の同期のときに解決されます」

https://support.microsoft.com/ja-jp/kb/909614

うるう秒と対応

対策一覧挿入させない

外部 NTP サーバの参照を辞める データセンターなどだとやられている 仮想環境だと時刻ずれのリスク

挿入する

NTP SLEW モード

ntp-4.2.6p5-30.24.amzn1(AmazonLinux) 以降

ntpd を SLEW モードで起動1. ntpd を停止2. ntpd の起動オプションに -x を追加3. ntpd を起動

ntp-4.2.6p5-30.24.amzn1 より古い場合 バージョンアップをしないと下記の振る舞いをする(バグ)

Leap Indicator を受信 Linux Kernel には渡さない うるう秒になったら 1 秒戻す (厳密には 9:00:00 を過ぎてから 8:59:00 に戻す) https://bugzilla.redhat.com/show_bug.cgi?id=1190619 https://forums.aws.amazon.com/ann.jspa?annID=3064

ntp-4.2.6p5-30.24.amzn1 より古い場合ntpd を更新する場合

ntpd を更新後、前の対応を実施glibc が上がるので更新しない場合

1. うるう秒挿入前 ntpd を止める

2. LeapIndicator のリセット ntptime –s 0

3. うるう秒挿入後 SLEW モードで ntpd を起動

まとめ

基本方針 (AWS)

1. 対象サーバの ntp 更新 glibc が上がって困るパッケージがないか調査

2. ntpd を slew モードで起動3. 当日は CPU のリソースグラフを睨みながら乗り越え4. date コマンドの打ち込み

date `date +'%m%d%H%M%C%y.%S'`