ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

Linux7 Chronyでステップモードを無効にしてslewモードのみで動作させる設定方法

RedHatLinux7で新たに導入された時刻同期の機能として、chronyがあります。従来のNTPの置き換えて利用しているケースも多いと思います。ちなみに、chronyはNTPのすべての機能をカバーしているわけではないので、状況に応じて使い分けが必要です。


そして、時刻同期と言えば、うるう秒対策の検討が行われると思いますが、うるう秒対策で設定されることが多いのがslewモードです。


また、即座に時刻を同期させる場合は、アプリケーションによっては不具合があるケースもあるようです。例えば、富士通の製品で「NTP時刻同期でSTEP変更された場合のSystemwalker Centric Managerの運用への影響について」という内容で説明されている中に、「NTPによるシステム時刻を変更する場合は、Slewモードを必ず指定してください。Slewモードは1秒間に0.0005秒ずつ修正しますので、一気に時刻戻し・時刻前進が行われることがなくなりますので、時刻戻し・時刻前進によるトラブルのリスクはありません。」とあります。


その為、アプリケーションへの影響を考慮する場合は、slewモードで動作させると安心です。


そして、chronyで自動時刻調整をslewのみにして、stepで調整しない設定を紹介します。ただし、slewモードのみで動作させる場合、時刻調整に時間がかかる場合があるので、このモードだけで動作させる場合は注意が必要です。


例えば、何かしらの原因(OS再起動など)で、システムクロックに大幅な時刻のズレが生じた場合、正しい時刻に合わせるのに長い時間がかかったり、設定によっては、時刻同期が完了しないケースがあります。


参考になるサイトです。
https://chrony.tuxfamily.org/faq.html


続いて、実際にLinux7 Chronyでステップモードを無効にしてslewモードのみで動作させる設定方法を紹介します。手元にLinuxがないので、CentOSで代用。そして、CentOS 7で入っていない場合は、yum install chronyでインストールすることができるそうです。CentOSを最小構成(minimal)でインストールすると、chronyは利用できないようです。※試していません。


後、chronydとntpdの両方がenabledになっている場合、システム起動後はchronydだけが起動した状態になるそうで、どちらか一方しか利用できない仕様となっています。


まずは、chrony.confの中身です。

----
[root@CentOS74 ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

------

まず、7.2から導入されたコマンドがこちらになります。

「leapsecmode slew」

このコマンドを入力しないとslewモードが有効になりません。ブログなどではchronyはデフォルトで動作すると書かれているケースがありますが、そうではないので注意してください。leapsecmode systemがデフォルトみたいです。

 


続いて、stepモードを無効にするというよりは、以下の設定をコメントアウトすることで、即座に時間調整をすることを防止できます。以下の設定は、サービス起動後、1秒以上時間がズレていた場合に、即座に時間調整することになります。数字の「3」は試行回数を示します。

「makestep 1.0 3」


その為、タイトルにある通り、Linux7 Chronyでステップモードを無効にしてslewモードのみで動作させる設定方法は以下になります。

【chrony.conf】
leapsecmode slew(追加)
#makestep 1 3(編集)


これでslewモードでのみ動作することになります。動作確認として、dateコマンドでわざと時間をずらして、makestepが動作しないことを確認します。


分かりやすく3分とかずらして時間調整が緩やかになっていることを確認すればOKです。dateコマンドで時間を変更する手順は以下です。

date -s "mm/dd mm:ss yyyy"

-----
[root@CentOS74 ~]# date
2019年 10月 19日 水曜日 22:45:53 JST
[root@CentOS74 ~]# date -s "10/19 22:00 2019"
2019年 10月 19日 火曜日 22:00:00 JST
-----


後、手動で時刻を合わせたい場合は、以下のコマンドを実行します。

「chronyc -a makestep」


また、設定変更後にサービスを再起動する場合は、以下のコマンドを実行します。

「systemctl restart chronyd.service」


そして、chronyでNTPサーバーと構成する場合は、allowで許可するNWを追記してあげます。デフォルトではすべてのNTPクライアントの接続を受け付けないようになっています。


まとめると、、、サーバの場合は、以下の設定を行います。

【chrony.conf】
leapsecmode slew(追加)
#makestep 1 3(編集)
allow 10.1.1.0/24(追加)※例です。


続いて、同期状態の確認です。以下のコマンドを実行します。

「chronyc sources」

----
[root@CentOS74 etc]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ XXXXXX 2 6 177 56 +26us[ +26us] +/- 124ms
^+ XXXXXX 2 6 77 121 +877us[+6712us] +/- 68ms
^+ XXXXXX 3 6 177 56 -20us[ -20us] +/- 99ms
^* XXXXXX.net 2 6 177 57 -1583us[+4253us] +/- 59ms
[root@CentOS74 etc]#
----

赤字の部分が同期しているサーバになります。以下のコマンドでより詳細な情報を確認できます。

「chronyc tracking」

-----
[root@CentOS74 etc]# chronyc tracking
Reference ID : 965F948C (XXXX.net)
Stratum : 3
Ref time (UTC) : Wed Oct 25 13:55:18 2019
System time : 0.000435665 seconds fast of NTP time
Last offset : -0.000096543 seconds
RMS offset : 0.002245682 seconds
Frequency : 3490.050 ppm slow
Residual freq : +1.394 ppm
Skew : 3.922 ppm
Root delay : 0.036228176 seconds
Root dispersion : 0.043109242 seconds
Update interval : 64.6 seconds
Leap status : Normal
[root@CentOS74 etc]#
----

ステータスの出力については、別途の記事で説明したいと思います。ちなみに、上記コマンドでは、slewモードで動作しているかどうかはわからないですね。設定ファイルをチェックするになるでしょうね。