RHCE系列之ntp服务器----理论篇

简介:

在上文Linux系统安装后的基础优化-基于CentOS(5.8/6.4)中,我们提到了如何定时自动更新服务器时间。同时也提到了,当内网机器数量巨大时,如果都去公网ntp服务器同步时间是会有延时的。当然,这也不是仅仅是部署ntp服务器的唯一意义。

随着网络规模和网络应用不断扩大,网络设备和服务器数量不断增加。运维人员在查看众多服务器日志时,往往发现时间不一,即使手工设置了时间,也会出现因时区或夏令时等因素造成时间误差;对于部署了集群的生产环境而言它们之间需要协同工作,因此时间的准确可靠性显得尤为重要。

NTP服务的配置及使用都非常简单,并且占用的网络资源也非常小。NTP时间服务器目前广泛应用于网络安全、在线教学、数据库备份等领域。企业采取措施同步网络设备和服务器的时间非常重要,并且确保服务器产生的日志能提供精确的时间定位更应当得到关注。本系列博文将带领大家了解NTP的相关知识以及如何在企业生产环境中部署简易架构的实现负载均衡和高可用的NTP服务器。希望能对大家的学习和运维工作有帮助!

本篇将带领大家先了解一下时间的相关概念和ntp的一些常识。


一、时间和时区

地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早。东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算,这给人们带来不便。因此,为了克服时间上的混乱,在1884年华盛顿的一次国际经度会议上,把全球划为了24个时区(东、西各12个时区),规定了格林威治时间(GMT)为0时区时间。而我国首都北京则为东8区,并且我国也将此时间作为全国统一时间,即为北京时间。因此,也就有了我们日常所说的时间的标准了。我们可以理解为,时间是基于时区给出的定义。

然而,我们在计算机中经常看到的是(UTC+08:00)。UTC是英文Coordinated Universal Time的缩写,翻译为协调世界时。而UTC+08:00则代表北京为东8区。因此可想而知UTC +00:00即为格林威治时间。

为什么要提这些呢?

第一,不论我们通过哪种渠道来更新系统的时间,通常公共ntp服务器只会给我们UTC +00:00的时间值,而不是我们当前时区的时间值,因为它也不知道我们在呢啊,所以当我们在安装系统的时候,选择时区那一步非常重要。

第二,我国是有夏令时的,也许哪天就会拨快1小时,让你从东8区变成东9区。当然,到时候还会再拨慢回来的。此时,如果我们设置了正确的时区,当需要改变时间的时候,系统就会自动替我们做出调整。


二、linux的时区

在安装linux的时候,有一步是让你选择时区的,还记得吧。那么如果我们想更改时区,或者说安装的时候设置错了,怎么办呢?不用担心!因为在linux下glibc已经提供给我们了许多编译好的timezone文件,并且把他们存放在了/usr/share/zoneinfo目录下,这里面基本涵盖了大部分的国家和城市。

1
2
3
4
5
6
7
8
9
10
11
[root@c64ntp ~] # ls /usr/share/zoneinfo/
Africa      Canada   GB         Indian     Mexico    ROC        Zulu
America     Chile    GB-Eire    Iran       Mideast   ROK        iso3166.tab
Antarctica  Cuba     GMT        Israel     NZ        Singapore  posix
Arctic      EET      GMT+0      Jamaica    NZ-CHAT   Turkey     posixrules
Asia        EST      GMT-0      Japan      Navajo    UCT        right
Atlantic    EST5EDT  GMT0       Kwajalein  PRC       US         zone.tab
Australia   Egypt    Greenwich  Libya      PST8PDT   UTC
Brazil      Eire     HST        MET        Pacific   Universal
CET         Etc      Hongkong   MST        Poland    W-SU
CST6CDT     Europe   Iceland    MST7MDT    Portugal  WET

当我们想查看某个时区的时间时,我们可以用zdump命令

1
2
[root@c64-client ~] # zdump Cuba
Sat Nov  2 08:42:13 CDT 2013     #古巴的时间已经出来了

可是当我们想更改时区的时候怎么办呢?

1、修改/etc/localtime文件

/etc/localtime文件定义了我们所在的本地时区,我们可以通过从/usr/share/zoneinfo/下复制我们需要的时区文件去替换/etc/localtime来达到更改时区的目的,例如,这里我们将时区更改为Cuba的时区

