Linux系统时钟同步操作方法汇总

syn029
2017-09-14
来源:西安同步原创

在Linux下,默认情况下,系统时间和硬件时间,时钟并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠Bios电池来维持,而系统时间,是用CPU tick来维持的。因此需要同步Linux系统时钟就需要进行时钟同步相关设置才可以实现。

一. 使用ntpdate 命令

1.1 服务器可链接外网时   

# crontab -e   

加入一行:   

*/1 * * * * ntpdate 210.72.145.44     

210.72.145.44 为中国国家授时中心服务器地址,这样该机每隔1分重就可以与国家授时中心进行同步了。   

注意:在使用ntpdate 命令时, ntpd 服务必须是关闭的, 否则会报the NTP socket is in use, exiting 错误。

关闭 ntpd 服务命令如下:

[root@node2 init.d]# /etc/init.d/ntpd stop

Shutting down ntpd:                                        [   OK   ]

1.2. 架设本地时间服务器

需要修改 /etc/ntp.conf文件里的几个配置就可以了,比如本地时间服务器IP 为 10.85.10.119, 配置如下:

server 210.72.145.44 prefer (中国国家授时中心服务器地址 prefer表示优先 注意把默认的server更改成这样)   

server 127.127.1.0 (本地时间)   

restrict 10.85.10.0 mask 255.255.255.0 nomodify (允许10..85.10.* 的IP 使用该时间服务器)   

restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap noquery notrust (屏蔽其他IP过来更新时间)   

其他的保持默认不动。   

使NTP服务可以在系统引导的时候自动启动,执行:     

# chkconfig ntpd on   

启动/关闭/重启NTP的命令:   

# /etc/init.d/ntpd start   

# /etc/init.d/ntpd stop   

# /etc/init.d/ntpd restart   

#service ntpd restart

将同步好的时间写到CMOS里   

vi /etc/sysconfig/ntpd   

SYNC_HWCLOCK=yes   

每次修改了配置文件后都需要重新启动服务来使配置生效。

可以使用下面的命令来检查NTP服务是否启动,你应该可以得到一个进程ID号:   

# pgrep ntpd   

使用下面的命令检查时间服务器同步的状态:   

# ntpq -p   

用ntpstat 也可以查看一些同步状态,用netstat -ntlup查看端口使用情况!   

安装完毕客户端需过5-10分钟才能从服务器端更新时间!   

客户端设置:   

# crontab -e   

加入一行:   

*/1 * * * * ntpdate 10.85.10.119。   

相关配置参数说明

#  restrict权限控制语法为:

#  restrict IP mask netmask_IP parameter

#  其中 IP 可以是软件地址,也可以是 default ,default 就类似 0.0.0.0 咯!

#  至于 paramter 则有:

#   ignore :关闭所有的 NTP 联机服务

#   nomodify:表示 Client 端不能更改 Server 端的时间参数,不过,

#        Client 端仍然可以透过 Server 端来进行网络校时。

#   notrust :该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域

#   noquery :不提供 Client 端的时间查询

#  如果 paramter 完全没有设定,那就表示该 IP (或网域) 『没有任何限制!』

#  设定上层主机主要以 server这个参数来设定,语法为:

#  server [IP|FQDN] [prefer]

#  Server 后面接的就是我们上层 Time Server 啰!而如果 Server 参数

#  后面加上 perfer 的话,那表示我们的 NTP 主机主要以该部主机来作为

#  时间校正的对应。另外,为了解决更新时间封包的传送延迟动作,

二、使用rdate同步时间

如果要用vmware安装RAC,则各个几点间时间必须一致,可以以一个节点作为标准,其他节点与该节点进行时间同步。

假如有两个节点:

A: 10.85.10.119

B: 10.85.10.121

以A作为时间标准,B节点用A节点时间进行同步。

1、在A节点开放37端口

最简单,但也最不安全的方法是关闭防火墙:iptables -F

2. 在A节点启动时间服务

#chkconfig time on     #在系统引导的时候自动启动

如果不启动该服务,则其他节点与该节点同步时间时会报错:Connect Refused

注意:要用root 用户

3、在B节点与A节点同步时间

rdate -s 10.85.10.119   

可以在crontab 中做执行计划, 每分钟执行一次,这样保证时间的同步。

[root@node2 ~]# crontab -l

*/1 * * * * rdate -s 10.85.10.119

[root@node2 ~]#

关于crontab 的介绍参考blog:

Unix crontab 命令详解

http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315039.aspx

三.使用 Network Time Protocol (NTP) 服务器

