Linux设置时钟同步

作者: chensoul | 1791 字, 4 分钟 | 2022-08-16 | 分类: Notes

chrony, ntp

NTP 是 Network Time Protocol 的缩写,也即网络时间协议,一种在 Linux 上保持准确时间的协议,它和网络上可用的 NTP 服务器保持着时钟同步。

用于同步日期和时间的 ntpd 服务,在新的Linux发行版 ( centos8、Ubuntu 20.04、Fedora 30 ) 中已经废弃了,取而代之的是 chrony。

Chrony 和 NTP 的区别如下:

ntp namechrony name
/etc/ntp.conf/etc/chrony.conf
/etc/ntp/keys/etc/chrony.keys
ntpdchronyd
ntpqchronyc
ntpd.servicechronyd.service
ntp-wait.servicechrony-wait.service

NTP

1、安装 NTP 服务

yum install -y ntp

接下来可以使用 ntpdate 命令来更新时间,比如,在联网环境下,可以通过网络上的校时服务器来同步时间。

常见的校时服务器:

# 国家授时中心
210.72.145.44
# 阿里云
ntp.aliyun.com

s1a.time.edu.cn #北京邮电大学
s1b.time.edu.cn #清华大学
s1c.time.edu.cn #北京大学
s1d.time.edu.cn #东南大学
s1e.time.edu.cn #清华大学
s2a.time.edu.cn #清华大学
s2b.time.edu.cn #清华大学
s2c.time.edu.cn #北京邮电大学
s2d.time.edu.cn #西南地区网络中心
s2e.time.edu.cn #西北地区网络中心
s2f.time.edu.cn #东北地区网络中心
s2g.time.edu.cn #华东南地区网络中心
s2h.time.edu.cn #四川大学网络管理中心
s2j.time.edu.cn #大连理工大学网络中心
s2k.time.edu.cn #CERNET桂林主节点
s2m.time.edu.cn #北京大学
ntp.sjtu.edu.cn #上海交通大学

下面是采用微软的校时服务器调整系统时间

ntpdate time.windows.com 

2、内网搭建时钟服务器

如果是在内网不能连接外网,则可以在内网选择一台服务器作为时钟服务器,其他服务器都作为客户端同步这台时钟服务器的时间。

修改 /etc/ntp.conf 配置,注释或者删除 server 开头的配置:

sed -i "/^server/ d" /etc/ntp.conf

使用本地时钟作为ntp服务器时间,这里的 127.127.1.0 在 ntp 中代表本机

cat << EOF | sudo tee -a /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10
EOF

启动 ntp 服务,并设置开机启动:

systemctl start ntpd
systemctl enable ntpd

配置客户端。同样,需要先安装 ntp 服务,然后修改 /etc/ntp.conf 文件,注释或者删除 server 开头的配置,并添加一行:

sed -i "/^server/ d" /etc/ntp.conf
cat << EOF | sudo tee -a /etc/ntp.conf
server 192.168.1.107
EOF
sudo systemctl start ntpd
sudo systemctl enable ntpd
ntpdate -u ntp1.aliyun.com
hwclock --systohc

启动 ntp 服务,并设置开机启动:

systemctl start ntpd
systemctl enable ntpd

向时钟服务器发送请求,同步时间

ntpdate 192.168.1.107

3、使用网络时钟服务器

如果内网服务器可以联网,则可以将所有服务器配置为客户端连接网络上的时钟服务器。

这里使用阿里云的时钟服务器,所有服务器作为客户端同步阿里云的时钟服务器的时间。

sed -i "/^server/ d" /etc/ntp.conf
cat << EOF | sudo tee -a /etc/ntp.conf
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
server ntp4.aliyun.com
EOF
sudo systemctl start ntpd
sudo systemctl enable ntpd
ntpdate -u ntp1.aliyun.com

4、查看状态

检测ntpd服务的端口情况,默认端口是123:

ss -tunlp|grep ntp

