【初心者向け】CentOS8でchronyによる時刻同期を設定する方法|NTPサーバ/クライアント構築手順

はじめに

VirtualBoxにて仮想ホストを構築して検証しているのですが、時刻がずれてエラーログの解析が難しいことがたまにあったので、面倒くさがらずに時刻同期の設定を入れてみました。
Linuxサーバ(CentOS8)におけるchronyによる時刻同期の設定方法を記載しているので、ぜひ参考にしてみて下さい。

※VirtualBox Guest Additionsによる時刻同期機能もありますが、検証環境ではOS標準のchronyで同期させた方が、本番環境に近い構成で検証できます。

CentOS8では従来のntpdではなく、chronyが標準の時刻同期サービスとして採用されています。本記事ではchronyを利用したNTPサーバ/クライアント構成を解説します。

前提環境

<ホストOS>
・OSはWindows11
・VirtualBox バージョン 7.0.22 r165102をインストール済み

<ゲストOS>
・CentOS 8.5 を3台インストール済み
 ※※本記事はCentOS 8環境で検証しています。現在はサポートが終了しているため、AlmaLinux / Rocky Linuxなどでの利用を推奨します。
・NTPサーバ:1台、NTPクライアント:2台
 ※NTPクライアントはNTPサーバと時刻同期する構成
 ※NTPサーバ/クライアントはインターネット接続可能

タイムゾーン設定(NTPサーバ/NTPクライアント共通)

まずはタイムゾーンをデフォルト設定からJSTに変更します。

[root@masternode ~]# timedatectl set-timezone Asia/Tokyo
[root@masternode ~]# timedatectl
               Local time: Sat 2025-01-04 08:17:05 JST
           Universal time: Fri 2025-01-03 23:17:05 UTC
                 RTC time: Fri 2025-01-04 08:17:05
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
[root@masternode ~]# date
Sat Jan  4 08:17:11 JST 2025
[root@masternode ~]# 

chrony設定方法(NTPサーバ)

まず、NTPサーバ代表1台の設定をしていきます。下記の通りchrony.confファイルを修正します。
・時刻同期先の指定
 複数の選択肢がありますが、今回は日本標準時を時刻配信しているNICT提供のNTPサーバと時刻同期させます。
・時刻同期を受け付けるIPアドレス帯の指定
 NTPクライアントが所属するIPアドレス帯を自身の環境に合わせて指定して下さい。

[root@masternode ~]# vi /etc/chrony.conf
[root@masternode ~]# 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).
#pool 2.centos.pool.ntp.org iburst   ##左記をコメントアウト##
pool ntp.nict.jp 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
allow 192.168.56.0/24  ##左記を追加(NTPクライアントの所属するIPアドレス帯を指定)##

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

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

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

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

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

続いて設定を反映するためにchronydサービスを再起動します。

[root@masternode ~]# systemctl restart chronyd
[root@masternode ~]# systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2025-01-04 09:04:44 JST; 14s ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 27956 ExecStopPost=/usr/libexec/chrony-helper remove-daemon-state (code=exited, status=0/SUCCESS)
  Process: 27964 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 27961 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 27963 (chronyd)
    Tasks: 1 (limit: 11272)
   Memory: 1.0M
   CGroup: /system.slice/chronyd.service
           └─27963 /usr/sbin/chronyd

Jan 04 09:04:42 masternode systemd[1]: Starting NTP client/server...
Jan 04 09:04:42 masternode chronyd[27963]: chronyd version 4.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP >
Jan 04 09:04:43 masternode chronyd[27963]: Frequency 16.931 +/- 5.127 ppm read from /var/lib/chrony/drift
Jan 04 09:04:43 masternode chronyd[27963]: Using right/UTC timezone to obtain leap second data
Jan 04 09:04:44 masternode systemd[1]: Started NTP client/server.
Jan 04 09:04:48 masternode chronyd[27963]: Selected source 133.243.238.164 (ntp.nict.jp)
Jan 04 09:04:48 masternode chronyd[27963]: System clock TAI offset set to 37 seconds
Jan 04 09:04:50 masternode chronyd[27963]: Selected source 133.243.238.163 (ntp.nict.jp)

時刻同期の状態を確認しましょう。いずれかの同期先のMSの項目に「^*」がついていれば問題なく時刻同期できています。

[root@masternode ~]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp-b2.nict.go.jp             1   6    17    56  +2139us[+1249us] +/- 7819us
^- ntp-b3.nict.go.jp             1   6    17    56  +1871us[ -127us] +/- 7980us
^* ntp-k1.nict.jp                1   6    17    28   -268us[-1491us] +/- 9015us
^- ntp-a3.nict.go.jp             1   6    17    56  +1781us[ -217us] +/- 7744us
[root@masternode ~]#

