CentOS配置时间同步NTP

CentOS配置时间同步NTP

为什么要使用ntpd而不是ntpdate?

原因很简单,ntpd是步进式的逐渐调整时间,而ntpdate是断点更新,比如现在服务器时间是9.18分,而标准时间是9.28分,ntpd会在一段时间内逐渐的把时间校准到与标准时间相同,而ntpdate会立刻把时间调整到9.28分,如果你往数据库内写入内容或在其他对时间有严格要求的生产环境下,产生的后果会是很严重的。(注:当本地时间与标准时间相差30分钟以上是ntpd会停止工作)

NTP通信协议原理

1.首先主机启动NTP。

2.客户端会向NTP服务器发送调整时间的message。

3.然后NTP server会送出当前的标准时间给client

4.client接受来自server的时间后,会根据这个信息来调整自己的时间。这样就实现了网络对时。

NTP这个deamon采用了123端口。(UDP)

“当我们要利用Tim server来进行实践的同步更新时,就需要使用NTP软件提供的ntpdate来连接端口123”

与时间相关的一些命令和配置文件

1./etc/ntp.conf

linux各版本虽然目录不同,但文件名相同。可以用which ntp.conf 或者locate ntp.conf来查找。这是NTP唯一的一个设置文件。

2./usr/share/zoneinfo/

这个里面规定了这个主要时区的时间设置文件。

3./etc/sysconfig/clock

这个文件是linux的主要时区设置文件,每次开机后linux会自动读取这个文件来设置系统所默认的显示时间,可以看看它里面到底设置了什么:

cat /etc/sysconfig/clock 
# The ZONE parameter is only evaluated by system-config-date. 
# The timezone of the system is defined by the contents of /etc/localtime. 
ZONE="Asia/Shanghai" 
UTC=true 
ARC=false

4./etc/localtime

本地端时间配置文件。

5./bin/date

这个是时间的修改命令,除了输出时间,还可以修改时间。

6./sbin/hwclock

因为linux系统上面BIOS时间与linux系统时间是分开的,所以使用date这个指令调整了时间之后,还需要使用hwclock才能将修改过的时间写入BIOS中。

7./usr/sbin/ntpd

这是NTP的daemon文件,需要启动它才能提供NTP服务,这个命令会读取/etc/ntp.conf里面的设置。

8./usr/sbin/ntpdate

这是client用来连接NTP Server的主要执行文件,如果您不想启用NTP,只想启用NTP Client功能的话,可以只应用此命令。

9,/usr/sbin/ntptrace

可以用来追踪某台时间服务器的时间对应关系。

安装与配置

1、设置时区

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2、安装ntpd服务

yum -y install ntp

3、配置ntpd

vi /etc/ntp.conf

    
restrict default kod nomodify notrap nopeer noquery   #
restrict -6 default kod nomodify notrap nopeer noquery  #针对ipv6设置

# 允许本地所有操作
restrict 127.0.0.1 
restrict -6 ::1

# 允许的局域网络段或单独ip
restrict 10.0.0.0 mask 255.0.0.0 nomodify motrap
restrict 192.168.0.0 mask 255.255.255.0 nomodify motrap
restrict 192.168.1.123 mask 255.255.255.255 nomodify motrap

# 使用上层的internet ntp服务器
restrict cn.pool.ntp.org
restrict 1.cn.poo.ntp.org
restrict 0.asia.pool.ntp.org
restrict 3.asia.pool.ntp.org

server cn.pool.ntp.org prefer
server 1.cn.poo.ntp.org
server 0.asia.pool.ntp.org
server 3.asia.pool.ntp.org

# 如果无法与上层ntp server通信以本地时间为标准时间
server   127.127.1.0    # local clock
fudge    127.127.1.0 stratum 10    

# 计算本ntp server 与上层ntpserver的频率误差
driftfile /var/lib/ntp/drift

# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography. 
keys /etc/ntp/keys
#日志文件
logfile /var/log/ntp.log

修改/etc/sysconfig/ntpd:

# Drop root to id 'ntp:ntp' by default. 
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"

# Set to 'yes' to sync hw clock after successful ntpdate 
SYNC_HWCLOCK=yes #make no into yes; BIOS的时间也会跟着修改

# Additional options for ntpdate 
NTPDATE_OPTIONS=""

验证与状态检查

运行ntp

service ntpd start/stop/restart

查看ntp的端口

应该看到123端口

netstat -unlnp

查看ntp服务器有无和上层连通

# ntpstat

synchronised to NTP server () at stratum 2
time correct to within 74 ms
polling server every 128 s

注意:此命令出现上述synchronised结果比较慢,我的用了大概5分钟。

查看ntp服务器与上层间的联系

# ntptrace -n 127.0.0.1

127.0.0.1: stratum 3, offset -0.001095, synch distance 0.532610
116.193.83.174: timed out, nothing received

查看ntp服务器与上层ntp服务器的状态

# ntpq -p

其中:

remote - 本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先
refid - 参考上一层ntp主机地址
st - stratum阶层
when - 多少秒前曾经同步过时间
poll - 下次更新在多少秒后
reach - 已经向上层ntp服务器要求更新的次数
delay - 网络延迟
offset - 时间补偿
jitter - 系统时间与bios时间差

如果所有远程服务器的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

启动NTPD

我采用了一个很笨的办法来手动启动ntpd,而不是把ntpd加入服务,写一个简单的脚本

vi ntpstart.sh

ntpdate cn.pool.ntp.org
ntpdate cn.pool.ntp.org
service ntpd start

然后加入/etc/rc.local

/shpath/ntpstart.sh