1. 假如公司网络里有一个时间服务器: 10.85.10.80, 此时只需要在每个结点上修改NTP 服务配置文件,让每个结点和时间服务器进行同步即可。

# vi /etc/ntp.conf

Server 10.85.10.80 prefer

Driftfile /var/lib/ntp/drift

Broadcastdelay 0.008

修改完后在重启一下 ntp 服务

#/etc/init.d/ntpd restart

2. 如果没有时间服务,则可以用RAC 2个结点中一个做为服务器。另一个与此服务器同步即可。

加入用node1 做服务器, 其IP 为: 10.85.10.119, 修改配置文件

#vi /etc/ntp.conf

Server 127.127.1.0   -- 本地时钟

Fudge 127.127.1.0 stratum 11

Broadcastdelay 0.008

Node2 与node1 同步。

修改node2的ntp 配置文件

# vi /etc/ntp.conf

Server 10.85.10.119 prefer

Driftfile /var/lib/ntp/drift

Broadcastdelay 0.008

修改完后在重启一下 ntp 服务

#/etc/init.d/ntpd restart

或者在node2是使用crontab 与服务器同步时间

*/15 * * * * ntpdate 10.85.10.119

Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步。

date命令:

date :查看当前时间,结果如下:Tue Mar 4 01:36:45 CST 2014

date -s 09:38:40 :设置当前时间,结果如下:Tue Mar 4 09:38:40 CST 2014

ntpdate命令:

ntpdate -u 210.72.145.44 :网络时间同步命令

注意:若不加上-u参数, 会出现以下提示:no server suitable for synchronization found

-u:从man ntpdate中可以看出-u参数可以越过防火墙与主机同步;

210.72.145.44:中国国家授时中心的官方服务器。

ntp常用服务器:

中国国家授时中心:210.72.145.44

NTP服务器(上海) :ntp.api.bz

美国:time.nist.gov

复旦:ntp.fudan.edu.cn

微软公司授时主机(美国) :time.windows.com

台警大授时中心(台湾):asia.pool.ntp.org

经测试中国国家授时中心与NTP上海服务器可以正常同步时间,注意需要加上-u参数!

时间同步命令:

ntpdata time.windows.com

自动时间同步:

需要配置/etc/crontab文件,实现自动执行任务

让linux从time.windows.com自动同步时间

vi /etc/crontab

加上一句:

00 0 1 * * root ntpdate -s time.windows.com

time.nist.gov 是一个时间服务器.

Linux时间服务器配置(192.168.10.1)

1). # rpm -ivh ntp-4.1.2-4.EL3.1.i386.rpm

2). # vi /etc/ntp.conf

注释一行

restrict default ignore

加入一行

restrict 192.168.10.0 mask 255.255.255.0 notrust nomodify notrap

3). # vi /etc/ntp/step-tickers

加入一行

pool.ntp.org

这样每次ntpd启动时,会自动连接该国际标准时间服务器;

4). # service ntpd start

5). # netstat -an |grep 123

确保该端口以udp方式开放

时间客户端配置(192.168.10.2)

1). # ntpdate 192.168.10.2

应该显示同步成功

2). # crond -e

加入

0-59/10 * * * * /usr/sbin/ntpdate 192.168.10.1

表示每隔10分钟同步一次时间

Linux.jpg

Linux系统时钟概述

在Windwos中,系统时间的设置很简单,界面操作,通俗易懂。而且设置后,重启,关机都没关系。系统时间会自动保存在Bios的时钟里面,启动计算机的时候,系统会自动在Bios里面取硬件时间,以保证时间的不间断。

    但在Linux下,默认情况下,系统时间和硬件时间,并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠Bios电池来维持,而系统时间,是用CPU tick来维持的。


在系统开机的时候,会自动从Bios中取得硬件时间,设置为系统时间。


一.Linux系统时间的设置

    在Linux中设置系统时间,可以用date命令:

//查看时间

[root@localhost ~]# date

2008年 12月 12日星期五 14:44:12 CST

//修改时间

[root@localhost ~]# date -set   "2013-12-24 00:01" <== (年/月/日 时:分【:秒】)

2009年 01月 01日星期四 00:01:00 CST

//date 有几种时间格式可接受,这样也可以设置时间:

[root@localhost ~]# date 012501012009.30   <== 月日时分年.秒

2009年 01月 25日星期日 01:01:30 CST

二.Linux硬件时间的设置

硬件时间的设置,可以用hwclock或者clock命令。其中,clock和hwclock用法相近,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。

