Linux(Ubuntu) / Windows NTP时间同步指南

Linux(Ubuntu) / Windows NTP时间同步指南

一. 什么是NTP ?
NTP
Network Time Protocol 网络时间协议
它属于应用层协议,传输层采用UDP,用于同步设备之间的时间。提供时间规范的的设备为服务器,接收时间服务的设备为客户端。NTP的时间来源是国际标准时间UTC(Universial Time Coordinated)

ntpd
NTP守护进程
它是操作系统守护进程,提供完整的NTP应用服务。为了追求最高精度(可以达到约232皮秒),ntpd会完成复杂的计算。ntpd启动时,从配置文件ntp.conf中读取同步数据来源以及相关设置。使用ntpq命令可以查看当前连接的时间服务器状态。

二. 为什么要用NTP ?
对于计算机集群,计算机设备要使用统一的标准时间,来记录各种事件的发生时序,若计算机时间不同步,很多依赖时序运行的应用就会逻辑混乱,出现问题。

配置再好,性能再高的计算机,运行久了也会有时钟误差。只有原子钟能够持续提供高精度的时间,但其费用昂贵,只有少数计算机可以连接原子钟,作为公共NTP服务器。

NTP主要应用于要求网络中全部设备时钟保持一致的场景,比如从计算机集群中获取日志,多终端的计费系统计时,重启网络中所有设备等。

三. 如何配置NTP服务器 ?
Ubuntu
要把一台主机用作NTP服务器,首先要保证其能通外网。
它先与外部时间服务器同步,然后给内部各主机提供同步服务。
第一步:安装ntp软件包
第二步:修改配置文件
第三步:启动ntpd进程
第四步:监视时间同步情况
第五步:退出ntpd进程

1.安装ntp
~$ sudo apt install ntp

查看相关帮助手册
~$ man ntpd
~$ man ntp.conf
~$ man ntpq
2.编辑配置文件
安装ntpd后,Ubuntu下默认的配置文件绝对路径是 /etc/ntp.conf
~$ sudo vim /etc/ntp.conf
具体编辑如下:

你的计算机集群是封闭的还是开放的?
如果封闭,则不采用任何外部NTP服务器给自己同步:
注释掉所有pool相关语句
 #pool 0.ubuntu.pool.ntp.org iburst
 #pool 1.ubuntu.pool.ntp.org iburst
 #pool 2.ubuntu.pool.ntp.org iburst
 #pool 3.ubuntu.pool.ntp.org iburst
 #pool ntp.ubuntu.com
然后在下一步添加本机作为服务器时,将stratum层级设置为0(最顶级)
如果开放,则可以使用外部NTP服务器给自己同步校准:
找到配置默认服务器地址的语句,在Ubuntu中是 pool 0.ubuntu.pool.ntp.org iburst 此句,通常会有几个备选服务器。在此句下方添加新的高层级NTP服务器,可以参考国内常用NTP服务器地址:https://www.cnblogs.com/kaishirenshi/p/10475911.html
上海交通大学网络中心的服务器,添加语句:
server ntp.sjtu.edu.cn iburst prefer
甚至可以添加多个外部服务器
设置本机为NTP服务器
set local as server
server 127.127.1.0
fudge 127.127.1.0 stratum 10
设置层级为10,可根据具体情况修改。
层级低的向层级高的获取时间,对于封闭集群,建议stratum设置为0
添加限制访问权限
只允许规定网段的主机访问本服务器,于是在
restrict 127.0.0.1
restrict ::1
这两句下面添加语句(请使用ifconfig命令查询你的IP所在网段,mask掩码根据具体情况设置)
restrict 172.16.166.0 mask 255.255.255.0 nomodify notrap
nomodify 限制客户端不能使用ntpc和ntpq来修改服务器的时间参数
notrap 不提供trap这个远程时间登录的功能
另外还提供的参数有:
ignore 拒绝所有类型的NTP连接
noquery 禁止客户端查询服务器时间
notrust 拒绝没有认证的客户端
nopeer 不与同一层级的NTP服务器同步
保存退出
Esc,:wq,Enter,休息一下,泡杯咖啡。
3.启动ntpd进程
~$ sudo service ntp start
查看是否开启成功:
~$ sudo service ntp status

4.监视时间同步情况
启动ntpd进程之后,服务器信息是不会打印出来的,需要用监视工具进行查看和监视,一般用到这两个:ntpstat 和 ntpq

ntpstat的使用(需单独安装)
~$ sudo apt install ntpstat
~$ sudo ntpstat
时间同步情况将会打印到终端
ntpq的使用
ntpq无需单独安装,安装ntp软件包时已被包含在内
~$ sudo watch ntpq -p
同步情况会实时地显示出来,示例如下: 在这里插入图片描述
每一列表示的意义如下:

remote*上级响应中最精准的NTP服务器 +响应请求的NTP服务器
refidNTP响应服务器的更高级的时间基准服务器
st响应的NTP服务器对应的stratum层级(stratum意义:低层级向高层级获取时间)
t辅助信息
when多久前做过时间同步更新(秒)
poll下次更新在多久之后(秒)
reach已向上层服务器要求更新次数
delay网络传输中的延迟时间
offset本地与服务器时间的差距,数值越接近0,时间差越小
jitter系统时间与硬件时间的差异

5.退出ntpd进程
~$ sudo service ntp stop 即可

如果出现异常,可以用kill强制杀掉进程
~$ ps auxc | grep ntpd
找到对应进程pid,然后执行
~$ sudo kill pid
四. Windows
windows上配置NTP服务器的方法较简单,分为以下几步
第一步:关闭默认的时间提供程序
第二步:修改相应注册表项
第三步:剩下的交给命令行

1.关闭默认的时间提供程序
打开本地组策略编辑器
Win + R打开运行窗口,输入gpedit.msc,打开本地组策略编辑器
关闭默认的时间提供程序
找到路径:计算机配置 \ 管理模板 \ 系统 \ Windows时间服务 \ 时间提供程序

配置 Windows NTP 客户端
启用 Windows NTP 客户端
启动 Windows NTP 服务端
都改为 未配置 状态:
在这里插入图片描述
2.修改相应注册表项
打开注册表编辑器
Win + R打开运行窗口,输入regedit,点击确定打开注册表编辑器 (截图略)
修改相应参数
配置:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ Config
AnnounceFlags:标记此计算机是否是可靠的
FrequencyCorrectRate:控制校正时钟的速率(过小会引起过度校正,过大会过很长一段时间才能校正)
MaxPollInterv 以及 MinPollInterval:系统轮询服务器的时间间隔最大值以及最小值,限制时间同步的频率
参数:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ Parameters
NtpServer:列出NTP服务器事件源的DNS名称或IP,多个地址用空格隔开
Type:指定同步的对等方采用哪种方式同步,一般选择NTP
客户端:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ TimeProviders \ NTPClient
Enabled:是否作为客户端向上层获取时间同步,设为1表示开启(连接到外部时钟源)
服务器:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ TimeProviders \ NTPServer
Enabled:是否作为服务器向下层提供时间同步,设为1表示开启,现在配置服务器,所以一定是1
3.命令行运行
开启时间服务

net start w32time
更新配置
w32tm /configure /update
查询时间服务状态
w32tm /query /status
若查询到的状态不是更新后的状态,可尝试再修改一下注册表,然后更新配置,再查询
运行效果显示如下
在这里插入图片描述

此时Windows已经可以作为服务器向其它客户端提供时间同步服务

五. 客户端如何使用NTP服务?

Ubuntu
客户端和服务端只是在配置文件上有所不同
第一步:安装ntp软件包,以及ntpstat工具
第二步:修改配置文件
第三步:启动ntpd进程
第四步:监视时间同步情况
第五步:退出ntpd进程
第六步:添加定时自动同步功能

1.安装ntp和ntpstat
~$ sudo apt install ntp
~$ sudo apt install ntpstat

2.修改配置文件
~$ sudo vim /etc/ntp.conf
具体修改如下:

将默认NTP服务器注释掉

pool 0.ubuntu.pool.ntp.org
改为
#pool 0.ubuntu.pool.ntp.org
对其余pool服务器语句做相同处理

添加刚刚自己搭建的NTP服务器IP
在注释掉的服务器后面添加自己搭建的服务器
假设我的服务器IP是 172.16.166.139,则添加语句:
server 172.16.166.139 iburst
保存退出
Esc,:wq,Enter

3.启动ntpd进程
请先确保您的NTP服务器已经开启ntp服务进程

~$ sudo service ntp start
查看是否开启成功:
~$ sudo service ntp status

4.监视时间同步情况
~$ sudo ntpstat
或者
~$ sudo watch ntpq -p(持续监视)

5.退出ntpd进程
~$ sudo service ntp stop