1
2
3
[root@c64-client ~] # /bin/cp /usr/share/zoneinfo/Cuba /etc/localtime
[root@c64-client ~] # date
Sat Nov  2 08:44:49 CDT 2013            #时区已经更改为了Cuba时区

当然,我们也可以用软连接的方法来进行时区更换,这次我们更换为Canada的时区

1
2
3
[root@c64-client ~] # ln -sf /usr/share/zoneinfo/Canada /etc/localtime
[root@c64-client ~] # date
Sat Nov  2 12:46:54 UTC 2013     #这样刚才Cuba的时区就又变成了Canada的时区了。

2、设置TZ环境变量的值

环境变量大家应该不陌生,时区也是有它自己的环境变量值的,并且很多程序和命令都要调用这个变量的值。这里我们通过tzselect命令来教大家如何设置TZ环境变量的值。本例以上海时间为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[root@c64-client ~] # tzselect
Please identify a location so that  time  zone rules can be  set  correctly.
Please  select  a continent or ocean.            #这里让你选择一个大陆或海洋
  1) Africa
  2) Americas
  3) Antarctica
  4) Arctic Ocean
  5) Asia
  6) Atlantic Ocean
  7) Australia
  8) Europe
  9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the  time  zone using the Posix TZ  format .
#? 5
Please  select  a country.               #接下来让你选择一个国家或者城市
  1) Afghanistan           18) Israel                35) Palestine
  2) Armenia               19) Japan                 36) Philippines
  3) Azerbaijan            20) Jordan                37) Qatar
  4) Bahrain               21) Kazakhstan            38) Russia
  5) Bangladesh            22) Korea (North)         39) Saudi Arabia
  6) Bhutan                23) Korea (South)         40) Singapore
  7) Brunei                24) Kuwait                41) Sri Lanka
  8) Cambodia              25) Kyrgyzstan            42) Syria
  9) China                 26) Laos                  43) Taiwan
10) Cyprus                27) Lebanon               44) Tajikistan
11) East Timor            28) Macau                 45) Thailand
12) Georgia               29) Malaysia              46) Turkmenistan
13) Hong Kong             30) Mongolia              47) United Arab Emirates
14) India                 31) Myanmar (Burma)       48) Uzbekistan
15) Indonesia             32) Nepal                 49) Vietnam
16) Iran                  33) Oman                  50) Yemen
17) Iraq                  34) Pakistan
#? 9
Please  select  one of the following  time  zone regions.       #现在让你从以下时间区区域中做出选择。
1) east China - Beijing, Guangdong, Shanghai, etc.          #因为我们要选择上海时区,所以选择这个。
2) Heilongjiang (except Mohe), Jilin
3) central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
4) most of Tibet & Xinjiang
5) west Tibet & Xinjiang
#? 1
The following information has been given:
         China
         east China - Beijing, Guangdong, Shanghai, etc.
Therefore TZ= 'Asia/Shanghai'  will be used.
Local  time  is now:      Sat Nov  2 20:52:38 CST 2013.
Universal Time is now:  Sat Nov  2 12:52:38 UTC 2013.
Is the above information OK?
1) Yes
2) No
#? 1
You can  make  this change permanent  for  yourself by appending the line
         TZ= 'Asia/Shanghai' export  TZ      #它会在这里生成你更改这个环境变量的命令,下面执行这个命令即可更改时区
to the  file  '.profile'  in  your home directory;  then  log out and log  in  again.
Here is that TZ value again, this  time  on standard output so that you
can use the  /usr/bin/tzselect  command  in  shell scripts:
Asia /Shanghai
[root@c64-client ~] # TZ='Asia/Shanghai'; export TZ
[root@c64-client ~] # date
Sat Nov  2 20:52:49 CST 2013          #可以看到我们的时间已经更改为了上海时间

我们知道如何设置linux的时区后,下面就是计算机的时间问题了。


三、计算机的时间

一台计算机上我们是有两个时钟的,一个是硬件时间时钟(Real Time Clock简称RTC),一个是系统时间(System Clock)。

硬件时钟是指嵌在主板上的特殊的电路。正因为有它存在,我们电脑在关机之后,还能保持正常进行计时。

系统时钟就是操作系统的kernel所用来计算时间的时钟。它是从1970年1月1日 00:00:00的UTC时间到目前为止的秒数总和之值。在Linux下,系统时间在开机的时候会和硬件时间进行同步(synchronization),之后就开始各自独立运行了。