//查看硬件时间可以是用hwclock,hwclock --show 或者hwclock -r

[root@localhost ~]# hwclock --show

2008年12月12日星期五 06时52分07秒   -0.376932 seconds

//设置硬件时间

[root@localhost ~]# hwclock --set --date="1/25/09 00:00" <== 月/日/年时:分:秒

[root@localhost ~]# hwclock

2009年01月25日星期日 00时00分06秒   -0.870868 seconds

[root@localhost ~]# hwclock   -w   根据系统时间设置硬件时间

三.系统时间和硬件时间的同步

同步系统时间和硬件时间,可以使用hwclock命令。

//以系统时间为基准,修改硬件时间

[root@localhost ~]# hwclock --systohc<== sys(系统时间)to(写到)hc(Hard Clock)

[root@localhost ~]# hwclock -w

//以硬件时间为基准,修改系统时间

[root@localhost ~]# hwclock --hctosys

[root@localhost ~]# hwclock -

四.不同机器之间的时间同步

为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。

同步时间,可以使用ntpdate命令,也可以使用ntpd服务。

使用ntpdate比较简单。格式如下:

[root@linux ~]# ntpdate [-nv] [NTP IP/hostname]

[root@linux ~]# ntpdate 192.168.0.2

[root@linux ~]# ntpdate time.ntp.org

但这样的同步,只是强制性的将系统时间设置为ntp服务器时间。如果cpu tick有问题,只是治标不治本。所以,一般配合cron命令,来进行定期同步设置。比如,在crontab中添加:

0 12 * * * * /usr/sbin/ntpdate 192.168.0.1

这样,会在每天的12点整,同步一次时间。ntp服务器为192.168.0.1。

使用ntpd服务,要好于ntpdate加cron的组合。因为,ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响。比如sleep,timer等。而且,ntpd服务可以在修正时间的同时,修正cpu tick。理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。

要注意的是,ntpd有一个自我保护设置: 如果本机与上源时间相差太大, ntpd不运行. 所以新设置的时间服务器一定要先ntpdate从上源取得时间初值, 然后启动ntpd服务。ntpd服务运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.

五.ntpd服务的设置

ntpd服务的相关设置文件如下:

1./etc/ntp.conf:这个是NTP daemon的主要设文件,也是 NTP **的设定文件。

2./usr /share/zoneinfo/:在这个目录下的文件其实是规定了各主要时区的时间设定文件,例如北京地区的时区设定文件在 /usr/share/zoneinfo/Asia/Beijing 就是了。这个目录里面的文件与底下要谈的两个文件(clock 与localtime)是有关系的。

3./etc/sysconfig/clock:这个文件其实也不包含在NTP 的 daemon 当中,因为这个是linux的主要时区设定文件。每次开机后,Linux 会自动的读取这个文件来设定自己系统所默认要显示的时间。

4./etc /localtime:这个文件就是“本地端的时间配置文件”。刚刚那个clock 文件里面规定了使用的时间设置文件(ZONE) 为 /usr/share/zoneinfo/Asia/Beijing ,所以说,这就是本地端的时间了,此时, Linux系统就会将Beijing那个文件另存为一份 /etc/localtime文件,所以未来我们的时间显示就会以Beijing那个时间设定文件为准。

5. /etc/timezone:系统时区文件

下面重点说说 /etc/ntp.conf文件的设置。在 NTP Server 的设定上面,其实最好不要对 Internet 无限制的开放,尽量仅提供您自己内部的 Client 端联机进行网络校时就好。此外, NTP Server 总也是需要网络上面较为准确的主机来自行更新自己的时间啊,所以在我们的 NTP Server 上面也要找一部最靠近自己的 Time Server 来进行自我校正。事实上, NTP 这个服务也是 Server/Client 的一种模式。

[root@linux ~]# vi /etc/ntp.conf

# 1. 关于权限设定部分

#  权限的设定主要以 restrict 这个参数来设定,主要的语法为:

#   restrict IP mask netmask_IP parameter

#   其中 IP 可以是软件地址,也可以是 default ,default 就类似 0.0.0.0

#  至于paramter则有:

#   ignore :关闭所有的 NTP 联机服务

#   nomodify:表示 Client 端不能更改 Server 端的时间参数,不过,

#   Client 端仍然可以透过 Server 端来进行网络校时。

#   notrust:该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域

#   noquery:不提供 Client 端的时间查询

#   notrap:不提供trap这个远程事件登入

#  如果paramter完全没有设定,那就表示该 IP (或网域)“没有任何限制”

