NTP服务
一、什么是NTP,干什么用的?
NTP的全称是network time protocol(网络时间协议),它的作用是用来同步电脑系统时间的。
中央1的新闻联播每天19:00准时播出,可能有人就有疑问了:为什么我的手表才18:53分,而中央1却是19:00分,到底谁的是准确的。造成这种疑惑的原因在于两者使用的时间计量仪器之间存在着误差,科学家研究表明,铯原子的振荡是最稳定的,所以用它来做时间计量标准也是最精确的,中央1台用的就是铯原子钟的时间,而机械表、电子表等计时精度都比不上铯原子,所以中央1台的时间才是精确的。电脑的BIOS时间依靠主板上的一个晶振来提供,晶振需要电源才能工作,开机时由主机电源供电,关机时依赖主板电池,然而主板晶振也存在跟机械表、电子表类似的问题:
- 主板电池可能没电了
- 与铯原子时间的存在误差
- 用户误操作
这三个因素都将导致电脑系统时间不精确,NTP就是为了解决这个问题而诞生的。
在讲NTP之前还需要需要了解一下时区的概念:时间在某个时刻是确定的,有关国际组织商定将英国格林尼制这个地方的时间做为标准,亦即格林尼制时间。然而由于地球自转的关系,太阳从东边升起在西边落下,所以当我们中国人已经开始上班的时候英国人还在睡梦中。如果全球都统一使用格林尼制时间的话,则当格林尼制时间是00:00:00的时候,中国是凌晨,而西方是黑夜,这样各个地方之间的交流就很不方便了。因而国际组织又引入一个当地时间的概念,它将全球划分为24个时区,以格林尼制为起点,中国位于+8时区,当+8区的当地时间为2007年10月10日08:00:00的时候,格林尼制时间是2007年3月3日00:00:00。
二、NTP的工作原理
NTP采用了分布式的master/slave构架,与铯原子钟直接相连的NTP服务器称为stratum1,不妨把它当作根master,与stratum1相连的slave称为stratum2,以此类推,每一层的stratum既是下一层的master,又是上一层的slave,除此之外同一层stratum将成为peers,最大能到stratum15。
每个stratum(NTP服务器)都将维护自己的时间状态(因为ntp的守护进程是ntpd,所以也称ntpd状态),它会定时查询上一层或者同一层的stratum。根据返回的ntpd状态数据包,通过一套复杂的算法校正自己ntpd状态,从而保证整个NTP系统之间只有极小的时间误差,即使在缓慢的WAN链路上,也能保证误差在毫秒极的范围。
一般来说,NTP服务器最佳的安装位置是互联网网关,它除了要跟互联网上的NTP服务器同步外,还要提供NTP服务给企业内网的NTP客户端,NTP客户端泛指所有网络设备,包括路由器、交换机和其他服务器、客户端。
三、手工调整系统时间
讲了这么多原理是不是头都晕了,毕竟NTP是系统管理员才需要操心的问题,一般人关注的也仅仅是自己的系统时间准不准,如何手工校准?下面就让我们动手做些小练习提提神:
3.1 设置系统时区
一般在BIOS里面设置的是当地时间,然而Debian默认情况下以为BIOS使用的是UTC时间,也就是标准的格林尼治时间,首先调整:
接着将系统市区改为东八区
# tzselect
根据提示选择Asia/Beijing
然后
# dpkg-reconfigure tzdata
地区选择asia
,地点选择shanghai
这样系统时区就可以调整为东八区了,也就是CST
。
3.2 调整系统时间
以下几个命令可以显示、修改BIOS和系统时间
显示系统时间
# date
Mon Apr 23 23:25:00 CST 2012
该命令不仅显示时间、日期还有时区,本例中的时区是CST
修改系统日期
# date -s '20070324'
修改系统时间
# date -s '14:23:36'
显示BIOS时间
# hwclock --show
用系统时间覆盖BIOS时间
# hwclock --systohc
用BIOS时间覆盖系统时间
# hwclock --hctosys
date和hwclock还有其他参数,有兴趣的读者可以自行参考其他文档,这里就不累述了。
3.3 手工同步系统时间
前面手工设置的时间难免还是会跟标准时间有轻微的误差,ntpdate这个软件包可以解决这个问题,它将连上互联网的NTP服务器,同步系统时间。
# apt-get install ntpdate
# ntpdate -u <ntp_server>
\
系统每次启动时,都会调用ntpdate这个工具做时间同步,ntpdate将使用/etc/default/ntpdate
中默认的pool.ntp.org作为NTP服务器,您也可以将其修改成其他,例如使用距离较近的ntp.pku.edu.cn,它由北京大学维护。
总之,如果您的系统时间不对,可以按以下的步骤进行操作:
- 先检查BIOS时间
- 使用date修改系统时间
- 检查修改时区设置
- 手工ntpdate同步系统时间
- 将系统时间写入BIOS
四、NTP服务器的安装
在安装NTP服务器之间,需要先按照前面的步骤手工调整好系统时间,接下再用ntpdate手工同步一下系统时间。这是因为如果当前的系统时间跟互联网上的标准时间误差太大的话,NTP服务启动会失败。
{: class=“info” }
4.1 安装
# apt-get install ntp ntp-server
ntp-server的守护进程是ntpd,默认的配置文件是/etc/ntp.conf
。
4.2 配置
修改完配置后要重启守护进程:# /etc/init.d/ntp-server restart
五、NTP客户端的安装
ntp-server
既是服务器,又是客户端。
互联网上很多资料都建议使用ntpdate作为时间同步的工具,这是不对的,因为它对系统时间的修改是跳跃式的,不像ntp-server那样可以通过修改drift平滑过渡,所以ntpdate只适合在系统首次启动时同步时间,详细情况可以参考(http://www.hants.lug.org.uk/cgi-bin/wiki.pl?Ntpdate)。
5.1 修改ntpdate的设置
ntpdate默认的ntp服务器是pool.ntp.org,用户可以自行修改成企业内网的ntp服务器。
5.2 手工同步系统时间
# ntpdate -u 192.168.100.1
5.3 配置/etc/ntp.conf
因为客户端只需要去查询NTP服务器,并不提供服务器给其他人,所以配置文件很简单。
六、排错
1) 检查ntpd进程是否已经启用
2) 查看/var/log/daemon.log
默认情况下,ntpd的log写在/var/log/daemon.log中。
3) 使用ntpq -p查看跟NTP服务器的同步情况
poll表示每隔1024秒,客户端就会跟服务器同步一次。NTP客户端会自动调整poll的值,如果他们的误差很小就增大poll,反之则减小poll。