時刻同期の詳細な説明を知りたい方は、下記のサイトなどを確認してみて下さい。
【Centos7】chronyc sources コマンドの出力結果の見方

chrony設定方法(NTPクライアント)

続いてNTPクライアント側の設定です。設定方法はNTPサーバと変わらずで、chrony.confを下記の通り修正します。
・時刻同期先の指定
 NTPサーバのホスト名を指定します。
・時刻同期を受け付けるIPアドレス帯の指定
 NTPクライアントにおいて本設定は不要なので、コメントアウトしたままでOKです。

[root@workernode2 ~]# vi /etc/chrony.conf
[root@workernode2 ~]# 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).
#pool 2.centos.pool.ntp.org iburst   ##左記をコメントアウト##
pool masternode iburst              ##NTPサーバのホスト名またはIPアドレスを指定##

# 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

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

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

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

続いて設定を反映するためにchronydサービスを再起動します。

[root@workernode2 ~]# systemctl restart chronyd
[root@workernode2 ~]# systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2025-01-04 09:24:47 JST; 5s ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 22260 ExecStopPost=/usr/libexec/chrony-helper remove-daemon-state (code=exited, status=0/SUC>
  Process: 22269 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 22265 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 22267 (chronyd)
    Tasks: 1 (limit: 11272)
   Memory: 960.0K
   CGroup: /system.slice/chronyd.service
           └─22267 /usr/sbin/chronyd

[root@workernode2 ~]#

時刻同期の状態を確認しましょう。同期先であるNTPサーバのMSの項目に「^*」がついていれば問題なく時刻同期できています。

[root@workernode2 ~]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* masternode                    2   6    17    18    -23us[-9735ns] +/- 5246us
[root@workernode2 ~]#

しばらくOS停止していた場合、時刻ずれの度合いが非常に大きくなってしまうことがありますので、そのような場合は強制的に時刻を合わせることも可能です。
ただし、本番環境では急激な時刻変更によりアプリケーションへ影響を与える場合があるため、実施タイミングには注意してください。

[root@workernode2 ~]# date
Mon Mar 30 00:19:27 JST 2026
[root@workernode2  ~]#
[root@workernode2 ~]# chronyc makestep
200 OK
[root@workernode2 ~]#
[root@workernode2 ~]# date
Wed Apr  1 07:06:36 JST 2026
[root@workernode2 ~]#

参考:chronyのとntpd違い

chronyとntpdはどちらもNTP(Network Time Protocol)を利用して時刻同期を行うソフトウェアですが、仮想環境やクラウド環境の普及に伴い、より高精度かつ安定した同期が可能なchronyが主流となっています。主な違いは以下の通りです。

項目chronyntpd
標準採用CentOS7/8以降で標準古いLinuxで主流
仮想環境との相性強いやや弱い
時刻同期速度高速比較的遅い
大きな時刻ずれへの対応得意苦手
一時的なネットワーク断からの復帰強いやや弱い
モバイル/クラウド環境得意想定が古い
リソース使用量少ないやや多い

上記に加えて、ntpdは時間のずれが大きなってNTPサービスが停止してしまうのに対して、chronyはサービスが停止することがなくなっている点がメリットです。

参考サイト:
Chronyとは | OSSのデージーネット

まとめ

今回は、CentOS8環境におけるchronyを利用した時刻同期設定について、NTPサーバ/NTPクライアント構成で確認しました。

Linuxサーバでは時刻同期が非常に重要であり、時刻がずれてしまうと以下のような問題につながる可能性があります。

  • ログ解析が困難になる
  • サーバ間で時刻不整合が発生する
  • ジョブや監視が誤動作する
  • 認証系システムでエラーになる

特にVirtualBoxやVMwareなどの仮想環境では時刻ずれが発生しやすいため、検証環境であっても時刻同期設定を入れておくことをおすすめします。

また、CentOS8では従来のntpdではなくchronyが標準採用されており、

  • 仮想環境に強い
  • 大きな時刻ずれにも対応しやすい
  • ネットワーク断からの復帰性能が高い

といったメリットがあります。

実際の運用では、以下のコマンドを覚えておくと非常に便利です。

# 同期状態確認
chronyc sources

# 時刻同期詳細確認
chronyc tracking

# 大きくずれた時刻を即時補正
chronyc makestep

時刻同期は地味な設定ではありますが、システム運用の安定性に直結する重要な要素です。
検証環境・本番環境を問わず、早い段階で設定しておくことで、後々のトラブル防止につながります。

本記事が、CentOS8環境でchronyによる時刻同期設定を行う際の参考になれば幸いです。

参考文献

[CentOS/RHEL 7、RHEL 8、及びRHEL 9]NTPサーバの設定
CentOS 8 : NTP : サーバーの設定 : Server World
CentOS 8 NTP サーバーの設定

コメント