restrict default nomodifynotrapnoquery # 关闭所有的 NTP 要求封包

restrict 127.0.0.1    #这是允许本级查询

restrict 192.168.0.1 mask 255.255.255.0 nomodify

#在192.168.0.1/24网段内的服务器就可以通过这台NTP Server进行时间同步了

# 2. 上层主机的设定

#  要设定上层主机主要以 server 这个参数来设定,语法为:

#  server [IP|HOST Name] [prefer]

#  Server 后面接的就是我们上层 Time Server 啰!而如果 Server 参数

#  后面加上perfer的话,那表示我们的 NTP 主机主要以该部主机来作为

#  时间校正的对应。另外,为了解决更新时间封包的传送延迟动作,

#  所以可以使用driftfile来规定我们的主机

#  在与 Time Server 沟通时所花费的时间,可以记录在driftfile

#  后面接的文件内,例如下面的范例中,我们的 NTP server 与

#  cn.pool.ntp.org联机时所花费的时间会记录在 /etc/ntp/drift文件内

server 0.pool.ntp.org

server 1.pool.ntp.org

server 2.pool.ntp.org

server cn.pool.ntp.org prefer

#其他设置值,以系统默认值即可

server   127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

driftfile /var/lib/ntp/drift

broadcastdelay   0.008

keys /etc/ntp/keys

总结一下,restrict用来设置访问权限,server用来设置上层时间服务器,driftfile用来设置保存漂移时间的文件。

六.ntp服务的启动与观察

在启动NTP服务前,先对提供服务的这台主机手动的校正一次时间咯。(因为启动服务器,端口会被服务端占用,就不能手动同步时间了)

[root@linux ~] # ntpdate cn.pool.ntp.org

25 Apr 14:33:51 ntpdate[8310]: step time server 80.85.129.2 offset 6.655976 sec

然后,启动ntpd服务:

[root@linux ~] # servicentpd start

或 [root@linux ~] # /etc/init.d/ntpd start

查看端口:

[root@linux ~] # netstat -ln|grep 123

udp        0      0 192.168.228.153:123        0.0.0.0:*

udp        0      0 127.0.0.1:123               0.0.0.0:*

udp        0      0 0.0.0.0:123                  0.0.0.0:*

udp        0      0 :::123                       :::*

如何确认我们的NTP服务器已经更新了自己的时间呢?

[root@linux ~] # ntpstat

synchronized to NTP server(127.127.1.0) at stratum 11

time correct to within 950ms

polling server every 64 s

#改指令可列出NTP服务器是否与上层联机。由上述输出结果可知,时间校正约

#为950*10(-6)秒。且每隔64秒会主动更新时间。

常见的错误:

25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found

其实,这不是一个错误。而是由于每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接。当此时用客户端连接服务端就会报这样的信息。一般等待几分钟就可以了。

[root@linux ~] # ntptrace –n 127.0.0.1

127.0.0.1:stratum 11, offset 0.000000,synch distance 0.950951

222.73.214.125:stratum 2,offset –0.000787,synch distance 0.108575

209.81.9.7:stratum 1,offset 0.000028,synch distance 0.00436,refid ‘GPS’

#这个指令可以列出目前NTP服务器(第一层)与上层NTP服务器(第二层)彼此之间的

#关系

[root@linux ~] # ntpq –p

指令“ntpq -p”可以列出目前我们的NTP与相关的上层NTP的状态,以上的几个字段的意义如下:

remote:即NTP主机的IP或主机名称。注意最左边的符号,如果由“+”则代表目前正在作用钟的上层NTP,如果是“*”则表示也有连上线,不过是作为次要联机的NTP主机。

refid:参考的上一层NTP主机的地址

st:即stratum阶层

when:几秒前曾做过时间同步更新的操作

poll:下次更新在几秒之后

reach:已经向上层NTP服务器要求更新的次数

delay:网络传输过程钟延迟的时间

offset:时间补偿的结果

jitter:Linux系统时间与BIOS硬件时间的差异时间

    最后提及一点,ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件。

在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

linux配置时间服务器(ntp)

2007-10-27 16:34

在linux下,我们可以通过自带的NTP(Network Time Protocol)协议通过网络使自己的系统保持精确的时间。可用的公共时间服务器列表可以从下面的地址获取:

http://ntp.isc.org/bin/view/Servers/NTPPoolServers

