关于ntp同步时间, 由于是解决问题,所以理论性内容不多。
关于UTC
NTP要提供准确的时间,就必须有准确的时间来源,那可以用格林尼治时间吗?答案是否定的。
因为格林尼治时间是以地球自转为基础的时间计量系统,但是地球每天的自转是有些不规则的,
而且正在缓慢加速,因此,格林尼治时间已经不再被作为标准时间使用。
新的标准时间,是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时)。
而NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
关于Stratum
在NTP中,定义了时间按照服务器的等级传播,
按照离外部UTC源远近将所有的服务器归入不同的Stratum(层)中,
例如把通过GPS(Global Positioning System,全球定位系统)取得发送标准时间的服务器叫Stratum-1的NTP服务器,
而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,
以此类推,但Stratum层的总数限制在15以内。
所有这些服务器在逻辑上形成阶梯式的架构相互连接,
而Stratum-1的时间服务器是整个系统的基础,
计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。
即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转。
系统采样
[root@ht8 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@ht8 ~]# uname -r
3.10.0-1160.45.1.el7.x86_64
一、ntpd(ntp服务之一)
查看同步情况
[root@ht8 ~]# ntpq -p
ntpq: read: Connection refused
[root@ht8 ~]# ntpstat
Unable to talk to NTP daemon. Is it running?
基本上用这两条命令就可以断定,ntpd是没有运行的,当然还可以用下面的命令
[root@ht8 ~]# ps -ef | grep ntpd
root 116397 94921 0 17:45 pts/1 00:00:00 grep --color=auto ntpd
查看ntpd配置文件(注意 /etc/sysconf/ntpd 这个文件是启动命令的配置文件)
[root@ht8 ~]# cat /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
#其中parameter的参数主要有:
#ignore : 拒绝所有类型的ntp连接
#nomodify : 客户端不能使用ntpc与ntpq两支程式来修改服务器的时间参数
#noquery : 客户端不能使用ntpq、ntpc等指令来查询服务器时间,等于不提供ntp的网络校时
#notrap : 不提供trap这个远程时间登录的功能
#notrust : 拒绝没有认证的客户端
#nopeer : 不与其他同一层的ntp服务器进行时间同步
restrict [address] mask [netmask_ip] [parameter]
# Permit all access over the loopback interface. This could
#允许本地所有操作
restrict 127.0.0.1
restrict ::1
#允许的局域网络段
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
使用的上层internet ntp服务器
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 autokey # multicast server
#multicastclient 224.0.1.1 # multicast client
#manycastserver 239.255.254.254 # manycast server
#manycastclient 239.255.254.254 autokey # manycast client
#crypto
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
#trustedkey 4 8 42
#requestkey 8
#controlkey 8
#statistics clockstats cryptostats loopstats peerstats
disable monitor
启动ntpd
[root@ht8 ~]# systemctl restart ntpd
[root@ht8 ~]# ps -ef | grep ntpd
ntp 116593 1 0 17:47 ? 00:00:00 /usr/sbin/ntpd -u ntp:ntp -g
root 116601 94921 0 17:47 pts/1 00:00:00 grep --color=auto ntpd
//启动之后马上查下同步情况,使用ntpstat命令检查NTP状态
[root@ht8 ~]# ntpstat
unsynchronised
polling server every 64 s
//需要等待5-10分钟,如果还没有变成synchronised,则需要进行相关的其他修复工作。
[root@ht8 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
time.cloudflare 10.28.10.82 3 u 25 64 1 188.141 1.044 1.328
+sv1.ggsrv.de 192.53.103.103 2 u 56 64 1 238.556 24.391 0.657
+electrode.felix 85.10.240.253 3 u 23 64 1 225.203 -33.220 0.545
*111.230.189.174 100.122.36.196 2 u 54 64 1 40.311 0.088 0.156
//这里注意,配置文件/etc/ntp.conf 并没有动,用的是默认的时间服务器
查下时间情况
[root@ht8 ~]# date //北京时间
Wed Mar 9 17:50:19 CST 2022
[root@ht8 ~]# date -R //UTC时间
Wed, 09 Mar 2022 17:50:38 +0800
查下硬件时间
[root@ht8 ~]# hwclock -r
Wed 09 Mar 2022 04:55:08 PM CST -0.333306 seconds
//明显和系统时间不一致,这里先不修复。
设置开启开机启动,这里是必须
[root@ht8 ~]# chkconfig --list ntpd //centos6命令
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies \[target\]'.
error reading information on service ntpd: No such file or directory
[root@ht8 ~]# systemctl list-unit-files //centos7命令
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-fs-nfsd.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
var-lib-nfs-rpc_pipefs.mount static
brandbot.path enabled
systemd-ask-password-console.path static
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
run-117537.scope static
session-10691.scope static
session-10696.scope static
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-pstoreoops.service disabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
abrtd.service enabled
arp-ethers.service disabled
atd.service enabled
auditd.service enabled
auth-rpcgss-module.service static
autovt@.service enabled
blk-availability.service disabled
brandbot.service static
calico-node.service enabled
chrony-dnssrv@.service static
chrony-wait.service disabled
[root@ht8 ~]# systemctl list-unit-files | grep ntpd
ntpd.service disabled
ntpdate.service disabled
//采用
[root@ht8 ~]# chkconfig --list //这个显示的列表
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
cloud-set-guest-password 0:off 1:off 2:off 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
vmware-tools 0:off 1:off 2:on 3:on 4:on 5:on 6:off
//启用命令
[root@ht8 ~]# chkconfig --level 345 ntpd on
Note: Forwarding request to 'systemctl enable ntpd.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
//最终得使用这个命令. 与centos6的命令有差异,要注意
[root@ht8 ~]# systemctl enable ntpd.service
再次查看ntpstat,发现提示有变化.
[root@ht8 ~]# ntpstat
unsynchronised
time server re-starting
polling server every 8 s
//再次查看同步服务器情况
[root@ht8 ~]# ntpq -p
*ntp5.flashdance 194.58.202.148 2 u 49 64 1 160.406 22.470 5.562
stratum2-1.ntp. 194.190.168.1 2 u 48 64 1 138.787 -1.059 4.869
de-user.deepini 46.4.19.10 3 u 48 64 1 291.627 60.306 9.838
makaki.miuku.ne 210.23.25.77 2 u 46 64 1 250.315 -63.342 5.452
等待2分钟之后,出现同步成功
[root@ht8 ~]# ntpstat
synchronised to NTP server (193.182.111.14) at stratum 3 //
time correct to within 1082 ms //毫秒是一种较为微小的时间单位,是一秒的千分之一
polling server every 64 s
ntpd服务,默认只会同步系统时间。
如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd 文件,在/etc/sysconfig/ntpd文件中,
添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。
[root@ht8 ~]# cat /etc/sysconfig/ntpd
# Command line options for ntpd
OPTIONS="-g"
//上面是默认的配置
和下面的等同
[root@ht8 ~]# vi /etc/sysconfig/ntpd
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
//这个ntpd默认的配置文件,我们可以查看下ntpd状态来查看相关命令
[root@ht8 ~]# ps -aux | grep ntpd
ntp 118877 0.0 0.0 32044 2212 ? Ss 18:02 0:00 /usr/sbin/ntpd -u ntp:ntp -g
[root@ht8 ~]# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-03-09 18:02:16 CST; 1h 15min ago
Process: 118876 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 118877 (ntpd)
Tasks: 1
Memory: 632.0K
CGroup: /system.slice/ntpd.service
└─118877 /usr/sbin/ntpd -u ntp:ntp -g //这里就是默认的命令
Mar 09 18:02:16 ht8.node ntpd[118877]: Listen normally on 9 calic21a2ba7eca fe80::ecee:eeff:feee:eeee UDP 123
Mar 09 18:02:16 ht8.node ntpd[118877]: Listen normally on 10 ens192 fe80::4a0:90ff:fe00:e8e UDP 123
Mar 09 18:02:16 ht8.node ntpd[118877]: Listening on routing socket on fd #27 for interface updates
Mar 09 18:02:16 ht8.node systemd[1]: Started Network Time Service.
Mar 09 18:02:16 ht8.node ntpd[118877]: 0.0.0.0 c016 06 restart
Mar 09 18:02:16 ht8.node ntpd[118877]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Mar 09 18:02:16 ht8.node ntpd[118877]: 0.0.0.0 c011 01 freq_not_set
Mar 09 18:02:23 ht8.node ntpd[118877]: 0.0.0.0 c614 04 freq_mode
Mar 09 18:20:25 ht8.node ntpd[118877]: 0.0.0.0 0612 02 freq_set kernel 10.885 PPM
Mar 09 18:20:25 ht8.node ntpd[118877]: 0.0.0.0 0615 05 clock_sync
//修改如下
[root@ht8 ~]# vi /etc/sysconfig/ntpd
OPTIONS="-g"
SYNC_HWCLOCK=yes
//重启
[root@ht8 ~]# vsystemctl restart ntpd
[root@ht8 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
a.chl.la 131.188.3.221 2 u 20 64 1 200.347 20.149 13.088
*sv1.ggsrv.de 192.53.103.103 2 u 16 64 1 236.432 46.227 3.277
ntp5.flashdance .INIT. 16 u - 64 0 0.000 0.000 0.000
119.28.183.184 100.122.36.196 2 u 15 64 1 48.528 11.026 0.315
命令“ntpq -p”列出NTP与之相关的上层NTP的状态,以上的几个字段的意义如下:
remote:即remote - 本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先。
refid:参考的上一层NTP主机的地址
st:即stratum阶层
poll:下次更新在几秒之后
offset:时间补偿的结果
[root@ht8 ~]# ntpstat
synchronised to NTP server (144.76.76.107) at stratum 3
time correct to within 1109 ms
polling server every 64 s //会有一个unsynchronised,等待一会就正常了,因为同步需要一个时间。
//当然我们也可以直接使用hwclock -w 执行下,意思是允许进行时间同步. 或同步BIOS时钟,强制把系统时间写入CMOS,命令如下:
#clock -w
二、ntpdate(ntp软件包里面的另外一个服务)
查看计划任务
[root@ht8 ~]# crontab -l
0 12 * * * /usr/sbin/ntpdate -u 1.cn.pool.ntp.org
//这个是之前加入的,相当于定时手工执行一次,每天12点。
执行ntpdate,需要先停止ntpd服务,然后执行,执行之后再让他同步
[root@ht8 ~]#systemctl stop ntpd
[root@ht8 ~]#ntpdate -u 1.cn.pool.ntp.org //执行一次.
[root@ht8 ~]#systemctl start ntpd
查看ntpdate
[root@ht8 ~]# systemctl is-enabled ntpdate
disabled
timedatectl status(这个命令几乎都没有讲解到底这个NTP enabled: no是什么? )
[root@ht8 ~]# timedatectl status
Local time: Wed 2022-03-09 20:08:37 CST //本地时间
Universal time: Wed 2022-03-09 12:08:37 UTC //协调世界时,又称世界统一时间、世界标准时间、国际协调时间。简称UTC。协调世界时是以原子时秒长为基础
RTC time: Wed 2022-03-09 12:08:37 //硬件时间
Time zone: Asia/Shanghai (CST, +0800) //时区,北京时间,东八区
NTP enabled: no //没有启用ntpdate
NTP synchronized: yes //启用了ntpd
RTC in local TZ: no
DST active: n/a
//我们查下下面的命令,看到确实ntpd,ntpdate启用的情况。
[root@ht8 ~]# systemctl is-enabled ntpd
enabled
[root@ht8 ~]# systemctl is-enabled ntpdate
disabled
//ntpd服务启动正常
[root@ht8 ~]# systemctl status ntpd.service
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-03-09 19:21:38 CST; 1h 54min ago
Main PID: 130003 (ntpd)
Tasks: 1
Memory: 644.0K
CGroup: /system.slice/ntpd.service
└─130003 /usr/sbin/ntpd -u ntp:ntp -g
Mar 09 19:21:38 ht8.node ntpd[130003]: Listen normally on 8 ens224 fe80::435:3cff:fe00:b03 UDP 123
Mar 09 19:21:38 ht8.node ntpd[130003]: Listen normally on 9 calic21a2ba7eca fe80::ecee:eeff:feee:eeee UDP 123
Mar 09 19:21:38 ht8.node ntpd[130003]: Listen normally on 10 ens192 fe80::4a0:90ff:fe00:e8e UDP 123
Mar 09 19:21:38 ht8.node ntpd[130003]: Listening on routing socket on fd #27 for interface updates
Mar 09 19:21:38 ht8.node ntpd[130003]: 0.0.0.0 c016 06 restart
Mar 09 19:21:38 ht8.node ntpd[130003]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Mar 09 19:21:38 ht8.node ntpd[130003]: 0.0.0.0 c011 01 freq_not_set
Mar 09 19:21:47 ht8.node ntpd[130003]: 0.0.0.0 c614 04 freq_mode
Mar 09 19:44:09 ht8.node ntpd[130003]: 0.0.0.0 0612 02 freq_set kernel -6.589 PPM
Mar 09 19:44:09 ht8.node ntpd[130003]: 0.0.0.0 0615 05 clock_sync
//ntpdate状态是没有激活(激活是systemctl start ntpdate),到目前为止还是用不了ntpdate,但是已设置了enable(启用是systemctl enable ntpdate.service),
设置了开机启动,这两个概念不同。
[root@ht8 ~]# systemctl status ntpdate.service
● ntpdate.service - Set time via NTP
Loaded: loaded (/usr/lib/systemd/system/ntpdate.service; disabled; vendor preset: disabled)
Active: inactive (dead)
//我用另一台机器版本一样的,来做补充,因为这里说的不够细致,容易误导。
//我启动ntpupdate服务,结果失败了
[root@k3master ~]# systemctl start ntpdate.service
Job for ntpdate.service failed because the control process exited with error code.
See "systemctl status ntpdate.service" and "journalctl -xe" for details.
//查看ntpdate失败的原因
[root@k3master ~]# systemctl status ntpdate.service
● ntpdate.service - Set time via NTP
Loaded: loaded (/usr/lib/systemd/system/ntpdate.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2022-03-13 23:07:52 CST; 16s ago
Process: 48843 ExecStart=/usr/libexec/ntpdate-wrapper (code=exited, status=1/FAILURE)
Main PID: 48843 (code=exited, status=1/FAILURE)
Mar 13 23:07:21 k3master systemd[1]: Starting Set time via NTP…
Mar 13 23:07:52 k3master systemd[1]: ntpdate.service: main process exited, code=exited, status=1/FAILURE
Mar 13 23:07:52 k3master systemd[1]: Failed to start Set time via NTP.
Mar 13 23:07:52 k3master systemd[1]: Unit ntpdate.service entered failed state.
Mar 13 23:07:52 k3master systemd[1]: ntpdate.service failed.
//我继续测试,手工更新一次,发现ntp socket被占用,实际这里就是之前所说的,先要关闭ntpd,然后才能执行
[root@k3master ~]# ntpdate 210.23.25.77
13 Mar 23:08:57 ntpdate[48964]: the NTP socket is in use, exiting
//这里是重点,实际和我上一篇centos6操作一样,也要先停止ntpd,然后在启动ntpdate,然后才能使用ntpdate命令。
[root@k3master ~]# systemctl stop ntpd //停止ntpd服务,注意不是ntpdate,是ntpd
[root@k3master ~]# systemctl start ntpdate.service //启动ntpdate服务
[root@k3master ~]# systemctl status ntpdate.service //查看ntpdate服务状态,已正常
● ntpdate.service - Set time via NTP
Loaded: loaded (/usr/lib/systemd/system/ntpdate.service; enabled; vendor preset: disabled)
Active: active (exited) since Sun 2022-03-13 23:29:26 CST; 7s ago
Process: 49277 ExecStart=/usr/libexec/ntpdate-wrapper (code=exited, status=0/SUCCESS)
Main PID: 49277 (code=exited, status=0/SUCCESS)
Mar 13 23:12:49 k3master systemd[1]: Starting Set time via NTP…
Mar 13 23:29:26 k3master systemd[1]: Started Set time via NTP.
[root@k3master ~]# ntpdate 210.23.25.77 //做一次手工同步,成功。 实际这个时候ntpd已经停止了.
13 Mar 23:29:49 ntpdate[49322]: adjust time server 210.23.25.77 offset -0.074604 sec
//接着说 timdatectl 这里我们就明显看出,ntp服务本身是两个软件服务,一个是ntpd服务,一个是ntpdate服务
//如果ntpdate开机启动是disabled,这个命令针对ntpdate也是无效的(必须使用systemctl enable ntpdate启用后才能对ntpdate进行干预)
\[root@ht8 ~\]# timedatectl set-ntp true
//启用ntpdate
[root@ht8 ~]# systemctl enable ntpdate
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpdate.service to /usr/lib/systemd/system/ntpdate.service.
[root@ht8 ~]# systemctl enable ntpdate.service
[root@ht8 ~]# systemctl is-enabled ntpdate
enabled
//我们再执行 timedatectl set-ntp true, 发现 NTP enabled: yes ,
//也就是说首先要保证ntpdate本身要启用,我们才能使用timedatectl干预ntpdate的使用。
[root@ht8 ~]# timedatectl
Local time: Wed 2022-03-09 21:27:07 CST
Universal time: Wed 2022-03-09 13:27:07 UTC
RTC time: Wed 2022-03-09 13:27:07
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[root@ht8 ~]# timedatectl set-ntp false //设置为false以后
//查看timedatectl,发现ntpdate已经关闭.
[root@ht8 ~]# timedatectl
Local time: Wed 2022-03-09 21:28:17 CST
Universal time: Wed 2022-03-09 13:28:17 UTC
RTC time: Wed 2022-03-09 13:28:17
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
//这个是所有资料中几乎都没有讲到的,都要通过实验来验证。
timedatectl常见操作如下 (centos7之后增加的命令用于systemctl 管理后台应用的)
1、查看当前时间/日期/时区:timedatectl或者timedatectl status
2、查看所有可用时区:timedatectl list-timezones //直接可以使用
3、设置时区:timedatectl set-timezone “时区信息” //timedatectl set-timezone “Asia/shagnhai”
4、设置UTC:timedatectl set-timezone UTC //设置为标准时间
5、设置时间:timedatectl set-time HH:MM:SS //timedatectl set-time 15:58:30
6、设置日期:timedatectl set-time YYYY-MM-DD //timedatectl set-time 20151120
7、设置日期时间:timedatectl set-time “YYYY-MM-DD HH:MM:SS” //timedatectl set-time '16:10:40 2015-11-20'
8、设置硬件时钟为本地时间:timedatectl set-local-rtc 1 //直接可使用
9、设置硬件时钟为UTC时间:timedatectl set-local-rtc 0 //直接可以使用,将硬件时钟设置为UTC
10、启动NTP时间同步(启用NTP服务或者Chrony服务):timedatectl set-ntp true //直接可使用
11、禁用NTP时间同步:timedatectl set-ntp false
[root@ht8 ~]# timedatectl | grep local
RTC in local TZ: no
手工执行
如果ntpd不好使的情况下,可以先用 ntpdate -b cn.pool.ntp.org 同步下 #同步时间命令 //cn.pool.ntp.org可以是其他时间服务器地址
如果想看执行过程可以 ntpdate -d cn.pool.ntp.org //可以看到同步的整个过程。
使用该命令请确认已经停止ntpd服务。
修改时区
找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai替换当前的/etc/localtime。
修改/etc/sysconfig/clock文件的内容为:
ZONE=”Asia/Shanghai”
UTC=false
ARC=false
utc即格林尼治时间,cst即每个国家本地时间(由于我们是中国,所以特指北京时间).
更多详细的信息可以参考:
https://www.eecis.udel.edu/~mills/ntp/html/ntpdsim.html
timedatectl set-ntp true
手机扫一扫
移动阅读更方便
你可能感兴趣的文章