chrony 官方文档

Linux 的时间 - 知乎 (zhihu.com)

chrony 是 Linux 上的一款软件,是 NTP(Network Time Protocol)的一个实现。

NTP 的原理:从时间源处获取标准时间,然后根据本机设置的时区,转化为本地时间。

在搭建集群时,可以让其中一台主机从标准时间源那里同步时间,其它主机再从这台主机同步时间。

提供时间的主机称为 server,获取时间的主机称为 client。

在所有主机上安装 chrony

yum install chrony

修改 sever 的配置文件 /etc/chrony.conf,设置标准时间源。修改如下:

pool cn.pool.ntp.org iburst  # 除了 pool 外,还有 server、peer,具体可参考官方文档

继续修改 sever 的配置文件,使 clients 对 sever 具有访问权限:

allow 192.168.10.0/24  # 允许该网段的所有主机访问,
# 除了设置网段,也可以设置单台主机
# 除了 allow,还有 deny

ntp server 的端口是 123。上面的选项设置并重启后,主机的 123 端口就开始处于监听状态了。
查看端口的命令:ss -lnp | grep 123。

注意:使用 chrony 时,作为 server 的主机需要关闭防火墙(或将 NTP 的端口放行)和 selinux。

systemctl stop firewalld  # 或 firewall-cmd --permanent --add-service="ntp"
setenforce 0  # 似乎非必要,但为了减少莫名其妙的 bug,建议关闭

继续修改 sever 的配置文件,将下面这行前面的井号删除,当 server 与标准时间源断开时,仍然允许它对外提供时间:

local stratum 10

修改 clients 的配置文件,使其从 sever 处同步时间(假设上述主机的 IP 为 192.168.10.10):

server 192.168.10.10 iburst  # 如果主机的 IP 经常变化,建议将此处的 IP 换为主机名

将所有主机的 chronyd(chrony 的 daemon)设为开机自启,并启动所有主机的 chronyd:

systemctl enable chronyd
systemctl start chronyd  # timedatectl set-ntp false 命令会关闭 chronyd

配置文件中还有一项设置非常重要,在此特别说明:

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3  # 在启动 chronyd 时,如果本机和 server 的时间差超过 1.0 秒,就通过三次修改,将本机时间修改到 server 的时间。
                # 注意,只有在启动 chronyd 时,该操作才会执行。但同时也说明,每次启动 chronyd 都会执行一次 chronyc makestep 命令

手动修改本机(client)的时间,会导致 server 变为 unreachable,此时如果想要 client 的时间改回为 server 的时间,最好的做法时重启 client 的 chronyd,上述的 makestep 1.0 3 设置生效,时间被修改。

注意:每次修改完配置文件,记得重启 chronyd。

chrony 提供了命令 chronyc。

强制修改时间:

chronyc makestep  # 注意,必须在 server reachable 的情况下,该命令才会生效。
                  # 手动修改 client 的时间会导致 server unreachable ^?,此时,该命令会失效。
                  # 手动修改 server 的时间会导致 servertime too variable ^~,此时,该命令也会失效。
                  # 想要把时间改回为 server 的时间,最好的做法是
                  # 在 client 的配置文件中设置 makestep,然后重启 client 的chronyd。

其它常用命令:

chronyc sources     # 最前面的 MS 的值如果是 ^*,则表示设置成功。
chronyc sources -v  # 显示更多信息

chronyc sourcestats
chronyc sourcestats -v

chronyc activity
chronyc activity -v

chronyc -v  # 查看 chronyc 的版本
chronyd -v  # 查看 chronyd 的版本

所有主机都从标准时间源同步时间(不建议)

在 chrony 面世之前,常用的是 ntp。

使用 ntp 时,可以让所有服务器都和标准时间源同步时间。

安装 ntp:

yum install ntp

在配置文件 /etc/ntp.conf 中设置标准时间源。ntpd 会自动与该源通信,保证两者时间一致。修改如下:

server cn.pool.ntp.org

确保 ntdp(ntp 的 daemon)开机自启动,并启动 ntpd:

systemctl enable ntpd
systemctl start ntpd

建议也安装 ntpdate,先手动同步一次时间:

yum install ntpdate
ntpdate cn.pool.ntp.org

常用的标准时间源

NTP Poll Project:pool.ntp.org

NTP Poll Project China:cn.pool.ntp.org

微软:time.windows.com

阿里云:ntp.aliyun.com

上海交大:ntp.sjtu.edu.cn

中科大:time.ustc.edu.cn

发表评论

邮箱地址不会被公开。 必填项已用*标注