NTP是用来使系统和一个精确的时间源保持时间同步的协议。建议大家在自己管理的网络中建立至少一台时间服务器来同步本地时间,这样可以使得在不同的系统上处理和收集日志和管理更加容易。

  介绍一下环境:179为本地时间服务器,其他服务器和179同步。179和网上时间服务器同步。

  一、配置179时间服务器

1、首先查询NTP软件版本

rpm -qa|grepntp

ntp-4.1.2-4.EL3.1

  如果没有可以从linux安装盘上查找,安装此ntp包

2、编辑配置文件

vi /etc/ntp.conf

  首先定义服务器

server pool.ntp.org

restrict default nomodifynotrapnoquery

restrict 192.168.0.0 mask 255.255.255.0 notrustnomodifynotrap #从192.168.0.1-192.168.0.254的服务器都可以使用我们的NTP服务器来同步时间。

  注释掉以下一行

#restrict default ignore

3、启动NTP服务器

#chkconfigntpd on

#/etc/init.d/ntpd start

#/etc/init.d/ntpd stop

#/etc/init.d/ntpd restart

  默认情况下,我们配置的NTP服务器不会去时间源那里同步时间,所以必须修改/etc/ntp/step-tickers文件,加入我们的时间源,这样每次通过/etc/init.d/ntpd来启动服务的时候就会自动更新时间了

  检查服务器同步状态:

ntpq -p

ntptrace 192.168.0.179

  如果输出正确,则说明时间服务器成功。每次启动服务器,会自动同步时间。

  配置LINUX客户端

  在linux客户端上执行ntpdatentp_server_ip就可以根据时间服务器统一局域网的时间了,将上面的命令放到cron里每天早上3点定期执行,crontab –e 然后输入

0 3 * * * /usr/sbin/ntpdate 192.168.0.179

为什么电脑要对时?因为电脑自己的钟不准。破电脑一天慢五分钟也不奇怪。

对时需要对到什么精度?一般家用的电脑时钟误差一分钟完全可以接受。集群服务器配合工作一般需要所有的时钟同步在一秒之内。

和谁同步?一般是和世界各地的 NTP (Network Time Protocol)服务器同步的。米国标准时间由 NIST 发布,NIST 提供了一些服务器。现代 Windows 操作系统自动和 time.windows.com 对时。Linux 下面一般用NTPPool来自动选择服务器。中国国家授时中心 NTP 210.72.145.44 是中国权威时间。中国教育网有自己的NTP 服务器网。如果是集群服务器,一般会在内网配置几个本地 NTP 服务器。

上面这么多 NTP 服务器有没有优劣呢?有的,但是对于一般的应用来说,看不出什么区别。理论上说,NTP 服务器是分等级(Stratum)的,Stratum = 1 的 NTP 服务器是直接和世界标准时钟同步的,包括 GPS 时间、铯原子钟、某些手机网络等。NIST、中国国家授时中心和中国教育网的第一级时间服务器都是这个级别的。Stratum = 2 的 NTP 服务器是和 Stratum = 1 的服务器同步的,性能稍差,但精确度也在毫秒的量级,所以用起来没什么区别。再往下每同步一级,Stratum 就加一。

Windows 2000 开始包含了自动时间同步的服务。Windows XP 上,打开时间设置就有网络对时的设置。默认是每星期和 time.windows.com 对时一次。这个一星期同步一次太长了,可以通过注册表调整,或者用Wits修改。

Linux 下面的ntpd就要灵活多啦。默认配置一般足够好用。下面在 Fedora 下举个例子。配置:

# grep "^server" /etc/ntp.conf

server 0.pool.ntp.org

server 1.pool.ntp.org

server 2.pool.ntp.org

server pool.ntp.org

server   127.127.1.0 # local clock

启动ntpd之后查看状态

# ntpq -pn

      remote            refid       st t when poll reach    delay    offset   jitter

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

64.25.87.54      128.118.25.5      2 u    10    64    17    79.194   -542.89    1.942

64.72.116.51     129.7.1.66        2 u     9    64    17    51.569   -532.23    1.803

64.72.116.50     129.7.1.66        2 u    11    64    17    51.417   -516.70    1.417

64.72.116.45     129.7.1.66        2 u     7    64    17    51.586   -532.36    1.135

*127.127.1.0      LOCAL(0)         10 l     3    64    17     0.000     0.000    0.001

st这列显示自动选的四个 NTP 服务器都是 Stratum = 2。最后一个是本地时钟。前四行的 offset 显示本地时钟和四个 NTP 服务器都有大概 500 毫秒的差距。ntpstat显示目前只和本地时钟同步:

# ntpstat

