一、        问题背景

天威视讯项目3月底发生了一次点播出现节目请求超时的情况,在查询故障的过程中,发现MAP服务器操作系统的时钟被向前调整了11秒,姑且不论是否是这个原因导致的故障,但每台服务器在安装了NTP的情况下,为什么还会一次修改达到11秒情况的时间差,是需要查清的一个事情。

此文由博主徐徐原创,转载请指明出处欢乐世界http://www.happyworld.net.cn

二、        问题分析

1、       现象分析

天威视讯项目目前部署的NTP服务是一台MYSQL服务器作为NSP系统的服务端,其他服务器如(IPG、AAA、MAP等)就同步这台服务器的时钟,而MYSQL则同步天威自己部署的一台NTP服务器。一个简单的三层的架构。

查看了8台MAP,每台MAP都有过调整11秒时钟的记录,且每台调整的时间都不一样,查看时钟源MYSQL的系统日志,发现是由于MYSQL1的时钟源调整了11秒的时间,进而引起NSP系统内所有服务器都做了一次同步操作。

MYSQL1:  Mar 31 12:08:37 MYSQL1 ntpd[20241]: time reset -11.476554 s

MAP1:    Mar 31 13:06:20 MAP1 ntpd[26731]: time reset -11.476079 s

MAP2:    Mar 31 12:57:42 MAP2 ntpd[25106]: time reset -11.476056 s

IPG1:     Mar 31 12:51:26 IPG1 ntpd[4426]: time reset -11.476588 s

AAA1:    Mar 31 13:14:33 AAA1 ntpd[8932]: time reset -11.476668 s

从上面日志可以看出,在MYSQL时间修改后,其他服务器陆续进行了时钟校正。我们这里暂不讨论天威源头NTP时钟是否有过11秒的调整,这里讨论为何架设了NTP服务之后,时间会一次校正这么大的值。

2、       原因分析

经过查询资料,NTP的时间同步有两种方式,一种是通过ntpdate进行手动调整(也可以做成定时任务);一种是通过ntpd服务进行自动调整。目前天威部署的NTP全是以第二种ntpd服务的方式配置的。

ntpdate就是执行该命令的时候就将客户端的时钟与服务器端的时钟做下同步,不管差异多大,都是一次调整到位。

而ntpd服务的方式,又有两种策略,一种是平滑、缓慢的渐进式调整(adjusts the clock in small steps所谓的微调);一种是步进式调整(跳跃式调整)。两种策略的区别就在于,微调方式在启动NTP服务时加了个“-x”的参数,而默认的是不加“-x”参数。

假如使用了-x选项,那么ntpd只做微调,不跳跃调整时间,但是要注意,-x参数的负作用:当时钟差大的时候,同步时间将花费很长的时间。-x也有一个阈值,就是600s,当系统时钟与标准时间差距大于600s时,ntpd会使用较大“步进值”的方式来调整时间,将时钟“步进”调整到正确时间。

假如不使用-x选项,那么ntpd在时钟差距小于128ms时,使用微调方式调整时间,当时差大于128ms时,使用“跳跃”式调整。

这两种方式都会在本地时钟与远端的NTP服务器时钟相差大于1000s时,ntpd会停止工作。在启动NTP时加了参数“-g”就可以忽略1000S的问题。

以下是man ntpd里关于加参数“-x”的描述:

-x

Normally, the time is slewed if the offset is less than the step threshold, which is 128 msby default, and stepped if above the  threshold.  This option  sets the threshold to 600 s, which is well within the accuracy window to set the clock manually. Note: Since the slew rate of typical Unix kernels is limited to 0.5 ms/s, each second of adjustment requires an amortization interval of  2000 s. Thus, an adjustment as much as 600 s  will take  almost  14  days to complete. This option can be used with the -g and -q options. See the tinker command for other options. Note: The kernel time discipline is disabled with this option.

Offset(与服务器的时间差)

0-128ms

128ms-600s

600s-1000s

1000s以上

使用-X参数

微调

微调(速度大约是0.5ms/s,调整600秒要14天左右)

跳跃

退出(加-g参数可忽略)

不使用-X参数

微调

跳跃

跳跃

退出(加-g参数可忽略)

只有对于跳跃式的校正时间,系统日志才会记录。

天威视讯项目由于是按照跳跃式配置,所以就会一次有修改11秒的情况出现。

3、       验证测试

针对这两个策略,我们做了几个测试验证:

1、 未加参数“-x”时,如何调整:

将一台测试服务器的时钟,向前修改了大约6秒钟左右

