centos7.2变成了chrony
RHEL从7.0开始改用chrony同步时间,原ntp同步方式也可以使用,但要安装ntp服务。
[root@1st-kvm plymouth]# rpm -qa|grep chro
chrony-2.1.1-1.el7.centos.x86_64
设置NTP Server前的准备
其实这个标题应该改为设置"NTP Relay Server"前的准备更加合适. 因为不论我们的计算机配置多好运行时间久了都会产生误差,所以不足以给互联网上的其他服务器做NTP Server. 真正能够精确地测算时间的还是原子钟. 但由于原子钟十分的昂贵,只有少部分组织拥有, 他们连接到计算机之后就成了一台真正的NTP Server. 而我们所要做的就是连接到这些服务器上同步我们系统的时间,然后把我们自己的服务器做成NTP Relay Server再给互联网或者是局域网内的用户提供同步服务.[root@rac02 ~]# netstat -ln|grep 123
tcp 0 0 172.16.2.2:12382 0.0.0.0:* LISTENudp 0 0 172.16.2.2:27123 0.0.0.0:*udp 0 0 172.16.2.2:123 0.0.0.0:*udp 0 0 192.168.2.2: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:* 1). 架设一个NTP Relay Server其实非常简单,我们先把需要的RPM包装上 [root@localhost ~]# yum install ntpInstalling: ntp x86_64 4.2.6p5-2.el6.centos updates 593 kInstalling for dependencies: ntpdate x86_64 4.2.6p5-2.el6.centos updates 75 k[root@localhost ~]# rpm -ql ntp/etc/dhcp/dhclient.d/etc/dhcp/dhclient.d/ntp.sh/etc/ntp.conf/etc/ntp/crypto/etc/ntp/crypto/pw/etc/rc.d/init.d/ntpd/etc/sysconfig/ntpd/usr/bin/ntpstat/usr/sbin/ntp-keygen/usr/sbin/ntpd/usr/sbin/ntpdc/usr/sbin/ntpq/usr/sbin/ntptime/usr/sbin/tickadj/var/lib/ntp/var/lib/ntp/drift/var/log/ntpstats[root@localhost ~]# rpm -ql ntpdate/etc/ntp/etc/ntp/keys/etc/ntp/step-tickers/etc/rc.d/init.d/ntpdate/etc/sysconfig/ntpdate/usr/sbin/ntpdate2).找到在互联网上给我们提供同步服务的NTP Server ,http://www.pool.ntp.org是NTP的官方网站,在这上面我们可以找到离我们城市最近的NTP Server. NTP建议我们为了保障时间的准确性,最少找两个NTP Server。下面是一个中国的,两个亚洲的server 2.cn.pool.ntp.orgserver 1.asia.pool.ntp.orgserver 3.asia.pool.ntp.org下面是另一些可选的server 133.100.11.8 preferserver 210.72.145.44server 203.117.180.36server 131.107.1.10server time.asia.apple.comserver 64.236.96.53server 130.149.17.21server 66.92.68.246server www.freebsd.orgserver 18.145.0.30server clock.via.netserver 137.92.140.80server 133.100.9.2server 128.118.46.3server ntp.nasa.govserver 129.7.1.66server ntp-sop.inria.frserver (国家授时中心服务器IP地址) 3).在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间尽量接近标准时间. 这里我们可以用ntpdate命令要注意的是,ntpd 有一个自我保护设置: 如果本机与上源时间相差太大, ntpd 不运行. 所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务 运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.
####假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次. 那么为什么在打开NTP服务之前先要手动运行同步呢?1. 因为根据NTP的设置,如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的,所以要么你把时间设置回去,要么先做一个手动同步2. 当你的时间设置和NTP服务器的时间相差很大的时候,NTP会花上较长一段时间进行调整.所以手动同步可以减少这段时间 [root@localhost ~]# dateMon Feb 16 03:28:27 EST 2015[root@localhost ~]# ntpdate 2.cn.pool.ntp.org26 Feb 01:50:10 ntpdate[6018]: step time server 202.112.31.197 offset 858068.183303 sec[root@localhost ~]# dateThu Feb 26 01:51:01 EST 2015[root@localhost ~]# ntpdate 2.cn.pool.ntp.org26 Feb 01:53:12 ntpdate[6021]: adjust time server 202.112.29.82 offset 0.010526 sec[root@localhost ~]# dateThu Feb 26 01:53:16 EST 2015这方面的文章网上有很多,讲的也很详细,主要就是修改/etc/init.d/ntp.conf文件,我稍作了修改,加了两行:server 210.72.145.44server cn.pool.ntp.org之后我就可以同步时间了,有人加了这么一行restrict 192.168.1.1mask 255.255.255.0 nomodify我没有加,但依然成功,看了下配置文件有这第一行restrict ::1可能这一行就包含那一行的意思吧!仅仅是猜测。下面给出一个样本加注释,仅供参考:# 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 nomodify notrap noquery # 关闭所有的 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.orgserver 1.pool.ntp.orgserver 2.pool.ntp.orgserver cn.pool.ntp.org prefer#其他设置值,以系统默认值即可server 127.127.1.0 # localclockfudge 127.127.1.0 stratum 10driftfile /var/lib/ntp/driftbroadcastdelay 0.008keys /etc/ntp/keys总结一下,restrict用来设置访问权限,server用来设置上层时间服务器,driftfile用来设置保存漂移时间的文件。
配置和运行NTP Server现在我们就来创建NTP的配置文件了, 它就是/etc/ntp.conf. 我们只需要加入上面的NTP Server和一个driftfile就可以了# vi /etc/ntp.confserver 0.uk.pool.ntp.orgserver 1.uk.pool.ntp.orgdriftfile /var/lib/ntp/ntp.drift####非常的简单. 接下来我们就启动NTP Server,并且设置其在开机后自动运行 ####两种启动方式都可以[root@localhost ~]# /etc/init.d/ntpd start[root@localhost ~]# chkconfig --level 35 ntpd on[root@localhost ~]# service ntpd startStarting ntpd: [ OK ][root@localhost ~]# watch ntpq -p[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter============================================================================== gus.buptnet.edu 202.112.10.60 3 u 15 64 3 88.266 8.172 0.832 ns1.verd.co.id 202.162.32.12 3 u 14 64 3 210.501 -13.741 2.086 ktdns.cdnetwork 131.107.13.100 2 u 12 64 3 76.944 7.119 2.529[root@localhost ~]# dateThu Feb 26 01:58:51 EST 2015现在我就来解释一下其中的含义remote: 它指的就是本地机器所连接的远程NTP服务器refid: 它指的是给远程服务器(e.g. gus.buptnet.edu)提供时间同步的服务器st: 远程服务器的级别. 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端. 所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的.t: 这个.....我也不知道啥意思^_^when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步poll: 本地机和远程服务器多少时间进行一次同步(单位为秒). 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小reach: 这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加delay: 从本地机发送同步要求到服务器的round trip timeoffset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别. offset越接近于0,我们就和服务器的时间越接近jitter: 这是一个用来做统计的值. 它统计了在特定个连续的连接数里offset的分布情况. 简单地说这个数值的绝对值越小我们和服务器的时间就越精确那么大家细心的话就会发现两个问题: 第一我们连接的是0.uk.pool.ntp.org为什么和remote server不一样? 第二那个最前面的+和*都是什么意思呢?第一个问题不难理解,因为NTP提供给我们的是一个cluster server所以每次连接的得到的服务器都有可能是不一样.同样这也告诉我们了在指定NTP Server的时候应该使用hostname而不是IP第二个问题和第一个相关,既然有这么多的服务器就是为了在发生问题的时候其他的服务器还可以正常地给我们提供服务.那么如何知道这些服务器的状态呢? 这就是第一个记号会告诉我们的信息*它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供+它将作为辅助的NTP Server和带有*号的服务器一起为我们提供同步服务. 当*号服务器不可用时它就可以接管-远程服务器被clustering algorithm认为是不合格的NTP Serverx远程服务器不可用了解这些之后我们就可以实时监测我们系统的时间同步状况了 NTP安全设置运行一个NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多client提供时间同步服务, 但是一些基本的安全设置还是很有必要的那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务器. 第二个就是这些client不能修改我们服务器上的时间在/etc/ntp.conf文件中我们可以用restrict关键字来配置上面的要求首先我们对于默认的client拒绝所有的操作restrict default kod nomodify notrap nopeer noquery然后允许本机地址一切的操作restrict 127.0.0.1最后我们允许局域网内所有client连接到这台服务器同步时间.但是拒绝让他们修改服务器上的时间restrict 192.168.1.0 mask 255.255.255.0 nomodify把这三条加入到/etc/ntp.conf中就完成了我们的简单配置. NTP还可以用key来做authenticaiton,这里就不详细介绍了 只要在client的ntp.conf加上ntp server地址就可以了server 192.168.2.2491. 配置文件中的driftfile是什么?我们每一个system clock的频率都有小小的误差,这个就是为什么机器运行一段时间后会不精确. NTP会自动来监测我们时钟的误差值并予以调整.但问题是这是一个冗长的过程,所以它会把记录下来的误差先写入driftfile.这样即使你重新开机以后之前的计算结果也就不会丢失了2. 如何同步硬件时钟?NTP一般只会同步system clock. 但是如果我们也要同步RTC的话那么只需要把下面的选项打开就可以了
vi /etc/sysconfig/ntpd 添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。
在建立好ntp服务以后,可以用2个工具命令对ntp服务进行管理。一个是ntpq是一个交互式应用命令,在它的下面有很多的子命令可以供大家使用.使用peers可以查看同步进程。如果还需要其他的命令可以输入help 进行查看。还有一个工具命令是ntpdate这个命令一般用于ntp的客户端使用。可以在/var/adm/messages中看到ntp的同步信息的情况。如果需要更加详细的ntpq和ntpdate的信息可以使用man帮助进行查询。ntpdate与ntpd的关系类似于snmpwalk与snmpd的关系,一个客户端,一个服务端。
之前配置ntpd的时候搜到一句话,印象很深刻,也觉得很有标题党的效果,就借鉴为标题了:
“我认为有几种人是必须不招聘/裁掉的: 1 用ntpdate代替ntpd的人”但具体原因不太懂,总觉得还是用ntpdate比较方便。今天问了红帽技术支持,对方的解释是:ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。一个是校准时间,一个是调整时间。以下是一个形象的假设:linuxtone限制用户注册1小时才能发帖。数据库服务器在 10:00分接受了我的注册邀请;10:03分,ntpdate将数据库时间强行改成9:35分;然后10:05分(9:37分)我尝试发帖,系统判断我注册时间是否满一小时会使用:9:37 - 10:00最后电脑就逻辑混乱了。。。类似的帖子网上也有很详细的说明,贴出来给大家看看:时钟的跃变,有时候会导致很严重的问题。许多应用程序依赖连续的时钟??毕竟,这是一项常见的假定,即,取得的时间是线性的,一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,这有几个非常明显的问题:第 一,这样做不安全。ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某 些消耗性的任务。由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。第二,这样做不精确。一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。第三,这样做不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。NTPD 在和时间服务器的同步过程中,会把 BIOS 计时器的振荡频率偏差??或者说 Local Clock 的自然漂移(drift)??记录下来。这样即使网络有问题,本机仍然能维持一个相当精确的走时。##############最后提醒一下使用vmware的各位,因为虚拟机的时钟不太正常,比正常速度慢好多秒,所以在虚拟机上测试ntpd很难得到理想的结果,我当年就是为这个问题耽搁了好几天。。