chrony 踩坑笔记
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:http://pool.ntp.org
NTP Poll Project China:http://cn.pool.ntp.org