1、服务器 : 192.168.137.3
2、客户端: 192.168.137.6
# rpm -qa |grep ntp ntpdate
fontpackages-filesystem-1.44-8.el7.noarch
python-ntplib-0.3.2-1.el7.noarch
ntpdate-4.2.6p5-28.el7.centos.x86_64
ntp-4.2.6p5-28.el7.centos.x86_64
存在如上红色字体安装包输出,则代表该服务器已经安装ntp和ntpdate服务
2、如没有安装,则在服务器和客户端同时安装ntp和ntpdate服务 # yum install ntp ntpdate -y
1、登陆https://www.pool.ntp.org/zone/cn网站
2、找到中国区的4个时钟源服务器域名:
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.cn.pool.ntp.org iburst
server 3.cn.pool.ntp.org iburst
server 127.127.1.0 iburst local clock
restrict 192.168.137.0 mask 255.255.255.0 nomodify notrap nopeer
fudge 127.0.0.1 stratum 10
解释:
(1)、server 0.cn.pool.ntp.org iburst:指定本NTP服务器的上一级时钟源域名(中国区就4个);4个域名下挂有67台时钟源服务器,其中 0-3.cn.pool.ntp.org 域名解析将会每小时更新,并随机指向其下挂的一系列时钟服务器(中国区目前下挂有67台时钟源服务器,免费的为中国区各企业、单位的NTP服务器提供时间源;如果你有一台IP地址固定、运行稳定、接入互联网的服务器,也可以向国际时钟源组织申请添加你的服务器作为时钟源服务器,以提供公益性的时钟同步服务);另外如果你记不得亚洲区或及其下设中国区的时钟源域名,这里的域名配置可以直接写成server pool.ntp.org iburst即可,让根域名服务器自己区解析找到下一级域名;最后,iburst参数配上的话可以减少上一级时钟源的资源开销,所以这里推荐给配置上。
(2)、server 127.127.1.0 iburst local clock:当本NTP服务器的上一级时钟源不可用时,使用自己时间作为客户端的时钟源。
(3)、restrict 192.168.137.0 mask 255.255.255.0 nomodify notrap nopeer:限制只允许那些客户端网段的客户端前来本NTP服务器时间同步,nomodify客户端不能修改NTP服务端的时钟相关参数、notrap本NTP服务器不作为客户端的日志记录、nopeer不允许客户端跟NTP服务器tratum层级相等。
(4)、fudge 127.0.0.1 stratum 10:设置本NTP的tratum层级(从1-15级,一般默认设置10级别即可);因为UTC时间是分层通过众多的时钟服务器逐级的往下传播时间的,即第一stratum层级的时钟服务器首先向UTC时间源同步时间,之后第一stratum层级的时钟源给第二stratum层级的时钟服务器同步时间,然后第二stratum层级的时钟源又给第三stratum层级的时钟服务器同步时间,以此类推;这里我们把自己的NTP服务器设置为比较靠后的层级即可(默认10级)。
#firewall-cmd --permanent --add-port=123/udp --permanent永久开放端口,避免重启失效
# firewall-cmd --reload --重新加载防火墙
#iptables -L -n --检查iptables规则列表是否也开放了123/udp端口
解释:centos7之后,操作系统防火墙的概念由以前的iptables变为firewall;且二者共用firewalld服务即之前的iptables服务已经集成到了firewalld服务中,所以在centos7之后运行systemctl status iptables.service提示找不到对应的服务;但是centos7之后的操作系统版本为了兼顾老工程师们对iptables防火墙的使用习惯,特意保留了iptables访问规则列表的配置;所以这里为了确保万无一失,最好也检查一下iptables的访问规则列表是否也开放了135/udp端口(但一般我们新建的虚拟机,其iptables 访问规则列表都是默认的,啥也没控制)。
#systemctl restart ntpd.service
#systemctl enable ntpd.service
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
211.138.200.209 .INIT. 16 u - 64 0 0.000 0.000 0.000
ns.pku.edu.cn .INIT. 16 u - 64 0 0.000 0.000 0.000
211.138.200.208 .INIT. 16 u - 64 0 0.000 0.000 0.000
nipper.paina.jp .INIT. 16 u - 64 0 0.000 0.000 0.000
send.mx.cdnetwo .INIT. 16 u - 64 0 0.000 0.000 0.000
*LOCAL(0) .LOCL. 5 l 52 64 1 0.000 0.000 0.000
解释:如果这步同步失败的话,很大原因为你没有给本NTP服务器指定DNS域名服务器,导致无法解析中国区的UTC时钟源域名(0-3.cn.pool.ntp.org),解决如下:
#vi /etc/resolv.conf --以贵州茅台为例,编辑该文件并填入如下DNS地址
nameserver 10.0.11.169
Nameserver 173.16.0.169
#nslookup --测试解析域名是否成功
>www.baidu.com --正向解析(域名解析为IP),以百度域名为例
Server: 10.0.11.169
Address: 10.0.11.169#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 14.215.177.39
Name: www.a.shifen.com
Address: 14.215.177.38
# date -R --查看同步后的系统时间
Fri, 15 Jul 2016 15:28:34 +0800
1、编辑客户端/etc/ntp.conf配置文件如下:
server 192.168.137.3 iburst
restrict 192.168.137.3 mask 255.255.255.0 nomodify notrap nopeer
解释:
2、客户端firewall防火墙无需开放123/udp端口(因为客户端是源端口,只要保证目的端口即服务器端开启123端口即可):
3、客户端重启ntp服务
#systemctl restart ntpd.service
4、设置客户端ntp服务开机启动
#systemctl enable ntpd.service
5、客户端时间同步测试
# date --查看客户端系统当前时间
Fri Jul 15 15:31:22 CST 2016
# ntpdate 192.168.137.3 --客户端向NTP服务器同步时间
15 Jul 15:33:04 ntpdate[63912]: step time server 192.168.137.3 offset -4.492463 sec
6、客户端设置计划任务,每天晚上1点向NTP服务器同步时间
#crontab -e
00 01 * * * root /usr/sbin/ntpdate 192.168.137.3; /sbin/hwclock -w
解释:
(1)、格式 00 01 * * * 五个字符表示 分 时 日 月 年
(2)、/sbin/hwclock -w 把系统时间写入bios时间
restrict 控制相关权限:
语法为: restrict IP地址 mask 子网掩码 参数(其中IP地址可以是default ,代表的是所有的IP地址)。
参数有以下几个:
ignore :关闭所有的 NTP 联机服务
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询:用户端不能使用ntpq,ntpc等命令来查询ntp服务器
notrap :不提供trap远端登陆:拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq 控制消息协议的子系统,用于远程事件日志记录程序。
nopeer :用于阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟
kod : 访问违规时发送 KoD 包(kiss of dead,是一种攻击方式)。
restrict -6 表示IPV6地址的权限设置。
server 设定NTP上一级时钟源
语法为:server 主机ip或域名 参数
参数有以下几个:
burst:When the server is reachable, send a burst of eight packets instead of the usual one. The packet spacing is nor‐mally 2 s; however, the spacing between the first and second packets can be changed with the calldelay command to allow additional time for a modem or ISDN call to complete. This option is valid only with the server command and type s addressesa. It is a recommended option when the maxpoll option is greater than 10 (1024 s).
iburst:When the server is unreachable, send a burst of eight packets instead of the usual one. The packet spacing is normally 2 s; however, the spacing between the first and second packets can be changed with the calldelay command to allow additional time for a modem or ISDN call to complete. This option is valid only with the server command and type s addresses. It is a recommended option with this command.
prefer:Mark the server as preferred. All other things being equal, this host will be chosen for synchronization among a set of correctly operating hosts. See the Mitigation Rules and the prefer Keyword page for further information. This option is valid only with the server and peer commands.
true:Mark the association to assume truechimer status; that is, always survive the selection and clustering algorithms. This option can be used with any association, but is most useful for reference clocks with large jitter on the serial port and precision pulse-per-second (PPS) signals. Caution: this option defeats the algorithms designed to cast out falsetickers and can allow these sources to set the system clock. This option is valid only with the server and peer commands.
例如:以下表示优先向192.168.7.49这部时钟源主机进行时间同步。
server 192.168.7.49 prefer
fudge 主机ip stratum 层数
这个配置主要用来设定本机作为为其他机器的时间源的时候,其层数为多少,层数必须在15层之内,一般取10。
fudge 127.0.0.1 stratum 10
一、ntp服务是什么
1. 定义
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
2. 发展
首次记载在Internet Engineering Note之中,其精确度为数百毫秒。
稍后出现了首个时间协议的规范RFC-778,它被命名为DCNET互联网时间服务,这种服务还是借助于Internet control Message Protocol (ICMP)中的时间戳和时间戳应答消息作为NTP。
名称的首次出现是在RFC-958之中,该版本也被称为NTP v0,其目的是为ARPA网提供时间同步;这时的NTP已脱离ICMP,作为独立协议运行,美国特拉华大学的David L.Mills主持了网络时间同步项目,成功的开发出了NTP协议的第1, 2, 3版:
v1:出现于1988年6月,在RFC-1059中描述了首个完整的NTP的规范和相关算法。这个版本已经采用了client/server模式以及对称操作,但是它不支持授权鉴别和NTP的控制消息。
v2:1989年9月推出了取代RFC-958和RFC-1059的NTP v2版本即RFC-1119。
v3:在1992 年3月,NTP v3版本RFC-1305问世,该版本总结和综合了NTP先前版本和DTSS,正式引入了校正原则,并改进了时钟选择和时钟滤波的算法,而且还引入了时间消息发送的广播模式,这个版本取代了NTP的先前版本。NTP v 3 发布后,一直在不断地进行改进,NTP实现的一个重要功能是对计算机操作系统的时钟调整。
v4:截止到2010年6月,最新的NTP版本是第4版(NTPv4),其标准化文档为 RFC 5905,它继承自RFC 1305所描述的NTP v3。网络时间同步技术也将向更高精度、更强的兼容性和多平台的适应性方向发展。网络时间协议NTP是用于互联网中时间同步的标准之一,它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.lms,在Internet上绝大多数的地方其精度可以达到1- 50ms.
值得提一下的是,简单的NTP(SNTP)version4已经在RFC2030描述了。
3. 主要结构
(1) 时间来源
现在的标准时间是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时),所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
(2) 传播
在NTP中,定义了时间按照服务器的等级传播,按照离外部UTC源远近将所有的服务器归入不同的Stratum(层)中,例如把通过GPS取得发送标准时间的服务器叫Stratum-1的NTP服务器,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础,这种阶梯式的架构示意图如下图所示:
计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转。
二、架构及安装
1. 架构
如上图所示,对于一些服务依赖于时间的集群(如hadoop集群),需要有一部主机作为ntp服务器,其他客户端主机从这部主机进行时间同步,另外ntp服务主机从更高一层的服务器获得时间信息。