ntp时间同步是一种用于网络时间同步的技术。目前有多种时间同步技术,每种技术都有其独特的特点,并且不同技术的时间同步精度存在显著差异。
常用的同步技术及其准确度和覆盖范围如下:
时间同步技术 | 准确度 | 覆盖范围 |
---|---|---|
短波授时 | 1~10毫秒 | 全球 |
长波授时 | 1毫秒 | 区域 |
GPS | 5~500纳秒 | 全球 |
电话拨号授时 | 100毫秒 | 全球 |
互联网授时(NTP) | 1~50毫秒 | 全球 |
SDH传输网授时 | 100纳秒 | 长途 |
此外,还有两个相对简单的、低精度的互联网时间协议:Time协议(RFC868)和Daytime协议(RFC867),它们可以提供1秒校准精度的广域网时间同步。
在Windows Server 2012 R2版本中,取消了互联网时间同步功能,需要使用其他方法进行时间同步。
可以根据不同的场景进行设置:
一、没有Windows域环境
集群中的每台服务器都需要能够上网,并执行以下操作:
开启NTP客户端服务:
1、打开命令行终端,输入:
,打开组策略管理器。
2、按照路径计算机配置\管理模板\系统\Windows时间服务\时间提供程序找到服务器设置文件。
3、双击配置Windows NTP客户端。
4、在Ntp Server项中,输入要同步到的时间服务器的IP地址(也可以输入域名),注意必须包含0x9或0x1;在类型项中选择NTP;点击应用—确定按钮。
5、启动NTP客户端;启用NTP客户端;点击应用–确定按钮。
6、执行以下命令更新组策略:
7、检查W32Time服务是否已启动,启动类型应为自动启动。
二、有Windows域环境
只需对域控制器执行操作,其他域内的客户端无需操作。
更改方法与第一种情况相同,修改组策略-》更新组策略-》检查W32Time服务是否启动。
如果对客户端设置了组策略,客户端将应用组策略的配置,而不是与域控制器同步时间。
三、没有外网的环境
如果服务器无法连接外网,而当前环境有ntpd服务器:
在第4步中,将ntp server的地址改为内网ntpd服务器的地址即可。
注意:Windows使用ntpd命令的方式与NTP服务器同步时间,当客户端与服务器的时间差距过大时,客户端无法与服务器进行时间同步。
无论是否有域环境,无论是否使用组策略,都是如此。
这与Linux的ntpdate命令和ntpd命令类似,Linux的ntpdate命令无论客户端与服务器的时间差距多大都可以与服务器同步,而ntpd命令在时间差距过大时无法同步。
另一种方法是不修改组策略:
有Windows域环境,在每台客户端中添加一个任务计划,定时执行以下命令:
没有Windows域环境,在每台客户端中添加一个任务计划,定时执行以上命令。
当然,还可以通过更改注册表来设置时间同步,步骤如下:
一、服务端配置(NTP服务器,客户端将根据这台服务器的时间进行同步):
1、按Win键+R键,进入“运行”,输入“regedit”,进入注册表。
2、在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type右键修改为NTP(默认就是NTP,如果已经是NTP则无需修改)。
3、修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer的Enabled值为1(原来为0)。
4、修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config里的”AnnounceFlags”值为5(原来为a)。
5、重启时间服务:
6、按开始->运行,输入”services.msc”进入服务,将Windows Time服务的启动方式设置为自动。
二、客户端配置:
1、找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\NtpServer,修改值为设置的NtpServer的IP,后加,0x1。例如:“172.31.4.51,0×1”。注意,IP后面跟上逗号和0x1。
2、修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient里的”SpecialPollInterval”,这个代表时间间隔,多长时间与NTP服务器同步一次,单位为秒,原来的值为”93a80″(十六进制的)。
3、修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\Config里的UpdateInterval的值,我这里改为5,但其实我不确定这个要不要设置,我自己在试的过程中发现这个不设置好像就同步不到了,所以我才设置,网上其他人说的配置没有这一步。这个原来的默认值是360000(十进制的)。
4、设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\MaxNegPhaseCorrection为FFFFFFFF(原来为d2f0,十六进制)。
设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\MaxPosPhaseCorrection为FFFFFFFF(原来为d2f0,十六进制)。
MaxNegPhaseCorrection代表慢于NTP服务器的时间,如果本地时间超过NTP服务器MaxNegPhaseCorrection秒,就不同步;
MaxPosPhaseCorrection代表快于NTP服务器的时间,如果本地时间超过NTP服务器MaxPosPhaseCorrection秒,就不同步。
5、重启W32Time服务:
6、按开始->运行,输入”services.msc”进入服务,将Windows Time服务的启动方式设置为自动。