系统环境

标题 版本 备注
系统版本 ubuntu 22.04.3 LTS (Jammy Jellyfish) -
内核版本 5.15.0-88-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux -
Server 端 - 10.10.10.203
Client 端 - 10.10.10.204
Chrony v4.5 -

Chrony 简介

Chrony 是一个用于计算机系统时间同步的工具,它是一个网络时间协议(NTP)客户端和服务器。它的主要功能是确保计算机系统的时钟与全球标准时间保持同步。以下是 Chrony 的一些关键特点和功能:

  1. 时钟同步:Chrony 可以与远程时间服务器同步计算机系统的时钟,以确保准确性和一致性。

  2. 精确度:Chrony 通过使用时间戳和时间补偿等技术,提供高精度的时间同步,甚至可以在计算机关机期间继续跟踪时间。

  3. 冷启动时间校正:Chrony 可以在系统启动时,通过估算时间的过去变化来快速校正时钟,从而减少启动时间校正所需的时间。

  4. 过滤器和修正:Chrony 使用过滤器来消除网络延迟和抖动,从而提高时钟同步的准确性。它还可以根据测量结果对时钟进行修正。

  5. 资源节约:Chrony 是一个轻量级的工具,占用少量系统资源,并且可以在不影响系统性能的情况下运行。

  6. 可靠性:Chrony 具有高度可靠性,可以在网络故障或不稳定的情况下继续提供准确的时间同步服务。

  7. 灵活性:Chrony 支持多种配置选项,可以根据用户的需求进行定制和调整。

总的来说,Chrony 是一个功能强大且易于使用的时间同步工具,适用于各种计算机系统和网络环境。

Chrony 官方地址:https://chrony-project.org/download.html

Chrony 官方归档:https://chrony-project.org/releases/

Chrony 安装

1.从 Chrony 官方归档地址下载对应版本的源码包到服务器的 /usr/local/src/ 目录下:

1
$ sudo wget -O /usr/local/src/chrony-4.5.tar.gz https://chrony-project.org/releases/chrony-4.5.tar.gz

2.将下载好的源码包解压至下载目录:

1
$ sudo tar -zxf /usr/local/src/chrony-4.5.tar.gz -C /usr/local/src/

3.进入解压目录,配置编译参数:

1
$ cd /usr/local/src/chrony-4.5/ && sudo ./configure --prefix=/usr/local/chrony

4.编译及安装 chrony:

1
$ sudo make && sudo make install

5.在 chrony 安装目录下 /usr/local/chrony 创建以下目录 etclogs,分别用于存放 chrony 配置文件和日志文件:

1
$ sudo mkdir -p /usr/local/chrony/{etc,logs}

6.在 /etc/profile.d 目录下新建 chrony 的环境配置脚本文件 chrony.sh ,内容为:

1
2
3
$ sudo sh -c 'cat << EOF > /etc/profile.d/chrony.sh
PATH=\$PATH:/usr/local/chrony/sbin:/usr/local/chrony/bin
EOF'

7.执行下命令 source /etc/profile.d/chrony.sh 加载 chrony 环境,使其立即生效

1
$ source /etc/profile.d/chrony.sh

以上部分需要在服务端和客户端上安装。接下来的配置就需要按各自的需求进行配置

8.执行下 chronyd -version 参看是否能正确输出 chrony 的版本号,能输出,则说明 chrony 环境配置没问题了

1
2
$ chronyd -version
chronyd (chrony) version 4.5 (+CMDMON +NTP +REFCLOCK +RTC -PRIVDROP -SCFILTER -SIGND +ASYNCDNS -NTS -SECHASH +IPV6 -DEBUG)

服务端 10.10.10.203

1.从 chrony 解压目录复制示例配置文件 /usr/local/src/chrony-4.5/examples/chrony.conf.example3 到上面创建的 /usr/local/chrony/etc 目录中并重命名为 chronyd.conf

1
$ sudo cp /usr/local/src/chrony-4.5/examples/chrony.conf.example3 /usr/local/chrony/etc/chronyd.conf

2.编辑配置文件 /usr/local/chrony/etc/chronyd.conf, 启用 ! allow 192.168/16 ,将其修改成自己网段:

1
2
3
4
5
driftfile /var/lib/chrony/drift
ntsdumpdir /var/lib/chrony
pidfile /usr/local/chrony/chronyd.pid
allow 10.10/16
local stratum 10

3.在 /lib/systemd/system/ 目录下创建 chrony 的服务端启动脚本文件 chronyd.service 内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo sh -c 'cat << EOF > /lib/systemd/system/chronyd.service
[Unit]
Description=Chrony Network Time Synchronization Service
After=network.target

[Service]
Type=forking
EnvironmentFile=-/usr/local/chrony/etc/chronyd.conf
ExecStart=/usr/local/chrony/sbin/chronyd -f /usr/local/chrony/etc/chronyd.conf
ExecReload=/bin/systemctl restart chronyd

[Install]
WantedBy=multi-user.target
EOF'