[root@AAA3 ~]# date -s 16:15:28

2012年 04月 06日 星期五 16:15:28 CST

同时在NTP服务器端和客户端执行查询时间操作,两者相差6秒。

NTP客户端

NTP服务端

[root@AAA3 ~]# date
2012年 04月 06日 星期五 16:15:34 CST

[root@MYSQL1 ~]# date
2012年 04月 06日 星期五 16:15:40 CS

然后一直查看NTP客户端服务器的时钟同步效果:

刚开始,未检测到时间异常,下一次同步要512秒一个周期。

[root@AAA3 ~]# ntpq -p

remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

*CC1           172.18.245.1  3  u  132  512  377    1.206    0.806   0.278

检测到与远端服务器的时间差offset 为6289.10(单位:ms

[root@AAA3 ~]# date -R

Fri, 06 Apr 2012 16:30:44 +0800

[root@AAA3 ~]# ntpq -p

remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

CC1             172.18.245.1  3 u   1  512  377    1.208  6289.10 4446.22

经过几次时间的同步,客户端发现与服务器端时钟的确是有差异,不是偶然一次的行为,客户端须得进行相应的调整,于是就进行了一次step的跳跃式时间校正。同步周期poll也由之前的512秒一次,变成每64秒一次(同步不等于就立即调整时间)。同步完后,与服务器的时间差offset 为0ms。

remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

*CC1             172.18.245.1   3 u  513  512  377  1.208  6288.98   0.771

[root@AAA3 ~]# ntpq -p

remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

CC1             .STEP.       16 u  225  64    0   0.000   0.000   0.001

此时再同时查询服务器端和客户端的时间:

NTP客户端

NTP服务端

[root@AAA3 ~]# date -R
Fri, 06 Apr 2012 16:56:24 +0800

[root@MYSQL1 ~]# date -R
Fri, 06 Apr 2012 16:56:24 +0800

目前时间已经同步正常,查看客户端的系统日志,可以发现:

[root@AAA3 ~]# tail -f /var/log/messages

Apr  6 16:39:01 AAA3 ntpd[2576]: synchronized to 172.16.100.81, stratum 3

Apr  6 16:56:16 AAA3 ntpd[2576]: time reset +6.288863 s

Apr  6 16:59:49 AAA3 ntpd[2576]: synchronized to 172.16.100.81, stratum 3

由此可以验证,在默认情况下,未加参数“-X”的情况下,NTP在时差大于128ms的情况,是进行的step跳跃式的时间同步。

2、 加参数“-x”时,如何调整:

将一台测试服务器的时钟,向前修改了大约10秒钟左右

15:02分修改时间

[root@AAA1 ~]# date -s 15:02:16

2012年 04月 06日 星期五 15:02:16 CST

查询时间

NTP客户端

NTP服务端

offset

15:18

[root@AAA1 ~]# date
2012年 04月 06日 星期五 15:18:28 CST

[root@MYSQL1 ~]# date
2012年 04月 06日 星期五 15:18:38 CST

10秒

[root@AAA1 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*CC1             172.18.245.1     3 u   61   64  377    0.094  9895.33  81.311

 

 

15:33

[root@AAA1 ~]# date
2012年 04月 06日 星期五 15:33:15 CST

[root@MYSQL1 ~]# date
2012年 04月 06日 星期五 15:33:24 CST

9秒

[root@AAA1 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*CC1             172.18.245.1     3 u  102  128  377    0.098  8737.38 225.355

 

 

15:43

[root@AAA1 ~]# date -R
Fri, 06 Apr 2012 15:43:05 +0800

[root@MYSQL1 ~]# date -R
Fri, 06 Apr 2012 15:43:13 +0800

8秒

[root@AAA1 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*CC1             172.18.245.1     3 u   97  128  377    0.099  8125.89 508.792

中间一直是微调状态

18:09

[root@AAA1 ~]# date -R
Fri, 06 Apr 2012 18:09:04 +0800

[root@MYSQL1 ~]# date -R
Fri, 06 Apr 2012 18:09:05 +0800

1秒

[root@AAA1 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*CC1             172.18.245.1     3 u  260  512  377    1.325  1241.99 220.343

可以看出,NTP一直在同步时钟,且进行很小的微调,9895.33ms的时间差,调整到18点09分还有1241.99ms,之间用了大概3小时来同步8秒多的时间,大概每秒调整0.7ms时间。

3、 加参数“-x”时,如何调整(时间差比较偏大,但是小于600s的情况):

我们第二步测试的是10秒时间差的情况,对于更大的时间差,这种微调策略是什么效果呢,我们再进行一个测试验证:

将一台测试服务器的时间修改偏差了70几秒(17:26修改):

[root@AAA3 ~]# date -s 17:26:00

2012年 04月 06日 星期五 17:26:00 CST

查询时间

NTP客户端

NTP服务端

offset

17:35

[root@AAA3 ~]# date -R
Fri, 06 Apr 2012 17:35:19 +0800

[root@MYSQL1 ~]# date -R
Fri, 06 Apr 2012 17:36:32 +0800

73秒

[root@AAA3 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 CC1             172.18.245.1     3 u    6   64  377    0.123  73676.1   9.785

 

 

第二天
10:43

[root@AAA3 ~]# date -R
Sat, 07 Apr 2012 10:43:26 +0800

[root@MYSQL1 ~]# date -R
Sat, 07 Apr 2012 10:43:42 +0800

16秒

[root@AAA3 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*CC1             172.18.245.1     3 u   31   64  377    0.122  16137.3 218.643

 

 

第二天
17:27

[root@AAA3 ~]# date -R
Sat, 07 Apr 2012 17:27:38 +0800

[root@MYSQL1 ~]# date -R
Sat, 07 Apr 2012 17:27:38 +0800

5ms

[root@AAA3 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*CC1             172.18.245.1     3 u   43  256  377    0.135    5.182   0.589

这次73秒的时间差,用了大概1天的时间,平均每秒调整0.5ms。

由此可以验证,对于小于600s的情况,加了参数“-x”的,不管是10秒还是70秒,500秒,都是进行着这种微调式的时钟同步策略,NTP服务将这种时间差通过分散到每一秒去逐步进行微调,让系统基本感觉不到时间上的变化。这样能保证某些对时间跳动敏感的系统里,能很好的保证业务的安全。

4、 加参数“-x”时,如何调整(时间差大于600s):

对于大于600s时间差的情况,我们也做了测试验证:

将时钟往前调十几分钟:

查询时间

NTP客户端

NTP服务端

offset

17:08

[root@AAA3 ~]# date -R
Fri, 06 Apr 2012 16:55:16 +0800

[root@MYSQL1 ~]# date -R
Fri, 06 Apr 2012 17:08:09 +0800

将时间改为提前13分钟

[root@AAA3 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 CC1             172.18.245.1     3 u    -   64    1    0.130    0.077   0.001

 

 

 

[root@AAA3 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 CC1             172.18.245.1     3 u    2   64  377    0.124  772789. 292086.

772秒

 

 

[root@AAA3 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 CC1             172.18.245.1     3 u    2   64  377    0.124  772789. 292086.

 772秒

 

 

 

 

0秒 

[root@AAA3 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 CC1             172.18.245.1     3 u   31   64    1    0.136    8.067   0.001

 

17:17

[root@AAA3 ~]# date -R
Fri, 06 Apr 2012 17:17:36 +0800

[root@MYSQL1 ~]# date -R
Fri, 06 Apr 2012 17:17:36 +0800

0秒

NTP服务大概过了5分钟后,就将相差的700多秒时间差,一步到位的进行了校正。

查询系统日志:

Apr  6 17:02:53 AAA3 ntpd[24511]: synchronized to 172.16.100.81, stratum 3

Apr  6 17:15:45 AAA3 ntpd[24511]: time reset +772.789372 s

Mar 19 10:44:12 yunwei-002 ntpd[3433]: 0.0.0.0 c61c 0c clock_step +763.773061 s

三、        问题处理

对于VOD点播系统,MAP、MYSQL、ORACLE等模块都会对一些时间比较敏感(比如节目调度时的定时计划、时移时的时间差等等,数据库中可能造成某些记录的创建时间晚于修改时间等等),如果时间不是连续的,而是跳动的,必然对业务有较大的影响。建议后期对NTP策略进行调整。

[root@AAA3 ~]# cat /etc/sysconfig/ntpd

# Drop root to id 'ntp:ntp' by default.

OPTIONS="-u ntp:ntp -x  -p /var/run/ntpd.pid"

# Set to 'yes' to sync hw clock after successful ntpdate

SYNC_HWCLOCK=no

# Additional options for ntpdate

NTPDATE_OPTIONS=""

将/etc/sysconfig/ntpd文件中的OPTIONS里增加“-x”参数,重启ntpd服务即可。

[root@AAA3 ~]# service ntpd restart

NTP时钟调整策略的更多相关文章

  1. NTP时钟同步配置

    NTP在Linux下有两种时钟同步方式: 直接同步(也称跳跃同步)和平滑同步(也称微调同步). 直接同步 使用ntpdate命令进行同步,直接进行时间变更. 如果服务器上存在一个12点运行的任务,当前 ...

  2. 【转载】 PyTorch学习之六个学习率调整策略

    原文地址: https://blog.csdn.net/shanglianlm/article/details/85143614 ----------------------------------- ...

  3. PyTorch学习之六个学习率调整策略

    PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 有序调整:等间隔调整(Step),按需调整学习率(Mul ...

  4. PTP时钟和NTP时钟同步有什么区别

    PTP时钟 理论上任何PTP时钟都能实现主时钟和从时钟的功能,但一个PTP通信子网内只能有一个主时钟.整个系统中的最优时钟为最高级时钟GMC(Grandmaster Clock),有着最好的稳定性.精 ...

  5. 史上最全学习率调整策略lr_scheduler

    学习率是深度学习训练中至关重要的参数,很多时候一个合适的学习率才能发挥出模型的较大潜力.所以学习率调整策略同样至关重要,这篇博客介绍一下Pytorch中常见的学习率调整方法. import torch ...

  6. ntp时钟服务器

    NTP服务器时钟校准的基本流程: (1):NTP客户端向NTP服务器发出一个时间请求包(UDP包),其中包含了该包离开客户端时的时间戳. (2):当服务器接收到该包时.填入包到达时的时间戳.包离开时的 ...

  7. Windows 2008 R2 NTP 时钟同步配置

    一.配置 本地组策略 a.windows+R 或  "开始菜单"  | "运行"  ,打开运行窗口. 输入gpedit.msc打开本地组策略 b.在 本地组策略 ...

  8. 《Code Complete》ch.25 代码调整策略

    WHAT? 本章讨论程序性能调整问题.但是对用户来说,程序员按时交付软件,提供一个清爽的用户界面,避免系统经常死机常常比程序性能更加重要 WHY? 在程序设计这种文化中,编写出能够节省几微秒的代码可以 ...

  9. Linux下的ntp时钟同步问题

    前段时间,项目中有个需求,需要将linux和windows的时间进行同步,网上也有很多类似时钟同步的帖子,大致类似:不过本次的linux的机器有点特殊,没有service命令,而且要求在另一台suse ...

随机推荐

  1. STP基本概念及实验

    相关命令(华为交换机): stp enable(在交换机开启stp:stp使能) display stp 查看stp状态 stp mode stp/rstp/mstp  启用stp/rstp/mstp ...

  2. StringBuilder -字符串缓冲区,节约内层空间变长数组

    package cn.learn; /* 字符串缓冲区 -缓冲可提高效率 java.lang.StringBuilder 字符串的底层是一个被final修饰的数组,不能改变,是一个常量 private ...

  3. Neo4j elk Elasticsearch kibana kettle

    图形数据库,用于查找犯罪或者啥的很好用:反欺诈 win安装neo4j使用查询https://www.cnblogs.com/rubinorth/p/5853204.html linux下安装neo4j ...

  4. 关于plt.imshow()显示彩图问题

    https://blog.csdn.net/cnnmena/article/details/79613531

  5. C# lodop 打印控件的使用

    原文:https://www.cnblogs.com/izhiniao/p/4160117.html 官网:http://www.mtsoftware.cn/demo.html 先看效果图 : lod ...

  6. mysql 删除重复数据只保留一条记录

    删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...

  7. azkaban简单使用

    步骤 1.通过web服务器创建项目,项目名称和描述都是必须填的2.上传zip包 job定义 1.简单的job一个job就是一个properties文件,只不过文件是以.job结尾,文件里面定义了job ...

  8. CSS3中的弹性盒子模型

    介绍 在css2当中,存在标准模式下的盒子模型和IE下的怪异盒子模型.这两种方案表示的是一种盒子模型的渲染模式.而在css3当中,新增加了弹性盒子模型,弹性盒子模型是一种新增加的强大的.灵活的布局方案 ...

  9. DOM IE 兼容性 I

    IE8事件模型和DOM事件模型有何不同?如何处理DOM事件模型与IE8事件模型的兼容性? 1 事件模型不一样 DOM的浏览器兼容性问题:事件模型   3个阶段            01 外向内:捕获 ...

  10. 重置zend studio 默认设置的方法[转]

    这个方法类似于手机的“恢复出厂设置”的功能,就是将所有的使用记录全部清除,用于解决zend studio使用过程中遇到的各种莫名其妙的问题,可以说是zend studio各种问题的终极解决方法~能够解 ...