生产环境部署NTP时间服务器,基于Linux SUSE12系统。
1.Linux服务器运行很久时,系统时间就会存在一定的误差;
2.有时因为各种业务需求,需要分析日志。如果时间不一致,会导致日志信息时间不准确,从而无法正确判断分析故障原因;
3.在多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等。
第 1 部分 部署NTP服务器端
第 1 章
说明
在一台主机(192.168.4.206),安装、配置ntp服务,做为“NTP时间服务器端”。
在NTP客户端,安装、配置、启动NTP服务,设置“NTP客户端”自动同步“时间服务器”(通过crontab计划任务)。
由于NTP服务需要使用到UDP端口号123,所以当系统的防火墙(Iptables)启动的情况下,必须开放UDP端口号123。
在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC),还有一个称之为系统时钟(SystemClock)。
第 2 章
时区
必须确保Linux主机的时区是 Asia/Shanghai/
1.方法一
修改/etc/localtime这个文件,该文件定义了主机所在的localtime zone(时区)。
我们可以在/usr/share/zoneinfo下找到time zone文件然后拷贝到/etc/localtimezone(或者做个软链接)。
假设我们现在的time zone是BST(也就是英国的夏令时间,UTC+1),下面配置中国时区:
查看时间、时区# date修改时区Thu Jul 5 23:33:40 BST 2007我们想把time zone换成上海所在的时区就可以这么做# ln -sf usr/share/zoneinfo/posix/Asia/Shanghai etc/localtime查看时间、时区# date -RFri Jul 6 06:35:52 CST 2007 +0800这样时区就改过来了(注意时间也做了相应的调整)。
2.方法二
第二种方法是“设置TZ环境变量的值”。许多程序和命令都会用到这个变量的值. TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令。
# tzselect.........TZ='America/Los_Angeles';export TZtzselect会让你选择所在的国家和城市(我省略了这些步骤),最后输出相应的TZ变量的值.那么如果你设置了TZ的值之后时区就又会发生变化。设置TZ值后查看时间的代码:# date -RThu Jul 5 15:48:11 PDT 2007 +0800通过这两个例子我们也可以发现TZ变量的值会override/etc/localtime. 也就是说当TZ变量没有定义的时候系统才使用/etc/localtime来确定timezone. 所以你想永久修改timezone的话那么可以把TZ变量的设置写入/etc/profile里
好了现在我们知道怎么设置Linux时区了,下面就来看看如何设置Linux的时间。
第 3 章
在服务器端安装NTP服务
(1)查看是否安装ntp的服务“ntpd”rpm –qi ntpd(2)安装ntpzypper install ntp(SUSE系统)yum –y install ntp(CentOS、RedHat系统)(3)查看运行状态(默认是关闭状态)systemctl status ntpd(SUSE12、CentOS7系统)service ntpd ntpd(CentOS6系统)
使用ntpdate命令手动更新时间ntpdate ntp.aliyun.com(手动同步阿里云的时间服务器)ntpdate ntp.aliyun.com假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次。那么为什么在打开NTP服务之前先要手动运行同步呢?a. 因为根据NTP的设置,如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的,所以要么你把时间设置回去,要么先做一个手动同步。b. 当你的时间设置和NTP服务器的时间相差很大的时候,NTP会花上较长一段时间进行调整。所以手动同步可以减少这段时间。
################################################################################## etc/ntp.conf#### Sample NTP configuration file.## See package 'ntp-doc' for documentation, Mini-HOWTO and FAQ.## Copyright (c) 1998 S.u.S.E. GmbH Fuerth, Germany.#### Author: Michael Andres, <ma@suse.de>## Michael Skibbe, <mskibbe@suse.de>###################################################################################### Radio and modem clocks by convention have addresses in the## form 127.127.t.u, where t is the clock type and u is a unit## number in the range 0-3.#### Most of these clocks require support in the form of a## serial port or special bus peripheral. The particular## device is normally specified by adding a soft link## dev/device-u to the particular hardware device involved,## where u correspond to the unit number above.#### Generic DCF77 clock on serial port (Conrad DCF77)## Address: 127.127.8.u## Serial Port: dev/refclock-u#### (create soft link dev/refclock-0 to the particular ttyS?)### server 127.127.8.0 mode 5 prefer#### Undisciplined Local Clock. This is a fake driver intended for backup## and when no outside source of synchronized time is available.##server 127.127.1.0 # local clock (LCL)fudge 127.127.1.0 stratum 10 # LCL is unsynchronizedserver ntp.aliyun.com iburst preferserver ntp.ntsc.ac.cn#### Add external Servers using## # rcntpd addserver <yourserver>## The servers will only be added to the currently running instance, not## to etc/ntp.conf.### Access control configuration; see usr/share/doc/packages/ntp/html/accopt.html for# details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions># might also be helpful.## Note that "restrict" applies to both servers and clients, so a configuration# that might be intended to block requests from certain clients could also end# up blocking replies from your own upstream servers.# By default, exchange time with everybody, but don't allow configuration.restrict -4 default notrap nomodify nopeer noqueryrestrict -6 default notrap nomodify nopeer noquery# Local users may interrogate the ntp server more closely.restrict 127.0.0.1restrict ::1# Clients from this (example!) subnet have unlimited access, but only if# cryptographically authenticated.# restrict 192.168.4.0 mask 255.255.255.0 nomodify notrap#restrict default nomodify notrap nopeernoquery#### Miscellaneous stuff##driftfile var/lib/ntp/drift/ntp.drift # path for drift filelogfile var/log/ntp # alternate log file# logconfig =syncstatus + sysevents# logconfig =all# statsdir tmp/ # directory for statistics files# filegen peerstats file peerstats type day enable# filegen loopstats file loopstats type day enable# filegen clockstats file clockstats type day enable## Authentication stuff#keys etc/ntp.keys # path for keys filetrustedkey 1 # define trusted keysrequestkey 1 # key (7) for accessing server variablescontrolkey 1 # key (6) for accessing server variables
server 127.127.1.0 # local clock (LCL)fudge 127.127.1.0 stratum 10 # LCL is unsynchronized上面两行表示:设置本机时钟,如果“互联网上的NTP时间服务器” 对外不提供服务,或者坏掉,就由本机的“系统时间”对NTP客户端提供时间服务。本机在时间服务器的级别是10,一般企业局域网中的时间服务器都设置为10。这是时间服务器的层次。设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0。如果是LINUX做为NTP服务器,stratum(层级)的值不能太大,范围是0—15,企业一般设置为10。为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的,所以不要设置的太小。server ntp.aliyun.com iburst prefer本机向互联网上,“域名为ntp.aliyun.com”的主机,同步时间。这个主机是阿里云对外提供的NTP时间服务器。“iburst”表示快速请求,“prefer”表示本机主要向它请求同步时间。Server后面接的是"上层NTP时间服务器"。如果Server参数后面加上prefer的话,那表示我们的 NTP 主机主要以该部主机来作为时间校正的对应。server ntp.ntsc.ac.cn本机向互联网上,“域名为server ntp.ntsc.ac.cn”的主机,同步时间。这个主机是“中国国家授时中心”对外提供的NTP时间服务器。如果带prefer那一行的时间服务器不提供服务,或者坏掉,本机就向此主机请求时间同步。
restrict -4 default notrap nomodify nopeer noquery拒绝所有IPv4的NTP客户端连接本机。restrict -6 default notrap nomodify nopeer noquery拒绝所有IPv6的NTP客户端连接本机。restrict 127.0.0.1默认的设置,表示:允许本机IPv4地址一切的操作。restrict ::1默认的设置,表示:允许本机IPv6地址一切的操作。restrict 192.168.4.0 mask 255.255.255.0 nomodify notrap允许192.168.4.0网段的NTP客户端连接本机同步时间,但不提供trap远程登录功能。driftfile var/lib/ntp/drift/ntp.drift(默认的设置)logfile var/log/ntp(默认的设置)keys etc/ntp.keys(默认的设置)trustedkey 1(默认的设置)requestkey 1(默认的设置)controlkey 1(默认的设置)
restrict 192.168.6.3 nomodify notrap nopeer noquery拒绝192.168.6.3,即当前节点IP地址的所有操作。restrict default ignore允许任何NTP客户端进行时间同步。
格式: restrict IP地址 mask子网掩码参数(1)其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP(2)mask参数有以下几个:ignore :关闭所有的NTP 联机服务nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网 。noquery :不提供客户端的时间查询 。notrap:不提供trap远程登录功能,trap服务是一种远程时间日志服务。nopeer:提供时间服务,但不作为对等体。kod:向不安全的访问者发送Kiss-Of-Death报文。注意:如果参数没有设定,那就表示该IP (或子网)没有任何限制!
5.配置“同步系统时间后,在自动同步硬件时间”
NTP一般只会同步system clock(系统时钟)。但是如果我们也要同步RTC(hwclock,即硬件时钟)的话,按下面的步骤操作。ntp-server:~ # vim /etc/sysconfig/ntp(SUSE12的文件名是“/etc/sysconfig/ntp” ,CentOS系统的文件名是“/etc/sysconfig/ntpd” )找到“SYNC_HWCLOCK” 所在的字段,设置为“yes”SYNC_HWCLOCK=yes
6.开启ntp的服务“ntpd”,并设置开机自启
ntp-server:~ # systemctl restart ntpd(重启)ntp-server:~ # systemctl enable ntpd(开机自启)ntp-server:~ # systemctl status ntpd(查看状态)
第 4 章
查看NTP服务运行状态
现在我们已经启动了NTP的服务,但是我们的系统时间到底和服务器同步了没有呢? 为此NTP提供了一个很好的查看工具: ntpq(NTP query)。
必须打开”ntpd” 服务才能使用“ntpq”命令来监测服务器的运行;这里我们使用“ntpq” 命令结合“watch”命令,动态的来查看一段时间内服务器各项数值的变化。
ntp-server:~ # watch ntpq –pnEvery 2.0s: ntpq -pn Tue Oct 15:07:16 2019remote refid st t when poll reach delay offset jitter==============================================================================127.127.1.0 .LOCL. 10 l 1414 64 0 0.000 0.000 0.000*203.107.6.88 10.137.55.181 2 u 64 64 377 19.181 -0.070 0.079+114.118.7.161 123.139.33.3 2 u 28 64 337 4.403 1.767 0.188
现在来解释一下其中的含义:
remote: 它指的就是本地机器所连接的远程NTP服务器;refid :NTP服务器使用的上一级ntp服务器;st:远程服务器的层级别(stratum)。由于NTP是层型结构,有顶端的服务器,多层的RelayServer再到客户端,所以服务器从高到低级别可以设定为1-15,为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的;t:不知道。when: 上一次成功请求之后到现在的秒数;poll: 本机和远程服务器多少时间进行一次同步(单位为秒)。在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围。之后poll值会逐渐增大,同步的频率也就会相应减小;reach:这是一个八进制值,用来测试能否和服务器连接,每成功连接一次它的值就会增加;delay: 从本机发送同步要求到服务器的roundtrip time;offset: 这是个最关键的值,是主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒(ms)。offset越接近于0,主机就和服务器的时间越接近;jitter: 这是一个用来做统计的值。它统计了在特定个连续的连接数里,offset的分布情况.。简单地说这个数值的绝对值越小,主机和服务器的时间就越精确;大家细心的话就会发现两个问题:第一我们连接的是ntp.aliyun.com,但显示的结果,为什么不一样?第二,那个最前面的+和*都是什么意思呢?第一个问题不难理解,因为NTP提供给我们的是一个cluster server(集群服务器),所以每次连接的得到的服务器都有可能是不一样.同样这也告诉我们了在指定NTPServer(NTP时间服务器)的时候应该使用hostname(主机名)而不是IP。第二个问题和第一个相关,既然有这么多的服务器就是为了在发生问题的时候其他的服务器还可以正常地给我们提供服务,那么如何知道这些服务器的状态呢?这就是第一个记号会告诉我们的信息。* 告诉我们远端的服务器已经被确认为我们的主NTP时间服务器,我们系统的时间将首先由这台机器所提供;+ 将作为辅助的NTP时间服务器,和带有*号的服务器一起为我们提供同步时间的服务。当*号服务器不可用时它就可以接管;-远程服务器被clusteringalgorithm认为是不合格的NTP时间服务器;x 远程服务器不可用。了解这些之后我们就可以实时监测我们系统的时间同步状况了。
第 2 部分 配置NTP客户端同步时间-方法一
做到这里我们已经有了一台自己的时间服务器。如果我们想让局域网内的其他“NTP客户端”都进行时间同步的话,可以配合"crontab计划任务和chrony服务"向NTP服务器端同步时间。
第 1 章
crontab计划任务
crontab计划任务,适用于SUSE、CentOS、Ubuntu系统的新、老版本。
crontab -e30 * * * * usr/sbin/ntpdate -u 192.168.4.206
第 2 章
chrony服务
chrony服务适用于SUSE、CentOS、Ubuntu系统的新版本。chrony即能当服务器端,也能当客户端。事实上chrony比ntp更好用。
下面以CentOS7系统为例,配置chrony在客户端是怎么配置。chrony使用UDP协议的323端口。
CentOS7默认安装了chrony服务,使用"rpm -qi | grep chrony"命令查看。如果没有,使用"yum -y install chrony"命令安装。
# Use public servers from the pool.ntp.org project.# Please consider joining the pool (http://www.pool.ntp.org/join.html).server 192.168.4.206 iburstserver 192.168.4.207 iburst# Record the rate at which the system clock gains/losses time.driftfile /var/lib/chrony/drift# Allow the system clock to be stepped in the first three updates# if its offset is larger than 1 second.makestep 1.0 3# Enable kernel synchronization of the real-time clock (RTC).rtcsync# Enable hardware timestamping on all interfaces that support it.#hwtimestamp *# Increase the minimum number of selectable sources required to adjust# the system clock.#minsources 2# Allow NTP client access from local network.#allow 192.168.0.0/16# Serve time even if not synchronized to a time source.#local stratum 10# Specify file containing keys for NTP authentication.#keyfile etc/chrony.keys# Specify directory for log files.logdir /var/log/chrony# Select which information is logged.#log measurements statistics tracking
systemctl start chronydsystemctl enable chronydsystemctl status chronyd