synchronised to local net at stratum 11

    time correct to within 949 ms

    polling server every 64 s

过一会再看:

# ntpq -pn

      remote            refid       st t when poll reach    delay    offset   jitter

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

+64.25.87.54      128.118.25.5      2 u    56    64   377    78.548   250.871   37.180

+64.72.116.51     129.7.1.66        2 u    58    64   377    51.551   268.538   36.817

*64.72.116.50     129.7.1.66        2 u    58    64   377    51.539   274.497   36.629

+64.72.116.45     129.7.1.66        2 u    49    64   377    51.485   271.750   37.841

127.127.1.0      LOCAL(0)         10 l    44    64   377     0.000     0.000    0.001

# ntpstat

synchronised to NTP server (64.72.116.50) at stratum 3

    time correct to within 263 ms

    polling server every 64 s

本地时钟已经成功和外面的 NTP 服务器同步。ntpq报告中第一列 * 表示目前选择的主同步服务器,标 + 的表示有可能被用来进一步提高同步精度的次要服务器。因为是和 Stratum = 2 的服务器同步,所以本地的ntpd Stratum 就是 3 了。一个细节是ntpq对时钟是慢慢调整的,而不是直接跳好多秒,这样平滑的调整时间可以保证很多程序的流程平稳。不过,如果时钟误差过大,ntpd可能会拒绝调整时间;或者有人也可能希望立刻调正时间,这样的话可以直接执行命令:ntpdate -b pool.ntp.org(需要停掉ntpd服务执行)。

在我另一个服务器上,配置了好多 NTP 服务器:

# grep "^server" /etc/ntp.conf

server time-a.nist.gov

server time-b.nist.gov

server time.nist.gov

server time.windows.com

server 0.pool.ntp.org

server 1.pool.ntp.org

server 2.pool.ntp.org

server pool.ntp.org

server   127.127.1.0 # local clock

# ntpq -p

      remote            refid       st t when poll reach    delay    offset   jitter

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

+time-a.nist.gov .ACTS.            1 u    61   128   377    76.113    -1.046    3.424

*time-b.nist.gov .ACTS.            1 u    65   128   377    81.063     0.398    1.892

-time.nist.gov    .ACTS.            1 u   251   128   356    38.911     1.353   30.226

-time.windows.co 18.26.4.105       2 u    45   128   267    31.218    13.180    6.039

-194.109.64.200   192.87.106.2      2 u   122   128   377   155.132     0.596   38.674

-a.mirror.fizzel 43.75.42.44       3 u    56   128   377   163.391   -11.756   13.006

-enfield.ikk.szt 195.111.99.186    2 u   118   128   377   188.326    -2.520   32.359

+ntp1.esat.net    .GPS.             1 u    59   128   377   161.103    -1.321    0.460

LOCAL(0)         .LOCL.           10 l    48    64   377     0.000     0.000    0.001

标注 - 的是那些相对来说不太准的钟(offset 或 jitter 偏大),自动被剔除了。从 delay 这里可以看到,我这里和 NIST 几个钟网络延迟比较小(100 毫秒之内),一般这样的钟误差小一些。倒数第二个 pool.ntp.org 选择的是一个和 GPS 同步的钟,Stratum = 1,是一个比较准的钟了,只是网络延迟稍大。同时可以看到 time.windows.com 的 Stratum = 2,在一年以前,它曾经是 6。堂堂国际大公司微软也不花几百块钱买个 GPS 接收器建一个Stratrum = 1 的时钟服务器造福千千万万的 windows 用户,真是不可理解。

最后,linux下防火墙规则如果极严格的话可能会影响ntpd对时,打开 sport 123 即可(假设 OUTPUT 链全 ACCEPT):

iptables -I INPUT -p udp -m udp --sport 123 -j ACCEPT

背景:

服务器多了,时间是否一致以及是否准备就显得格外重要,虽然这个问题总是被忽略,但是统一时间是很有必要的,因为时间问题导致服务出现问题也是司空见惯,本文简单介绍Linux下ntp的快速搭建和使用。

CentOS NTP服务器安装与配置 http://www.linuxidc.com/Linux/2014-01/95258.htm

Linux实战部署系列之NTP服务器 http://www.linuxidc.com/Linux/2013-11/92275.htm

多种操作系统NTP客户端配置 http://www.linuxidc.com/Linux/2013-10/91928.htm

搭建企业级NTP时间服务器 http://www.linuxidc.com/Linux/2014-02/97205.htm

1、   安装ntp

yum -y install ntp(直接yum安装即可)