这是因为我有一台服务器启动后的时间总是与标准时间差别很大,每次启动后ntpd要花很多时间才能把时间校准,所以我是先在系统启动后ntpdate更新两次,然后再启动ntpd服务,在freebsd里好像有修改配置文件,让时间服务器在系统启动之前启动的,centos还没仔细琢磨

客户端配置

方法1.使用ntpdate与上面配置的时间服务器定时同步,不推荐此方法

方法2.安装ntpd,指定时间server为上面配置的服务器地址,推荐

更详细的介绍参见台湾 鸟哥的Linux私房菜

http://linux.vbird.org/linux_server/0440ntp.php

附录

中国国家授时中心(陕西西安) 210.72.145.44

上海: 61.129.66.79 (t2.hshh.org) 61.129.42.44 (ntp.fudan.edu.cn) 202.120.2.101 (ntp.sjtu.edu.cn)

浙江 218.75.4.130 (t1.hshh.org)

内蒙古 218.21.130.42 (t1.hshh.org)

香港: 137.189.11.66 (clock.cuhk.edu.hk ) 137.189.11.128 (ntp.cuhk.edu.hk )

台湾: 220.130.158.52(time.stdtime.gov.tw) 220.130.158.72(Clock.stdtime.gov.tw)

220.130.158.51(tick.stdtime.gov.tw) 220.130.158.54(watch.stdtime.gov.tw)

asia.pool.ntp.org, 更多亚洲服务器请参考 http://www.pool.ntp.org/zone/asia

cn.pool.ntp.org, 更多中国服务器请参考 http://www.pool.ntp.org/zone/cn

tw.pool.ntp.org, 更多中国台湾服务器请参考 http://www.pool.ntp.org/zone/tw

hk.pool.ntp.org, 更多中国香港服务器请参考 http://www.pool.ntp.org/zone/hk

12/02/15补充:

取消ntpd自动启动,在系统启动时,指定ntpdate远程标准时间服务器两次,然后service ntpd start

好像也可以修改rc.conf或者加上一堆什么参数来实现,我偷懒用这个笨办法来保证时间的准确了

 

 http://www.crsay.com/wiki/wiki.php/server/centos/ntp-set

12/02/13补充: 郑重建议不再使用ntpdate了,以下内容仅供参考,不建议使用
Last modified onTuesday, 28 May 2013 11:58

( ! ) Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/vhosts/shan.info/httpdocs/templates/gk_publisher/html/com_k2/templates/default/item.php on line 169
Call Stack
#TimeMemoryFunctionLocation
10.0055403368{main}( ).../index.php:0
20.31081320864Joomla\CMS\Application\SiteApplication->execute( ).../index.php:49
30.31081320864Joomla\CMS\Application\SiteApplication->doExecute( ).../CMSApplication.php:196
41.08222979112Joomla\CMS\Application\SiteApplication->dispatch( ).../SiteApplication.php:233
51.08303003456Joomla\CMS\Component\ComponentHelper::renderComponent( ).../SiteApplication.php:194
61.09003058784Joomla\CMS\Component\ComponentHelper::executeComponent( ).../ComponentHelper.php:377
71.09113075840require_once( '/var/www/vhosts/shan.info/httpdocs/components/com_k2/k2.php' ).../ComponentHelper.php:402
81.10423219928K2ControllerItem->execute( ).../k2.php:64
91.10423219928K2ControllerItem->display( ).../BaseController.php:710
101.12703489008K2ControllerItem->display( ).../item.php:78
111.12703489008K2ControllerItem->display( ).../controller.php:19
121.13013507528Joomla\CMS\Cache\Controller\ViewController->get( ).../BaseController.php:663
131.15093527944K2ViewItem->display( ).../ViewController.php:102
141.32894196872K2ViewItem->display( ).../view.html.php:742
151.32894196872K2ViewItem->loadTemplate( ).../HtmlView.php:230
161.33274371272include( '/var/www/vhosts/shan.info/httpdocs/templates/gk_publisher/html/com_k2/templates/default/item.php' ).../HtmlView.php:701

( ! ) Notice: Only variables should be assigned by reference in /var/www/vhosts/shan.info/httpdocs/templates/gk_publisher/html/com_k2/templates/default/item.php on line 478
Call Stack
#TimeMemoryFunctionLocation
10.0055403368{main}( ).../index.php:0
20.31081320864Joomla\CMS\Application\SiteApplication->execute( ).../index.php:49
30.31081320864Joomla\CMS\Application\SiteApplication->doExecute( ).../CMSApplication.php:196
41.08222979112Joomla\CMS\Application\SiteApplication->dispatch( ).../SiteApplication.php:233
51.08303003456Joomla\CMS\Component\ComponentHelper::renderComponent( ).../SiteApplication.php:194
61.09003058784Joomla\CMS\Component\ComponentHelper::executeComponent( ).../ComponentHelper.php:377
71.09113075840require_once( '/var/www/vhosts/shan.info/httpdocs/components/com_k2/k2.php' ).../ComponentHelper.php:402
81.10423219928K2ControllerItem->execute( ).../k2.php:64
91.10423219928K2ControllerItem->display( ).../BaseController.php:710
101.12703489008K2ControllerItem->display( ).../item.php:78
111.12703489008K2ControllerItem->display( ).../controller.php:19
121.13013507528Joomla\CMS\Cache\Controller\ViewController->get( ).../BaseController.php:663
131.15093527944K2ViewItem->display( ).../ViewController.php:102
141.32894196872K2ViewItem->display( ).../view.html.php:742
151.32894196872K2ViewItem->loadTemplate( ).../HtmlView.php:230
161.33274371272include( '/var/www/vhosts/shan.info/httpdocs/templates/gk_publisher/html/com_k2/templates/default/item.php' ).../HtmlView.php:701
back to top