[root@centos7 ~]# chronyc (交互式执行)chrony version 3.2Copyright (C) 1997-2003, 2007, 2009-2017 Richard P. Curnow and otherschrony comes with ABSOLUTELY NO WARRANTY. This is free software, andyou are welcome to redistribute it under certain conditions. See theGNU General Public License version 2 for details.chronyc> activity200 OK1 sources online0 sources offline0 sources doing burst (return to online)0 sources doing burst (return to offline)0 sources with unknown addresschronyc> quit[root@centos7 ~]# chronyc activity (非交互式执行)200 OK1 sources online0 sources offline0 sources doing burst (return to online)0 sources doing burst (return to offline)0 sources with unknown address[root@centos7 ~]#
[root@centos7 ~]# chronycchrony version 3.2Copyright (C) 1997-2003, 2007, 2009-2017 Richard P. Curnow and otherschrony comes with ABSOLUTELY NO WARRANTY. This is free software, andyou are welcome to redistribute it under certain conditions. See theGNU General Public License version 2 for details.chronyc> accheck 172.22.0.100209 Access denied(访问被拒绝)chronyc>
第 3 部分 配置NTP客户端同步时间-方法二
我们现在有了一台自己的时间服务器。如果我们想让局域网内的其他“NTP客户端”都进行时间同步的话,需要在“NTP客户端”/etc/ntp.conf配置文件里,指定向我们部署的这台服务器同步时间。(注意:如果你的“NTP客户端”可以向Internet上的时间服务器同步时间,建议不要这么做,正确的应该是以局域网内的时间服务器为准)。
第 1 章
安装NTP服务
1.检查是否安装ntprpm –qi ntp2.系统默认都会安装NTP,如果没有,就执行下面命令安装ntpzypper install ntp(SUSE系统)yum –y install ntp(CentOS系统)
第 2 章
先手动同步时间
在NTP客户端,先使用ntpdate命令,手动同步时间。
systemctl status ntpd(确认ntpd服务是关闭状态,否则无法运行ntpdate命令)ntpdate 192.168.4.206(局域网内NTP时间服务器的IP地址)
第 3 章
配置NTP文件
编辑NTP配置文件,配置向局域网内的时间服务器,同步时间。
ntp-clent:~ # vim /etc/ntp.confserver 127.127.1.0 # local clock (LCL)fudge 127.127.1.0 stratum 12 # LCL is unsynchronized上面两行是设置本地时钟,注意基本不要小于10,因为“局域网内的NTP时间服务器”的级别是10,如果你是设置的是9,就不会向“局域网内的NTP时间服务器”请求时间。server 192.168.4.206 iburst prefer(设置向“局域网内的NTP时间服务器”同步时间,并且首先向它同步)restrict -4 default notrap nomodify nopeer noquery(默认的配置)restrict -6 default notrap nomodify nopeer noquery(默认的配置)restrict 127.0.0.1(默认的配置)restrict ::1(默认的配置)restrict 192.168.4.206(允许“局域网内的NTP时间服务器”,即IP地址为192.168.4.206的主机对本机的所有操作)driftfile /var/lib/ntp/drift/ntp.drift(默认的配置)logfile /var/log/ntp(默认的配置,定义日志文件的路径)keys /etc/ntp.keys(默认的配置)trustedkey 1(默认的配置)requestkey 1(默认的配置)controlkey 1(默认的配置)
配置“同步系统时间后,在自动同步硬件时间”
NTP一般只会同步system clock(系统时钟)。但是如果我们也要同步RTC(hwclock,即硬件时钟)的话,按下面的步骤操作。ntp-clent:~ # vim /etc/sysconfig/ntp(SUSE12的文件名是“/etc/sysconfig/ntp” ,CentOS系统的文件名是“/etc/sysconfig/ntpd” )找到“SYNC_HWCLOCK” 所在的字段,设置为“yes”SYNC_HWCLOCK=yes
“/etc/sysconfig/ntp”文件说明
(1)配置项说明:1》 使用-x项,进行平滑同步时间OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"SYNC_HWCLOCK=yes 将系统与硬件时间进行同步2》 不使用-x项及默认的-g,进行跳跃同步时间OPTIONS=" -u ntp:ntp -p /var/run/ntpd.pid"SYNC_HWCLOCK=yes 将系统与硬件时间进行同步3》 默认的-g,忽略1000s时间现在同步OPTIONS=" -g ntp:ntp -p /var/run/ntpd.pid"SYNC_HWCLOCK=yes 将系统与硬件时间进行同步(2) “-x” 、“-u” 、“-g”选项说明1》 假如使用了-x选项,那么ntpd只做微调,不跳跃调整时间,但是要注意,-x参数的负作用:当时钟差大的时候,同步时间将花费很长的时间。-x也有一个阈值,就是600s,当系统时钟与标准时间差距大于600s时,ntpd会使用较大“步进值”的方式来调整时间,将时钟“步进”调整到正确时间。2》假如不使用-x选项,那么ntpd在时钟差距小于128ms时,使用微调方式调整时间,当时差大于128ms时,使用“跳跃”式调整。3》这两种方式都会在本地时钟与远端的NTP服务器时钟相差大于1000s时,ntpd会停止工作。在启动NTP时加了参数“-g”就可以忽略1000S的问题。
第 4 章
开启NTP服务
开启ntp的服务“ntpd”,并设置开机自启
ntp-clent:~ # systemctl restart ntpd(重启)ntp-clent:~ # systemctl enable ntpd(开机自启)ntp-clent:~ # systemctl status ntpd(查看状态)
第 5 章
验证
查看NTP客户端的时间同步是否生效
ntp-clent:~ # watch ntpq –pnEvery 2.0s: ntpq -pn Tue Oct 16:30:16 2019remote refid st t when poll reach delay offset jitter==============================================================================127.127.1.0 .LOCL. 12 l 112m 64 0 0.000 0.000 0.000*192.168.4.206 203.107.6.88 3 u 210 256 377 0.156 -0.379 0.137
第 6 章
补充
1.配置文件中的driftfile是什么?
2.Windows系统连接时间服务器
Windows 需要打开windowstime服务和RPC服务。如果在打开windowstime 服务,时报错误1058,进行下面操作 :(1)运行 cmd 进入命令行,然后键入w32tm /register 进行注册正确的响应为:W32Time 成功注册。(2)如果上一步正确,用 netstart "windows time" 或net start w32time 启动服务。
3.常见的报错
25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found或者:unsynchronised time server re-starting polling server every 8 s或者:unsynchronised polling server every 8 s其实,这不是一个错误。而是由于每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接,当此时用客户端连接服务端就会报这样的信息,一般等待几分钟就可以了。
4.造成无法成功更新的原因
1、客户端的日期必须要设置正确,不能超出正常时间24小时,不然会因为安全原因被拒绝更新。其次客户端的时区必须要设置好,以确保不会更新成其它时区的时间。
2、fudge 127.127.1.0stratum 10 (如果是LINUX做为NTP服务器,stratum(层级)的值不能太大,如果要向上级NTP更新可以设成2)
3、Linux的NTP服务器必须记得将从上级NTP更新的时间从系统时间写到硬件里去hwclock -w
NTP一般只会同步system clock.但是如果我们也要同步RTC(hwclock)的话那么只需要把下面的选项打开就可以了:# vim /etc/sysconfig/ntpSYNC_HWCLOCK=yes
4、Linux如果开启了NTP服务,则不能手动运行ntpdate更新时间(会报端口被占用),它只能根据/etc/ntp.conf里server 字段后的服务器地址按一定时间间隔自动向上级NTP服务器更新时间。可以运行命令ntpstat 查看每次更新间隔如:
[root@ESXI ~]# ntpstatsynchronised to NTP server (210.72.145.44) at stratum 2(本NTP服务器层次为2,已向210.72.145.44 NTP同步过)time correct to within 93 ms(时间校正到相差93ms之内)polling server every 1024 s(每1024秒会向上级NTP轮询更新一次时间)
▼