2、   修改ntp.conf的配置

1)vim /etc/ntp.conf

①   配置方法一:只允许192.168.100.0网段的客户机进行时间同步

在restrict default kod nomodify notrap nopeer noquery(表示默认拒绝所有IP的时间同步)之后增加一行:

restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap

②   配置方法二:允许任何ip的客户机都可以进行时间同步

将restrict default kod nomodify notrap nopeer noquery修改为如下行:

Restrict default nomodify

权限的设定主要以restrict这个参数来设定,主要的语法为:

restrict   IP地址   mask 子网掩码 参数

其中IP可以是IP地址也可以是default,default是指所有的IP

参数主要有以下几个:

ignore :关闭所有的 NTP 联机服务

nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。

notrust:客户端除非通过认证,否则该客户端来源将被视为不信任子网

noquery:不提供客户端的时间查询

2)、用server这个参数设定上级时间服务器,语法为:

server   IP地址或域名 [prefer]

IP地址或域名就是我们**的上级时间服务器,如果 Server 参数最后加上 prefer,表示我们的 NTP 服务器主要以该部主机时间进行校准。

3)、解决NTP服务器校准时间时的传送延迟

使用driftfile参数设置:

driftfile 文件名

在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件内。

注意:   driftfile 后面接的文件需要使用完整的路径文件名,不能是链接文件,并且文件的权限需要设定成 ntpd守护进程可以写入。

/usr/share/zoneinfo   这个目录下存放的是各个时区对应的设定文件

/etc/localtime        本地系统时间设定文件

/etc/sysconfig/clock   本机时区设定文件

Linux下快速搭建ntp时间同步服务器

为了使NTP服务可以在系统引导的时候自动启动,执行:

chkconfig ntpd on

将同步好的时间写到CMOS里边

vim /etc/sysconfig/ntpd

SYNC_HWCLOCK=yes

切记每次修改配置文件后重新启动服务使配置生效,可使用如下命令来检查NTP服务是否启动,启动的话可以得到一个进程ID号;

pgrep ntpd

使用下面的命令检查时间服务器同步的状态

ntpq -p

用ntpstat也可以查看一些同步状态信息,

安装完毕客户端需要过5-10分钟才能从服务器端更新时间

客户端设置:

crontab -e

加入一行

*/15 * * * * /usr/sbin/ntpdate 192.168.100.102(服务器端IP)

Network Time Protocol(NTP,网络时间协议)用于同步它所有客户端时钟的服务。NTP服务器将本地系统的时钟与一个公共的NTP服务器同步然后作为时间主机提供服务,使本地网络的所有客户端能同步时钟。

同步时钟最大的好处就是相关系统上日志文件中的数据,如果网络中使用中央日志主机集中管理日志,得到的日志结果就更能反映真实情况。在同步了时钟的网络中,集中式的性能监控、服务监控系统能实时的反应系统信息,系统管理员可以快速的检测和解决系统错误。

安装配置NTP服务

    下面将介绍NTP服务器的简单配置:

   第一步,安装NTP服务

    一般的Linux发行版都会带ntp软件包,如果你的系统中还没有安装,就使用rpm命令安装此包

,以下以centos系统为例配置一台时间服务器:

查找当前系统是否已安装ntp

[root@localhost ~]# rpm -qa | grep ntp

chkfontpath-1.10.1-1.1

ntp-4.2.2p1-8.el5.centos.1       (这个就是已经安装的RPM包)

如果没有安装,可用下例命令安装:

[root@localhost ~]# rpm -ivh ntp-4.2.2p1-8.el5.centos.1.rpm

第二步,配置NTP服务器

   NTP服务器配置如下:

    编辑配置文件/etc/ntp.conf   

restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

restrict 127.0.0.1

restrict -6 ::1

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

server 192.168.146.225

server 0.centos.pool.ntp.org

server 1.centos.pool.ntp.org

server 2.centos.pool.ntp.org

server   127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

   配置文件说明如下:

    第一行restrict、default定义默认访问规则,nomodify禁止远程主机修改本地服务器配置,notrap拒绝特殊的ntpdq捕获消息,noquery拒绝btodq/ntpdc查询(这里的查询是服务器本身状态查询)。

    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

    这句是手动增加的,意思是从192.168.1.1-192.168.1.254的服务器都可以使用我们的NTP服务器来同步时间。

    server 192.168.146.225

    这句也是手动增加的,指明局域网中作为NTP服务器的IP;

  配置文件的最后两行作用是当服务器与公用的时间服务器失去联系时以本地时间为客户端提供时间服务。

   端口

