NTP介绍

  • NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC(Universal Time Coordinated,世界协调时),UTC 是由原子钟报时的国际标准时间,而 NTP 获得 UTC 的时间来源可以是原子钟、天文台、卫星,也可从 Internet 上面获取。其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。 补充知识:抢票软件等就是提前发送已知的数据包,时间一到服务器开始接受就会第一时间抢到。 NTP 服务器就是利用 NTP 协议提供时间同步服务的。

NTP服务器顾名思义就是时间同步服务器(Network Time Protocol),Linux下的ntp服务器配置相对来说都比较容易,但在Linux下有一个弊端,不同时区或者说是时间相差太大的无法同步,所以在配置ntp服务器之前需要把时间配置成相同的。

NTP时钟同步C/S模式

NTP服务器作用

  • 产生与处理系统是各种计算设备集群的,计算设备将统一、同步的标准时间用于记录各种事件发生时序,如E-MAIL信息、文件创建和访问时间、数据库处理时间等。
  • 系统内不同计算设备之间控制、计算、处理、应用等数据或操作都具有时序性,若计算机时间不同步,这些应用或操作或将无法正常进行。
  • 系统是对时间敏感的计算处理系统,时间同步是大数据能够得到正确处理的基础保障,是大数据得以发挥作用的技术支撑。
  • 大数据时代,整个处理计算系统内的大数据通信都是通过网络进行,时间同步也是如此,利用大数据的互联网络传送标准时间信息,实现大数据系统内时间同步。

NTP时钟同步方式说明
NTP在linux下有两种时钟同步方式,分别为直接同步和平滑同步:

  • 直接同步

  使用ntpdate命令进行同步,直接进行时间变更。如果服务器上存在一个12点运行的任务,当前服务器时间是13点,但标准时间时11点,使用此命令可能会造成任务重复执行。因此使用ntpdate同步可能会引发风险,因此该命令也多用于配置时钟同步服务时第一次同步时间时使用。

  • 平滑同步

  使用ntpd进行时钟同步,可以保证一个时间不经历两次,它每次同步时间的偏移量不会太陡,是慢慢来的,这正因为这样,ntpd平滑同步可能耗费的时间比较长。

ntpd、ntpdate的区别

  • 使用之前得弄清楚一个问题,ntpd与ntpdate在更新时间时有什么区别。ntpd不仅仅是时间同步服务器,他还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行。
  • 时钟的跃变,对于某些程序会导致很严重的问题。许多应用程序依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线性的,一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,这有几个非常明显的问题:
  • 第一,这样做不安全。ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。
  • 第二,这样做不精确。一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。
  • 第三,这样做不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。
  • 因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。
  • NTPD 在和时间服务器的同步过程中,会把 BIOS 计时器的振荡频率偏差——或者说 Local Clock 的自然漂移(drift)——记录下来。这样即使网络有问题,本机仍然能维持一个相当精确的走时。

注意:NTP 也存在一定局限性,如果系统时间比正确的时间要快的话,NTP 是不会帮你做调整的,而且当你的时间设置和正确的时间相差很大的时候,NTP 会花上很长一段时间进行同步调整。此外,当本地时间与标准时间相差30分钟以上时, ntpd 会停止工作

环境准备

属性 NTP服务器 NTP客户端
节点 wencheng-1 wencheng-2
系统 CentOS Linux release 7.5.1804 (Minimal) CentOS Linux release 7.5.1804 (Minimal)
内核 3.10.0-862.el7.x86_64 3.10.0-862.el7.x86_64
SELinux setenforce 0 | disabled setenforce 0 | disabled
Firewlld systemctl stop/disabled firewalld systemctl stop/disabled firewalld
IP地址 172.16.70.185 172.16.70.186

NTP服务器操作步骤

  • 1.确认wencheng-1节点是否安装ntp,并修改时区。