查看 ntp 服务器有无和上层 ntp 连通,使用 ntpstat 行查询

ntpstat

ntpq -p可以查看本地NTP需进行同步的公网 NTP 服务器状态。

ntpq -p 
tpq -p 参数详解
  • remote :本地主机所连接的上层NTP服务器,最左边的符号如下: 如果有[*] 代表目前正在使用当中的上层NTP服务器。 如果有[+] 代表也有连上上层NTP服务器,可以作为提高时间更新的候选NTP服务器 如果有[-] 代表同步的该NTP服务器被认为是不合格的NTP Server 如果有 代表同步的外网NTP服务器不可用
  • refid :指的是给上层NTP服务器提供时间校对的服务器。
  • St:上层NTP服务器的级别
  • When: 上一次与上层NTP服务器进行时间校对的时间(单位:s)
  • Poll :本地主机与上层NTP服务器进行时间校对的周期(单位:s)
  • reach:八进制数,表示最近8次时钟同步包接收情况(1表示接收成功,0表示接收失败。每接收一个包左移一位。对于一个运行较长时间的NTP client而言,这个值应该是377->11,111,111,即最近8次包接收均成功;否则表示有丢包情况发生)
  • delay:网络传输过程当中延迟的时间,单位为 10^(-6) 秒
  • offset:时间补偿的结果,单位为10^(-6) 秒
  • jitter:Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。

检查同步是否成功。查看与时间同步服务器的时间偏差,offset 偏差小,同步成功。

ntpdc -c loopinfo

5、配置自动同步

设置自动同步,同步频率:每十分钟同步一次。编辑 crontab:

# crontab -e 
*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com && hwclock -w >> /tmp/crontab.log

6、系统时钟与硬件时钟之间同步

设置硬件时钟

# -w,--systohc
hwclock -w

设置系统时钟:

# -s, --hctosys
hwclock -s

chrony

1、安装服务

yum erase -y ntp
yum install -y chrony

2、使用网络时钟服务器

这里使用网络时钟服务器,在每台服务器上修改配置:

sed -i -e '/^server/d' /etc/chrony.conf
echo "server ntp1.aliyun.com iburst" >> /etc/chrony.conf
egrep -v "^#|^$" /etc/chrony.conf 

启动服务,并设置开机启动:

systemctl start chronyd && systemctl enable chronyd

3、查看状态

查看端口:

ss -tulp | grep chronyd

查看同步状态,显示刚刚配置的ip 并且ip前面有,*星号即为成功 ,这个符号 ^ 为失败

chronyc sources
chronyc sources -v

chronyc sourcestats

跟踪时间同步过程:

chronyc tracking

其他

配置时区

# 配置时区
timedatectl set-timezone Asia/Shanghai

将硬件时钟调整为UTC时间,1为本地时钟:

# 将硬件时钟调整为UTC时间,1为本地时钟
timedatectl set-local-rtc 0

总结

ntp 安装和设置完整脚本

#设置时钟同步
yum install -y ntp

sed -i "/^server/ d" /etc/ntp.conf

cat << EOF | sudo tee -a /etc/ntp.conf
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
server ntp4.aliyun.com
EOF

systemctl start ntpd
systemctl enable ntpd

ntpdate -u ntp1.aliyun.com

hwclock --systohc

chrony 安装和设置完整脚本

# 设置时钟同步
yum erase -y ntp
yum install -y chrony

sed -i -e '/^server/d' /etc/chrony.conf
echo "server ntp1.aliyun.com iburst" >> /etc/chrony.conf
egrep -v "^#|^$" /etc/chrony.conf 

systemctl start chronyd && systemctl enable chronyd

ss -tulp | grep chronyd

chronyc tracking
chronyc sources
chronyc sourcestats

相关文章

chensoul

作者

chensoul

Java 开发工程师,喜欢探索新技术。 可以在 GitHub 了解更多关于我的信息,也欢迎加入我的 Telegram 频道。