那么既然两个时钟各自独自运行,那么时间久了必然就会产生误差。下面我实时输出计算机的系统时间和硬件时间

1
2
3
4
[root@c64-client ~] # date      #查看系统时间
Sat Nov  2 21:02:29 CST 2013
[root@c64-client ~] # hwclock --show    #查看硬件时间
Sun Nov  3 05:02:22 2013  -0.126978 seconds

我们可以看出,硬件时间和系统时间是不相等的。我们可以通过下面两个命令,灵活的进行时间同步。

1
2
3
4
5
[root@c64-client ~]# hwclock --hctosys    #将硬件时间设置成系统时间
[root@c64-client ~]# hwclock --systohc    #将系统时间设置成硬件时间
或者也可以是
[root@c64-client ~]# hwclock -r    #将硬件时间设置成系统时间
[root@c64-client ~]# hwclock -w    #将系统时间设置成硬件时间

知道了如何同步两个时间,那么如果如果想更改怎么做呢?

1
2
[root@c64-client ~] # hwclock --set --date="mm/dd/yy hh:mm:ss"   #修改硬件时间到指定时间
[root@c64-client ~] # date -s "dd/mm/yyyy hh:mm:ss"      #修改系统时间到指定时间

现在我们知道了如何设置系统和硬件的时间,那么当两个时间都不准确了怎么办呢?

此时,我们就要用到文章开头提到的NTP服务器了。我们已经知道了NTP服务器是提供时间同步服务了。

那么NTP服务器是怎么工作的呢?

通过谷歌查阅文档,我们知道NTP服务器是基于NTP协议想客户端提供时间同步服务的。NTP(Network Time Protocol)是一种用来使系统和一个精确的时间源保持时间同步的协议。NTP协议是通过Server和Client的方式进行的。

下面我们引入网络设备中的NTP工作原理,来让大家理解。

220142883.png

Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。

当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。

当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。

当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。

至此,Device A已经拥有足够的信息来计算两个重要的参数:

NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。

Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。

虽然NTP协议中有对往返时延的计算,但是在生产环境中还是会因为时延问题导致时间不同步,原因出在哪里呢?

时间延迟通常由2部分构成,一部分来自于外部网络传输上的延迟,一部分来自于内部协议层编解码时标的过程中。NTP协议本身的计算就加入了网络传输延迟的因素,因此只要NTP从钟有优秀的同步计算能力,传输延时并不会对同步精度产生很大影响,此时内部协议层编解码时标的过程中产生的时间延迟是影响网络同步精度的主要因素。传统的NTP网络中,如果NTP从钟和NTP服务器之间间隔了多个stratum,由于在每个节点编解码时标时都产生时延,因此这个NTP从钟所获得的时间精度较差。


综上所述,在生产环境中,我们受降低时延和解决后端数据应用服务器无法连接公网,却又必须进行时间同步这两方面的因素影响,促使我们必须在内网搭建一台或两台NTP服务器(实现负载均衡高可用)来实现我们企业内部的时间同步服务。

OK!本文就讲到这里了,该讲的原理都讲的差不多了。由于时间在我们生产环境应用中非常重要,所以此篇幅略有点长。下篇我将详细讲解,如何在企业内网部署NTP服务器











本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1319293,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
网络协议 算法 定位技术
利用GPS北斗卫星系统开发NTP网络时间服务器
利用GPS北斗卫星系统开发NTP网络时间服务器
|
3月前
|
网络安全
构建 NTP 时间服务器
构建 NTP 时间服务器
134 2
|
5月前
|
缓存 Linux 开发工具
centos设置ntp服务同步目标服务器时间
【7 月更文挑战第 1天】linux+centos设置ntp服务同步目标服务器时间
|
7月前
|
Linux 数据库
ntp如何配置同步服务器
【5月更文挑战第19天】ntp如何配置同步服务器
189 2
|
7月前
|
Linux 数据库
ntp如何配置同步服务器
【5月更文挑战第24天】ntp如何配置同步服务器
199 0
|
17天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
22天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
24天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
22天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。
129 2
|
1月前
|
弹性计算
阿里云2核16G服务器多少钱一年?亲测价格查询1个月和1小时收费标准
阿里云2核16G服务器提供多种ECS实例规格,内存型r8i实例1年6折优惠价为1901元,按月收费334.19元,按小时收费0.696221元。更多规格及详细报价请访问阿里云ECS页面。
66 9