[root@wencheng-1 ~]# rpm -qa |  grep ntp
[root@wencheng-1 ~]# yum install -y ntp
[root@wencheng-1 ~]# rpm -qa | grep ntp
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
ntp-4.2.6p5-29.el7.centos.2.x86_64
[root@wencheng-1 ~]# systemctl start ntpd
[root@wencheng-1 ~]# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-03-25 01:09:13 EDT; 1 months 16 days ago
Process: 8716 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 8717 (ntpd)
CGroup: /system.slice/ntpd.service
└─8717 /usr/sbin/ntpd -u ntp:ntp -g Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 2 lo 127.0.0.1 UDP 123
Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 3 ens33 172.16.70.185 UDP 123
Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 4 lo ::1 UDP 123
Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 5 ens33 fe80::20c:29ff:fe7f:222b UDP 123
Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listening on routing socket on fd #22 for interface updates
Mar 25 01:09:13 wencheng-1 ntpd[8717]: 0.0.0.0 c016 06 restart
Mar 25 01:09:13 wencheng-1 ntpd[8717]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Mar 25 01:09:13 wencheng-1 ntpd[8717]: 0.0.0.0 c011 01 freq_not_set
Mar 25 01:09:20 wencheng-1 ntpd[8717]: 0.0.0.0 c61c 0c clock_step +4075317.470688 s
May 11 05:11:18 wencheng-1 ntpd[8717]: 0.0.0.0 c614 04 freq_mode [root@wencheng-1 ~]# netstat -ntplu | grep ntp
udp 0 0 172.16.70.185:123 0.0.0.0:* 11655/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 11655/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 11655/ntpd
udp6 0 0 fe80::20c:29ff:fe7f:123 :::* 11655/ntpd
udp6 0 0 ::1:123 :::* 11655/ntpd
udp6 0 0 :::123 :::* 11655/ntpd [root@wencheng-1 ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service. [root@wencheng-1 ~]# timedatectl set-timezone Asia/Shanghai
[root@wencheng-1 ~]# timedatectl
Local time: Tue 2021-05-11 17:16:10 CST
Universal time: Tue 2021-05-11 09:16:10 UTC
RTC time: Thu 2021-03-25 05:04:14
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
  • 2.wencheng-1修改文件 /etc/ntp.conf。
[root@wencheng-1 ~]# mv /etc/ntp.conf /etc/ntp.conf_bak
[root@wencheng-1 ~]# vim /etc/ntp.conf
# 新增一下内容
# --------------------------------------
##记录和上级时间服务器的时间差异.
driftfile /var/lib/ntp/drift ##新增:日志目录.
logfile /var/log/ntpd.log restrict default nomodify
##参数解释
## restrict可以限制客户端权限,可以使用的 parameter说明:
## kod kod技术可以阻止“Kiss of Death “包对服务器的破坏
## nomodity client可通过ntp进行时间同步,但不能通过 ntpq, ntpc 等更改server参数
## notrap 不提供trap远程登陆 (remote event logging) 功能
## nopeer 不与其它同一层的ntp server进行时间同步
## noquery 客户端不能够使用 ntpq, ntpc 等指令来查询时间服务器,即拒绝ntp时间同步;
## notrust 拒绝无认证的client
## ignore 拒绝所有连接到ntp server的请求
## 如果出现问题,可能是ipv6配置出错,可以尝试添加restrict -6 default kod nomodify notrap nopeer noquery #针对ipv6设置
## 或者修改默认为restrict -4 default nomodify notrap nopeer noquery ##打开允许本地所有操作
restrict 127.0.0.1
restrict ::1 restrict 172.16.0.0 mask 255.255.255.0 nomodify notrap
## restrict 用来分配指定网段权限,格式如下:
## restrict [授权同步的网段] mask [netmask] [parameter]
##这一行的含义是授权172.16.0.0网段上的所有机器可以从这台机器上查询和同步时间. ##新增:时间服务器列表.
server time1.aliyun.com
server time2.aliyun.com
server time3.aliyun.com prefer
##参数解释
## server 用来设置上一级ntp服务器,这里使用阿里云提供的ntp服务器,parameter说明:
## prefer 最高优先级
## burst 当一个运程NTP服务器可用时,向它发送一系列的并发包进行检测。
## iburst 当一个运程NTP服务器不可用时,向它发送一系列的并发包进行检测。 # 如果无法与上层ntp server通信以本地时间为标准时间
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10 includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
# ------------------------------------------
  • 3.ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件
[root@wencheng-1 ~]# mv /etc/sysconfig/ntpd /etc/sysconfig/ntpd_bak
[root@wencheng-1 ~]# vim /etc/sysconfig/ntpd
# 添加一下内容
# -------------------------------------------
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"
# 设置是否同步到硬件时间
SYNC_HWCLOCK=yes
# Additional options for ntpdate 默认选项为-g
NTPDATE_OPTIONS="-g"
# -------------------------------------------
  • 4.验证与状态检查
[root@wencheng-1 ~]# systemctl restart ntpd
[root@wencheng-1 ~]# netstat -ntplu | grep ntp
udp 0 0 172.16.70.185:123 0.0.0.0:* 11655/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 11655/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 11655/ntpd
udp6 0 0 fe80::20c:29ff:fe7f:123 :::* 11655/ntpd
udp6 0 0 ::1:123 :::* 11655/ntpd
udp6 0 0 :::123 :::* 11655/ntpd [root@wencheng-1 ~]# ntpstat
synchronised to NTP server (203.107.6.88) at stratum 3
time correct to within 479 ms
polling server every 64 s
注意:此命令出现上述synchronised结果比较慢,都等待几分钟。 [C:\~]$ ping time3.aliyun.com    # 验证文件/etc/ntp.conf的server time3.aliyun.com prefer对应IP地址
正在 Ping ntp.aliyun.com [203.107.6.88] 具有 32 字节的数据:
来自 203.107.6.88 的回复: 字节=32 时间=40ms TTL=51
来自 203.107.6.88 的回复: 字节=32 时间=40ms TTL=51
来自 203.107.6.88 的回复: 字节=32 时间=44ms TTL=51
来自 203.107.6.88 的回复: 字节=32 时间=41ms TTL=51
203.107.6.88 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 40ms,最长 = 44ms,平均 = 41ms [root@wencheng-1 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*203.107.6.88 10.137.38.86 2 u 66 64 377 39.198 5.282 2.988
LOCAL(0) .LOCL. 10 l 531 64 0 0.000 0.000 0.000 ntpq -p 参数详解
remote :本地主机所连接的上层NTP服务器,最左边的符号如下:
如果有[*] 代表目前正在使用当中的上层NTP服务器。
如果有[+] 代表也有连上上层NTP服务器,可以作为提高时间更新的候选NTP服务器
如果有[-] 代表同步的该NTP服务器被认为是不合格的NTP Server
如果有[x] 代表同步的外网NTP服务器不可用
refid :指的是给上层NTP服务器提供时间校对的服务器。
St:上层NTP服务器的级别。
When: 上一次与上层NTP服务器进行时间校对的时间(单位:s)
Poll :本地主机与上层NTP服务器进行时间校对的周期(单位:s)
reach:八进制数,表示最近8次时钟同步包接收情况(1表示接收成功,0表示接收失败。每接收一个包左移一位。对于一个运行较长时间的NTP client而言,这个值应该是377->11,111,111,即最近8次包接收均成功;否则表示有丢包情况发生).
delay:网络传输过程当中延迟的时间,单位为 10^(-6) 秒
offset:时间补偿的结果,单位为10^(-6) 秒
jitter:Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。

 NTP客户端操作步骤。

  • 1.确认是否安装ntp,并修改时区。
[root@wencheng-2 ~]# yum install -y ntp
[root@wencheng-1 ~]# rpm -qa | grep ntp
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
ntp-4.2.6p5-29.el7.centos.2.x86_64 [root@wencheng-2 ~]# timedatectl set-timezone Asia/Shanghai
[root@wencheng-2 ~]# date -s "2020-10-10 10:10"    #预设置错误的时间
[root@wencheng-2 ~]# timedatectl
Local time: Sat 2020-10-10 10:16:35 CST
Universal time: Sat 2020-10-10 02:16:35 UTC
RTC time: Wed 2021-05-12 04:18:08
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
  • 2.修改文件/etc/ntp.conf,主要修改Server选择部分。
[root@wencheng-2 ~]# cp /etc/ntp.conf /etc/ntp.conf_bak
[root@wencheng-2 ~]# vim /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst #注释所有centos.pool.ntp,再新增
server 172.16.70.185 frefer
fudge 172.16.70.185 stratum 10
  • 3.验证与状态检查
[root@wencheng-2 ~]# systemctl start ntpd
[root@wencheng-2 ~]# systemctl enable ntpd [root@wencheng-2 ~]# netstat -nutpl | grep ntp
udp 0 0 172.16.70.186:123 0.0.0.0:* 9088/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 9088/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 9088/ntpd
udp6 0 0 fe80::20c:29ff:fef6:123 :::* 9088/ntpd
udp6 0 0 ::1:123 :::* 9088/ntpd
udp6 0 0 :::123 :::* 9088/ntpd [root@wencheng-2 ~]# ntpstat
synchronised to NTP server (172.16.70.185) at stratum 4
time correct to within 76 ms
polling server every 256 s [root@wencheng-2 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*172.16.70.185 203.107.6.88 3 u 253 256 377 0.312 1.557 0.997 [root@wencheng-2 ~]# timedatectl
Local time: Wed 2021-05-12 14:24:30 CST
Universal time: Wed 2021-05-12 06:24:30 UTC
RTC time: Wed 2021-05-12 06:24:30
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
  • 4.添加时间同步计划任务。
[root@wencheng-2 ~]# vim /etc/cron.d/ntp
# 每两个小时同步一次,并修改硬件时间
0 */2 * * * /usr/sbin/ntpdate 172.16.70.185 && /usr/sbin/hwclock -w &>/dev/null

至此,NTP服务器构建,并完成客户端时间同步!

 
 
 
 
 
 

Linux集群环境下NTP服务器时间同步的更多相关文章

  1. CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案

    CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...

  2. 在Hadoop1.2.1分布式集群环境下安装hive0.12

    在Hadoop1.2.1分布式集群环境下安装hive0.12 ● 前言: 1. 大家最好通读一遍过后,在理解的基础上再按照步骤搭建. 2. 之前写过两篇<<在VMware下安装Ubuntu ...

  3. 在tomcat集群环境下redis实现分布式锁

    上篇介绍了redis在集群环境下如何解决session共享的问题.今天来讲一下如何解决分布式锁的问题 什么是分布式锁? 分布式锁就是在多个服务器中,都来争夺某一资源.这时候我们肯定需要一把锁是不是 , ...

  4. 分布式集群环境下,如何实现session共享一(应用场景)

    在web应用中,由于http的请求响应式,无状态.要记录用户相关的状态信息,比如电商网站的购物车,比如用户是否登录等,都需要使用session.我们知道session是由servlet容器创建和管理, ...

  5. 分布式集群环境下,如何实现session共享四(部署项目测试)

    这是分布式集群环境下,如何实现session共享系列的第四篇.在上一篇:分布式集群环境下,如何实现session共享三(环境搭建)中,已经准备好了相关的环境:tomcat.nginx.redis.本篇 ...

  6. 分布式集群环境下,如何实现session共享三(环境搭建)

    这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...

  7. quartz在集群环境下的最终解决方案

    在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB . 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVI ...

  8. 集群环境下,Session管理的几种手段

    集群环境下,Session管理的几种手段 1.Session复制 缺点:集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源. 由于所有用户的Session信息在每台服务器上都 ...

  9. Redis集群环境下的键值空间监听事件实现方案

    一直想记录工作中遇到的问题和解决的方法,奈何没有找到一方乐土,最近经常反思,是否需要记录平时的点滴,后台还是决定下定决心记录一些,以便以后用到的时候找不着,实现这样的一个功能主要也是业务所需要的. 需 ...

随机推荐

  1. 【Linux】在centos中使用命令安装redis

    1.前提centos能够上网 测试方式输入命令,有数据返回即可.如果则先配置centos网络连接. ping www.baidu.com 2.安装gcc 输入命令进行安装 yum install gc ...

  2. Python数模笔记-Sklearn(5)支持向量机

    支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...

  3. 使用BeanUtils.copyProperties踩坑经历

    1. 原始转换 提起对象转换,每个程序员都不陌生,比如项目中经常涉及到的DO.DTO.VO之间的转换,举个例子,假设现在有个OrderDTO,定义如下所示: public class OrderDTO ...

  4. C++知识概要

    static的用法和作用 在全局变量前加上关键字 static,全局变量就定义成一个全局静态变量.存储在静态存储区,在整个程序运行期间一直存在.同时全局静态变量在声明他的文件之外是不可见的 在局部变量 ...

  5. CentOS8.2集成的megaraid_sas版本不支持IBM X3850 X5内置RAID卡。需要更新https://docs.broadcom.com/docs/MR_LINUX_DRIVER_7.15-07.715.02.00-1-PUL.tgz

    CentOS8.2集成的megaraid_sas版本不支持IBM X3850 X5内置RAID卡.需要更新https://docs.broadcom.com/docs/MR_LINUX_DRIVER_ ...

  6. linux服务器市场特性高可用高性能 (集群上体现)安全

    https://www.linuxprobe.com/chapter-00.html 1 linux安全 更安全 对比windows  代码漏洞 及时修补 全世界看到源代码 2 linux 可以卸载图 ...

  7. Web网站实现用户认证访问(加密访问)

    Web网站实现用户认证访问,有效减少流量的访问,具体的实现步骤如下: 我们使用httpd作为测试对象,体现安装好httpd服务,并且可以在浏览器访问测试首页(可以关闭防火墙:如果不关闭防火墙,则需要开 ...

  8. Linux 压缩包管理

    压缩打包 格式 压缩工具 .zip zip压缩工具 .gz gzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用) .bz2 bzip2压缩工具,只能压缩文件,会删除源文件(通常配合tar ...

  9. MyBatis 回顾 JDBC(一)

    引言 学过 Java 的童鞋都知道,在 Java 中只有 JDBC 可以访问数据库,但是只要使用过 JDBC 的同学肯定也感受到 JDBC 访问数据库的繁琐, 需要编写大量的代码,经历一系列的步骤. ...

  10. java_[类加载器]

    Class 与 类加载 Class对象由JVM自动产生,每当一个类被加载时,JVM就自动为其生成一个Class对象,通过Class对象可以获得类的相关信息. 将类信息读到内存中过程,称为类加载 Jav ...