4.执行命令,加载下 chronyd 启动脚本文件:

1
$ sudo systemctl daemon-reload

5.启动 chronyd 服务并将其设置为开机启动:

1
$ sudo systemctl enable --now chronyd.service

6.查看启动状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sudo systemctl status chronyd.service
● chronyd.service - Chrony Network Time Synchronization Service
Loaded: loaded (/lib/systemd/system/chronyd.service; disabled; vendor p>
Active: active (running) since Fri 2024-03-15 00:31:05 UTC; 9s ago
Process: 274154 ExecStart=/usr/local/chrony/sbin/chronyd -f /usr/local/c>
Main PID: 274156 (chronyd)
Tasks: 1 (limit: 4558)
Memory: 272.0K
CPU: 8ms
CGroup: /system.slice/chronyd.service
└─274156 /usr/local/chrony/sbin/chronyd -f /usr/local/chrony/et>

Mar 15 00:31:05 vm002-ubuntu2204 systemd[1]: Starting Chrony Network Time Sy>
Mar 15 00:31:05 vm002-ubuntu2204 chronyd[274156]: chronyd version 4.5 starti>
Mar 15 00:31:05 vm002-ubuntu2204 chronyd[274156]: Running with root privileg>
Mar 15 00:31:05 vm002-ubuntu2204 chronyd[274156]: Frequency -10.905 +/- 1000>
Mar 15 00:31:05 vm002-ubuntu2204 systemd[1]: Started Chrony Network Time Syn>

客户端 10.10.10.204

1.从 chrony 解压目录复制示例配置文件 /usr/local/src/chrony-4.5/examples/chrony.conf.example3 到上面创建的 /usr/local/chrony/etc 目录中并重命名为 chronyc.conf

1
$ sudo cp /usr/local/src/chrony-4.5/examples/chrony.conf.example3 /usr/local/chrony/etc/chronyc.conf

2.编辑配置文件 /usr/local/chrony/etc/chronyc.conf, 启用 ! allow 192.168/16 ,将其修改成自己网段:

1
2
server 10.10.10.203 iburst
rtcsync

3.在 /lib/systemd/system/ 目录下创建 chrony 的服务端启动脚本文件 chronyc.service 内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo sh -c 'cat << EOF > /lib/systemd/system/chronyc.service
[Unit]
Description=Chrony Network Time Synchronization Service
After=network.target

[Service]
Type=forking
EnvironmentFile=-/usr/local/chrony/etc/chronyc.conf
ExecStart=/usr/local/chrony/sbin/chronyd -f /usr/local/chrony/etc/chronyc.conf
ExecReload=/bin/systemctl restart chronyc

[Install]
WantedBy=multi-user.target
EOF'

4.执行命令,加载下 chronyc 启动脚本文件:

1
$ sudo systemctl daemon-reload

5.启动 chronyc 服务并将其设置为开机启动:

1
$ sudo systemctl enable --now chronyc.service

6.执行命令,查看下 chronyc 启动状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sudo systemctl status chronyc.service
● chronyc.service - Chrony Network Time Synchronization Service
Loaded: loaded (/lib/systemd/system/chronyc.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2024-03-15 00:20:12 UTC; 6s ago
Process: 59028 ExecStart=/usr/local/chrony/sbin/chronyd -f /usr/local/chrony/etc/chronyc.conf (co>
Main PID: 59030 (chronyd)
Tasks: 1 (limit: 4557)
Memory: 288.0K
CPU: 9ms
CGroup: /system.slice/chronyc.service
└─59030 /usr/local/chrony/sbin/chronyd -f /usr/local/chrony/etc/chronyc.conf

Mar 15 00:20:12 vm002-ubuntu2204 systemd[1]: Starting Chrony Network Time Synchronization Service...
Mar 15 00:20:12 vm002-ubuntu2204 chronyd[59030]: chronyd version 4.5 starting (+CMDMON +NTP +REFCLOCK>
Mar 15 00:20:12 vm002-ubuntu2204 chronyd[59030]: Running with root privileges
Mar 15 00:20:12 vm002-ubuntu2204 chronyd[59030]: Initial frequency 1.898 ppm
Mar 15 00:20:12 vm002-ubuntu2204 systemd[1]: Started Chrony Network Time Synchronization Service.

7.动态查看系统日志,可以发现:

1
2
3
4
Mar 15 00:31:41 vm002-ubuntu2204 chronyd[59980]: Running with root privileges
Mar 15 00:31:41 vm002-ubuntu2204 chronyd[59980]: Frequency -10.869 +/- 0.795 ppm read from /var/lib/chrony/drift
Mar 15 00:31:41 vm002-ubuntu2204 systemd[1]: Started Chrony Network Time Synchronization Service.
Mar 15 00:31:45 vm002-ubuntu2204 chronyd[59980]: Selected source 10.10.10.203

8.同时,执行下 ./chronyc sources -v, 看下同步状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ chronyc sources -v

.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.10.10.203 10 6 17 38 +22us[ +17us] +/- 224us