为什么要做时间同步?
分布式服务在调用本地时间做数据处理时时间问题显得尤为重要
centeros8 中使用chrony
CentOS8上使用Chrony配置NTP服务器,用于同步时间。 它有两个程序,chrony和chronyd, chronyd是守护进程 ,chrony是一个命令行界面程序,可以用来监控chronyd的性能,并修改各种操作参数。
系统会默认安装并启动,如果系统不存在则需要安装此工具库。
关于配置项的描述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| # 使用pool.ntp.org项目中的公共服务器。 # 请考虑加入该池(http://www.pool.ntp.org/join.html)。 pool ntp.aliyun.com iburst
# 记录系统时钟获取/失去时间的速率。 driftfile /var/lib/chrony/drift
# 如果系统时钟的偏差大于1秒,则允许在前三次更新中进行 步进调整。 makestep 1.0 3
# 启用内核对实时时钟(RTC)的同步。 rtcsync
# 启用所有支持硬件时间戳的接口。 #hwtimestamp *
# 增加调整系统时钟所需最小可选源的数量。 #minsources 2
# 允许来自本地网络的NTP客户端访问。 #allow 0.0.0.0/0
# 即使未与时间源同步,也提供时间服务。 #local stratum 10
# 指定包含 NTP 认证密钥的文件。 # keyfile /etc/chrony.keys
# 从系统 tz 数据库获取 TAI-UTC 偏移量和闰秒。 leapsectz right/UTC
# 指定日志文件的目录。 logdir /var/log/chrony
# 选择要记录哪些信息。 #log measurements statistics tracking
|
服务端配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| server 0.cn.pool.ntp.org server 1.cn.pool.ntp.org server 2.cn.pool.ntp.org server 3.cn.pool.ntp.org server ntp.aliyun.com iburst
# 如果时间差超过0.1秒,就在前三次的时钟更新时,启动大步跨方式 ## chronyd根据需求减慢或加速时间调整, ## 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。 ## 该指令强制chronyd调整时期,大于某个阀值时步进调整系统时钟。 ## 只有在因chronyd启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。 makestep 0.1 3
# 允许哪些网段的客户端访问 allow 0.0.0.0/0
# 允许访问哪些时间服务器 ## all表示允许本机访问所有时间服务器 allow all
# 服务器绑定ip和端口 bindaddress 0.0.0.0
local stratum 10
|
客户端配置
1 2 3 4
| allow all server 192.168.30.11 iburst makestep 0.1 3
|
一些常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 查看时间同步源: $ chronyc sources -v 立即手工同步 $chronyc -a makestep 查看时间同步源状态: $ chronyc sourcestats -v 设置硬件时间 硬件时间默认为UTC: $ timedatectl set-local-rtc 1 查看时间配置信息 timedatectl 启用NTP时间同步: $ timedatectl set-ntp yes 校准时间服务器: $ chronyc tracking #实时打印当前时间 最后需要注意的是,配置完/etc/chrony.conf后,需重启chrony服务,否则可能会不生效。 使用systemctl start chronyd.service 启动chrony服务 使用systemctl enable chronyd.service 设置开机同步时间 使用systemctl status chronyd.service 查看服务状态
|
一个未验证过的脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #!/bin/bash # 配置chrony 作为时间同步的 服务端 和 客户端。
# 服务端IP(内网)地址。 server_ip="192.168.30.11" # 服务端允许哪个IP段访问。 server_allow_ip="192.168.30.0/24" # 服务端使用的时间源。 server_source="pool ntp.aliyun.com iburst"
# 服务端配置 ntp_server_conf() { sed -i 's/^pool/#pool/' /etc/chrony.conf sed -i 's/^server/#server/' /etc/chrony.conf echo -e "${1}\nallow ${2}\nlocal stratum 10" >> /etc/chrony.conf systemctl restart chronyd firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.30.0/24" port port="123" protocol="udp" accept" firewall-cmd --reload }
# 客户端配置 ntp_client_conf() { sed -i 's/^pool/#pool/' /etc/chrony.conf sed -i 's/^server/#server/' /etc/chrony.conf echo "server $1 iburst" >> /etc/chrony.conf systemctl restart chronyd }
# 判断运行该脚本的是服务端还是客户端。 ip addr | grep "$server_ip" &> /dev/null if [ "$?" -eq 0 ];then ntp_server_conf "${server_source}" "${server_allow_ip}" else ntp_client_conf "${server_ip}" fi
|