6.添加定时自动同步功能
什么是crontab
在Linux中,周期执行的任务一般由cron这个守护进程来处理,可以使用命令 ~$ ps auxc | grep cron 来查看它。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。
cron的配置文件一般在三个位置:一是 /etc/cron.d/ 目录下,二是 /var/spool/cron/ 目录下,
三是系统配置文件 /etc/crontab。crontab是“cron table”的简写。
修改crontab配置文件,实现定时自动同步
~$ sudo vim /etc/crontab
打开crontab配置文件后,添加定时信息以及要执行的命令即可
1)注意crontab特定的定时信息格式:
m(minute) h(hour) dom(day-of-month) mon(month) dow(day-of-week)
2)特殊字符的用法:

  • 表示范围内所有数字
    / 表示每,在h 下写 */5 表示每5小时,12-23/2 表示12点到23点中间每2小时
  • 表示取值范围内所有时间,在 mon 下写 1-4 表示每年1月到4月
    设置每隔2小时进行一次时间同步,可以作以下编辑:
    0 */2 * * * root service ntp start; sleep 20; service ntp stop;
    中间sleep20秒是为了ntpd有足够时间去获取同步,如果使用ntpdate(不推荐)则不需要此操作

编辑crontab后记得保存退出,立即生效 在这里插入图片描述
Windows
如果您使用的是windows系统,那么需要
第一步:以管理员身份运行Windows命令行终端
第二步:用Windows自带的w32tm服务完成同步
第三步:其它相关操作

  1. 运行Windows命令行终端
    Windows菜单搜索“命令行提示符”
    右键点击并选择“以管理员身份运行”,弹出终端 在这里插入图片描述

  2. 用w32tm服务完成同步
    开启w32time服务

net start w32time
注册时间服务
注册将作为服务运行的时间服务,并将其默认配置信息添加到注册表。
w32tm /register
手动添加NTP时间同步服务器
在此假设我的NTP服务器IP为172.16.166.139
w32tm /configure /syncfromflags:manual /manualpeerlist:“172.16.166.139,0x1” /update
/manualpeerlist的参数列表中可以添加多个时间源,用空格分隔
手动同步,执行后计算机会主动向服务器同步
w32tm /resync
查看同步源
w32tm /query /source
查看时间同步状态
w32tm /query /status
运行效果显示如下 在这里插入图片描述
退出w32time服务
如果想停止时间同步服务,只需执行
net stop w32time

  1. 其它相关操作
    设置系统轮询时间同步的频率(多少秒同步一次)
    Win + R打开运行窗口,输入gpedit.msc打开本地组策略编辑器
    根据路径:计算机配置 \ 管理模板 \ 系统 \ Windows 时间服务 \ 时间提供保护 \ 启用Windows NTP 客户端
    双击进入页面,选择已启用
    根据路径:计算机配置 \ 管理模板 \ 系统 \ Windows 时间服务 \ 时间提供保护 \ 配置Windows NTP 客户端
    双击进入页面,选择已启用
    注意到配置选项中有一项SpecialPollInterval(默认1024),手动设置此值,改变时间同步频率

查看配置

w32tm /query /configuration
查看本机与另一台计算机(假设是172.16.166.139)的时间漂移带状图
w32tm /stripchart /computer:172.16.166.139
显示当前时区设置
w32tm /tz

五、*其它
为什么用ntpd不用ntpdate?
ntpdate的实现是立即同步,而ntpd的实现是平滑同步
对于时间敏感的应用程序,时钟的跃变会造成较大影响,而ntpdate实现时间校准的方式就相当于“跃变”。它获取时间后,直接调用settimeofday设置系统时间,不安全,不精准,不优雅。而ntpd会一点点校准时间,虽然它用时更长,但对时间敏感的应用程序很友好。ntpd和ntpdate会占用同一个UDP端口,因此两者不能同时运行。
系统时间、硬件时间以及它们的同步
系统时间(由Linux Kernel提供,它为运行的应用提供时序,每次关机时会同步到硬件时间,开机时会从硬件时间同步)
查看系统时间
~$ date
硬件时间(由计算机硬件提供,是独立于操作系统运行的一部分,即使关机也不受影响,它的作用就是在关机期间继续保持运行,以便下次开机系统可以获得正确时间)
显示硬件时间
~$ sudo hwclock -r
手动把系统时间同步到硬件时间
~$ sudo hwclock --systohc
手动把硬件时间同步到系统时间
~$ sudo hwclock --hctosys
注意
[1] 如果不使用sudo权限,可能会报错:hwclock: Cannot access the Hardware Clock via any known method.
[2] 使用man toolname( man date 和 man hwclock )查看完整手册
用tzselect工具手动修改时区
直接运行tzselect,根据提示选择相应时区
~$ tzselect
根据提示选择时区,程序最后会输出如下信息:
You can make this change permanent for yourself by appending the line
TZ=‘Asia/Shanghai’; export TZ
to the file ‘.profile’ in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

修改 /home/ 你的用户名 /.profile 文件,使其永久生效
根据上面的提示,修改用户主目录下的.profile文件
~$ sudo vim /home/你的用户名/.profile
在文件末尾添加:
TZ=‘Asia/Shanghai’; export TZ
保存退出 Esc,:wq,Enter
退出用户(Log Out)再登录用户(Log In)即可生效

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值