Aldebaran~夢追い人の備忘録~

インフラエンジニアです。主にサーバー系を中心に私が学習してきたことを備忘録程度にまとめています。

【Chrony】stepモードとslewモードの違い【CentOS7】

Chronyとは

CentOS7で標準となったNTPクライアント兼サーバーのことで、デーモンはchronydである。
CentOS7でntpdも利用可能であるが、Chronyとの同時起動は不可となっている。
(Chrony起動中はntpdは起動できない。逆も同じ)

◆chronydとntpdの違い

①NTPのバージョンが異なる
chronydはNTPバージョン3、ntpdはNTPバージョン4を使用する。
(バージョン3はバージョン4と完全互換性があります)

②ハードウェアクロックとの同期
chronydはハードウェアクロックとの同期が可能、ntpdは不可。

  

◆stepモードとslewモードの違い

 ・stepモード(Chronyのデフォルト)
NTPサーバーとの時刻がズレている場合、すぐに正しい時刻に合わせます。
※ただし、NTPサーバーより時刻が進んでいた場合、過去に戻る可能性があり機能に影響を及ぼす可能性があります。

 ・slewモード
NTPサーバーとの時刻がズレている場合、徐々に正しい時刻に合わせます。
※NTPサーバーより時刻が進んでいた場合でも、過去に戻る可能性はありませんが同期に時間が掛かります。

◆検証環境
【OS】CentOS Linux release 7.5.1804 (Core)
【Chrony】chrony-3.2-2.el7.x86_64
 

◆動作検証 
今回はわざと時間をずらした時にstepモードとslewモードで実際にどのような動作をするのか検証します。
・stepモード
①現在の時刻を確認

# date 
2018年 6月 19日 火曜日 22:00:00 JST 

②時間を5分遅らせる
# date --set="21:55" 

③chronyd再起動
※デフォルトでstepモードで動作しているため特に追加設定もなく再起動します。
# systemctl restart chrony 

④時刻確認
※確認コマンドを連続で入力し、システムクロックを確認します。
# date 
2018年 6月 19日 火曜日 21:55:00 JST 
# date 
2018年 6月 19日 火曜日 21:55:01 JST 
# date 
2018年 6月 19日 火曜日 21:55:02 JST 
# date 
2018年 6月 19日 火曜日 22:00:03 JST 
3秒後に正確な時刻に同期されました。なお、この動作はchronydの設定によるものです。
設定ファイル/etc/chrony.confにmakestep 1.0 3という設定があります。(デフォルト)
設定値の意味としては「chronyが起動してから1.0秒以上のズレが3回続いた場合にstepモードで同期する。」です。
※時間を進めた場合も同様の動作となり、時間が過去に戻ります。

・slewモード
①chronyd設定変更
※設定ファイルを編集してstepモードからslewモードに変更します。(赤字が追加箇所)
# vi /etc/chrony.conf 
~変更箇所~
#makestep 1.0 3      ※makestepをコメントアウトします。
leapsecmode slew 
     ※slewモードで動作させる設定を追加します。

②現在の時刻を確認
# date 
2018年 6月 19日 火曜日 22:00:00 JST 

③時間を5分遅らせる
# date --set="21:55" 

④chronyd再起動
※①で変更した設定を反映させます。
# systemctl restart chrony 

⑤時刻確認
※確認コマンドを連続で入力し、システムクロックを確認します。
# date 
2018年 6月 19日 火曜日 21:55:00 JST
# date 
2018年 6月 19日 火曜日 21:55:01 JST 
# date 
2018年 6月 19日 火曜日 21:55:02 JST 
# date 
2018年 6月 19日 火曜日 21:55:03 JST 
# date 
2018年 6月 19日 火曜日 21:55:04 JST 
※目に見える変化は特に無く、同期されている感じがしません。

~10分後~
現在の時刻は22:10:00です。再度システムクロックを確認します。
# date 
2018年 6月 19日 火曜日 22:05:48 JST

※少し実際の時刻に近付いています。

~さらに40分後~
現在の時刻は22:50:00です。再度システムクロックを確認します。
# date 
2018年 6月 19日 火曜日 22:49:00 JST
※時差が1分まで縮まりました。
※slewモードではデフォルト設定だと1分のズレを修正するために12分30秒掛かります。
※つまり、5分のズレを修正するためには62分30秒掛かりますが、システムクロックとしては過去に戻る事はありません。

 

以上がstepモードとslewモードの動作検証となります。