ntp使用udp协议,记得开放其123端口。

  启动NTPD

    为了使NTP服务可以在系统引导的时候自动启动,执行:

    #chkconfig ntpd on

    启动ntpd:

service ntpd start

   NTP客户端配置:

    在客户端手动执行“ntpdate 服务器IP”来同步时间;

    另可以使用crond来定时同步时间:

    以root身份运行周期性任务:

[root@supersun root]# crontab -e

  添加以下内容,每15分钟更新一下时间:

*/15空格*空格 *空格 *空格 *空格 ntpdate空格 服务器IP

    此处的ntpdate命令包含在ntp软件包中,记得确认系统中是否已安装。

本人自己设置的ntp时钟同步

通过crontab -e命令将如下命令周期性执行

10 3 * * 3 /usr/sbin/ntpdate 219.233.237.2 && /sbin/hwclock -w

ps:每周三的3:10分 与时间服务器219.233.237.2同步时间,并将当前时间写入BIOS中

第三步,检查时间服务器是否正确同步

    使用下面的命令检查时间服务器同步的状态:

    #ntpq -p

    一个可以证明同步有问题的证据是:所有远程服务器的jitter值是4000并且delay和reach的值是0。

可能的原因有:

    有防火墙阻断了与server之间的通讯,即123端口是否正常开放;

    此外每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接,否则你在客户端执行“ntpdate 服务器ip”的时候将返回:

    27 Jun 10:20:17 ntpdate[21920]: no server suitable for synchronization found

当用ntpdate -d 来查询时会发现导致 no server suitable for synchronization found 的错误的信息有以下2个:

错误1.Server dropped: Strata too high

在ntp客户端运行ntpdate serverIP,出现no server suitable for synchronization found的错误。

在ntp客户端用ntpdate –d serverIP查看,发现有“Server dropped: strata too high”的错误,并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。

这是因为NTP server还没有和其自身或者它的server同步上。

以下的定义是让NTP Server和其自身保持同步,如果在/ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端。

server 127.127.1.0 fudge

127.127.1.0 stratum 8

在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。

那么如何知道何时ntp server完成了和自身同步的过程呢?

在ntp server上使用命令:

# watch ntpq -p

出现画面:

Every 2.0s: ntpq -p                                              Thu Jul 10 02:28:32 2008

     remote           refid      st t when poll reach   delay   offset jitter

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

192.168.30.22   LOCAL(0)         8 u   22   64    1    2.113 179133.   0.001

LOCAL(0)        LOCAL(0)        10 l   21   64    1    0.000   0.000   0.001

注意LOCAL的这个就是与自身同步的ntp server。

注意reach这个值,在启动ntp server服务后,这个值就从0开始不断增加,当增加到17的时候,从0到17是5次的变更,每一次是poll的值的秒数,是64秒*5=320秒的时间。

如果之后从ntp客户端同步ntp server还失败的话,用ntpdate –d来查询详细错误信息,再做判断。

错误2.Server dropped: no data

从客户端执行netdate –d时有错误信息如下:

transmit(192.168.30.22)

transmit(192.168.30.22)

transmit(192.168.30.22)

transmit(192.168.30.22)

transmit(192.168.30.22)

192.168.30.22: Server dropped: no data

server 192.168.30.22, port 123

.....

28 Jul 17:42:24 ntpdate[14148]: no server suitable for synchronization found

出现这个问题的原因可能有2:

1。检查ntp的版本,如果你使用的是ntp4.2(包括4.2)之后的版本,在restrict的定义中使用了notrust的话,会导致以上错误。

使用以下命令检查ntp的版本:

# ntpq -c version

下面是来自ntp官方网站的说明:

The behavior of notrust changed between versions 4.1 and 4.2.

In 4.1 (and earlier) notrust meant "Don't trust this host/subnet for time".

In 4.2 (and later) notrust means "Ignore all NTP packets that are not cryptographically authenticated." This forces remote time servers to authenticate themselves to your (client) ntpd

解决:

把notrust去掉。

2。检查ntp server的防火墙。可能是server的防火墙屏蔽了upd 123端口。

可以用命令

#service iptables stop

来关掉iptables服务后再尝试从ntp客户端的同步,如果成功,证明是防火墙的问题,需要更改iptables的设置。

以上就是对Linux系统的时钟同步所有方法汇总,有需要时间同步服务器的用户可以直接与西安同步电子科技有限公司销售员联系,希望以上分析对大家有所帮助。

阅读4917
分享