Linux时间同步

时间同步

大数据产生与处理系统是各种计算设备集群的,计算设备将统一、同步的标准时间用于记录各种事件发生时序

如E-MAIL信息、文件创建和访问时间、数据库处理时间等。

大数据系统内不同计算设备之间控制、计算、处理、应用等数据或操作都具有时序性,若计算机时间不同步,

这些应用或操作或将无法正常进行

网络时间同步协议(NTP)是时间同步的技术基础。

多主机协作工作时,各个主机时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等, 利用NTP(Network Time Protocol) 协议使网络中的各个计算机时间达到同步。

Linux默认情况下,系统时间和硬件时间,并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠Bios电池来维持,而系统时间,是用CPU tick来维持的。在系统开机的时候,会自动从Bios中取得硬件时间,设置为系统时间。

Linux系统下,一般使用ntp服务器 来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。

时间同步实现:ntpdate,ntp,chrony

公共NTP服务器地址及IP

pool.ntp.org:项目是一个提供可靠易用的NTP服务的虚拟集群

  • cn.pool.ntp.org,0-3.cn.pool.ntp.org

阿里云公共NTP服务器

  • Unix/linux类:ntp.aliyun.com,ntp1-7.aliyun.com

  • windows类: time.pool.aliyun.com

全球标准时间同步服务网站:http://www.pool.ntp.org/zone/cn

  • 中国时间:cn.pool.ntp.org

 210.72.145.44 (国家授时中心服务器IP地址)  
 133.100.11.8 日本 福冈大学  
 time-a.nist.gov 129.6.15.28 NIST, Gaithersburg, Maryland  
 time-b.nist.gov 129.6.15.29 NIST, Gaithersburg, Maryland  
 time-a.timefreq.bldrdoc.gov 132.163.4.101 NIST, Boulder, Colorado  
 time-b.timefreq.bldrdoc.gov 132.163.4.102 NIST, Boulder, Colorado  
 time-c.timefreq.bldrdoc.gov 132.163.4.103 NIST, Boulder, Colorado  
 utcnist.colorado.edu 128.138.140.44 University of Colorado, Boulder  
 time.nist.gov 192.43.244.18 NCAR, Boulder, Colorado  
 time-nw.nist.gov 131.107.1.10 Microsoft, Redmond, Washington  
 nist1.symmetricom.com 69.25.96.13 Symmetricom, San Jose, California  
 nist1-dc.glassey.com 216.200.93.8 Abovenet, Virginia  
 nist1-ny.glassey.com 208.184.49.9 Abovenet, New York City  
 nist1-sj.glassey.com 207.126.98.204 Abovenet, San Jose, California  
 nist1.aol-ca.truetime.com 207.200.81.113 TrueTime, AOL facility, Sunnyvale, California  
 nist1.aol-va.truetime.com 64.236.96.53 TrueTime, AOL facility, Virginia  
 ————————————————————————————————————  
 ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)  
 s1a.time.edu.cn 北京邮电大学  
 s1b.time.edu.cn 清华大学  
 s1c.time.edu.cn 北京大学  
 s1d.time.edu.cn 东南大学  
 s1e.time.edu.cn 清华大学  
 s2a.time.edu.cn 清华大学  
 s2b.time.edu.cn 清华大学  
 s2c.time.edu.cn 北京邮电大学  
 s2d.time.edu.cn 西南地区网络中心  
 s2e.time.edu.cn 西北地区网络中心  
 s2f.time.edu.cn 东北地区网络中心  
 s2g.time.edu.cn 华东南地区网络中心  
 s2h.time.edu.cn 四川大学网络管理中心  
 s2j.time.edu.cn 大连理工大学网络中心  
 s2k.time.edu.cn CERNET桂林主节点  
 s2m.time.edu.cn 北京大学

系统时间相关文件

`/usr/share/zoneinfo/:在这个目录下的文件其实是规定了各主要时区的时间设定文件,例如北京地区的时区设定文件在 /usr/share/zoneinfo/Asia/Beijing 就是了。这个目录里面的文件与底下要谈的两个文件(clock 与localtime)是有关系的。

/etc/sysconfig/clock:这个是 linux 的主要时区设定文件。每次开机后,Linux 会自动的读取这个文件来设定自己系统所默认要显示的时间。

`/etc/localtime:这个文件就是“本地端的时间配置文件”。刚刚那个clock 文件里面规定了使用的时间设置文件(ZONE) 为 /usr/share/zoneinfo/Asia/Beijing ,所以说,这就是本地端的时间了,此时, Linux系统就会将Beijing那个文件另存为一份 /etc/localtime文件,所以未来我们的时间显示就会以Beijing那个时间设定文件为准。

/etc/timezone:系统时区文件

时间同步原理:

Linux 时间同步 ntpd、ntpdate的区别

ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,

并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行。

时钟的跃变,对于某些程序会导致很严重的问题。

许多应用程序依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线性的,

一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。

不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,

这有几个非常明显的问题:

【一】这样做不安全。

ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。

由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。

【二】这样做不精确。

一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。

与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。

【三】这样做不够优雅。

由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错

(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。

因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。

其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。

NTPD在和时间服务器的同步过程中,会把BIOS计时器的振荡频率偏差——或者说Local Clock的自然漂移(drift)——记录下来。

这样即使网络有问题,本机仍然能维持一个相当精确的走时。

Linux 时间同步 ntpdate时间同步 尽量不要用这个

ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响。比 如sleep,timer等。而且,ntpd服务可以在修正时间的同时,修正cpu tick。

理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。

安装ntpdate

 yum -y install ntpdate

修改/etc/sysconfig/ntpdate

让ntpdate每次同步时间之后把时间写入hwclock,相当于命令hwclock -w

 sed -i 's/SYNC_HWCLOCK=no/SYNC_HWCLOCK=yes/' /etc/sysconfig/ntpdate

使用ntpdate手动时间同步

 ntpdate 210.72.145.44

设置定期同步,在crontab中添加

 0 12 * * * * /usr/sbin/ntpdate 192.168.0.1

格式

 ntpdate [-nv] [NTP IP/hostname]

Linux 时间同步 ntp时间同步

注意:

ntpd服务在不同时区或者时间相差太大无法同步,所以在配置ntp服务器之前需要先使用ntpdate手动同步。

ntpd服务监听UDP:123,注意防火墙放行。

ntpd服务启动后,不能手动运行ntpdate更新时间(会报端口被占用),无法使用 timedatectl set-time HH:MM:SS 设置时间(想要使用除了关闭ntpd服务,还要禁用NTP时间同步timedatectl set-ntp false)。

将系统时钟和世界协调时UTC同步,精度在局域网内可达0.1ms,在互联网上绝大多数的地方精度可以达到1-50ms。

项目官网:http://www.ntp.org

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

ntpd服务运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.

配置与外部时间服务器进行时间同步的客户端主机

server:10.0.0.61

client: 10.0.0.31,41,51

 

 

服务端(server)修改ntpd配置文件 /etc/ntp.conf

 yum -y install ntp
 #centos6 启动
 /etc/rc.d/init.d/ntpd      
 #centos7 8 启动
 systemctl start ntpd
 systemctl enable ntpd  
 # restrict default nomodify notrap nopeer noquery   # 注释掉此行,允许其他客户端主机同步此time server主机
 server 172.16.0.1 iburst
 # server 1.centos.pool.ntp.org iburst      # 注释掉此行
 # server 1.centos.pool.ntp.org iburst      # 注释掉此行
 # server 1.centos.pool.ntp.org iburst      # 注释掉此行
 restrict 172.16.1.0 mask 255.255.255.0 nomodify noztrap  # 允许集群所在网段同步此time server主机
 server 210.72.145.44 prefer  # 这是中国国家授时中心的IP
 server ntp1.aliyun.com iburst                            # iburst 加快时间同步
 server ntp2.aliyun.com iburst 
 server 127.0.0.1              # local clock
 fudge 127.0.0.0 stratum 10**
 systemctl restart ntpd
 [root@centos7 ~]# ntpq -p  #查看与172.16.0.1同步

client: 10.0.0.31,41,51

客户端修改ntp配置文件 /etc/ntp.conf

 vim /etc/ntp.conf
 server 10.0.0.61 iburst        # 注释掉其他的,添加要同步时间的客户端主机ip

2、启动ntpd服务,并设置为开机启动

 systemctl start ntpd
 systemctl enable ntpd

验证查看

 [root@linux ~]# ntpq -p          # 查看时间同步状态,查看ntp服务器有无和上层ntp连通

ntp服务器配置完毕后,需要等待5-10分钟才能与/etc/ntp.conf中配置的标准时间进行同步。

 [root@linux ~]# ntptrace –n 127.0.0.1  # 列出目前NTP服务器(第一层)与上层NTP服务器(第二层)彼此之间的关系
 ntpq -p  查看网络中的NTP服务器,查看ntp服务器与上层ntp的状态
          remote:本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先
          refid:参考上一层ntp主机地址
          st:stratum阶层
          when:上次更新在多少秒前,指出从轮询源开始已过去的时间(秒)。
          poll:下次更新在多少秒后,指出轮询间隔时间。该值会根据本地时钟的精度相应增加。
          reach:是一个八进制数字,指出源的可存取性。已经向上层ntp服务器要求更新的次数
          delay:网络延迟
          offset:时间补偿,是源时钟与本地时钟的时间差(毫秒)。
          jitter:系统时间与bios时间差

/etc/ntp.conf 配置详解

 # 1. 先处理权限方面的问题,包括放行上层服务器以及开放局域网用户来源:
 restrict default kod nomodify notrap nopeer noquery     # 拒绝所有 IPv4 的用户
 restrict -6 default kod nomodify notrap nopeer noquery  # 拒绝所有 IPv6 的用户
 restrict 220.130.158.71   # 放行 tock.stdtime.gov.tw 进入本 NTP 的服务器
 restrict 59.124.196.83    # 放行 tick.stdtime.gov.tw 进入本 NTP 的服务器
 restrict 59.124.196.84    # 放行 time.stdtime.gov.tw 进入本 NTP 的服务器
 restrict 127.0.0.1        # 默认,放行本机来源
 restrict -6 ::1           # 默认,放行本机来源 IPv6
 restrict 192.168.100.0 mask 255.255.255.0 nomodify      # 放行局域网用户来源,或者列出单独IP
 # 2. 设定主机来源,请先将原本的 [0|1|2].centos.pool.ntp.org 的设定批注掉:
 server 220.130.158.71 prefer  # 以这部主机为最优先的server
 server 59.124.196.83
 server 59.124.196.84
 # 3.默认的一个内部时钟数据,用在没有外部 NTP 服务器时,使用它为局域网用户提供服务:
 # server 127.127.1.0             # local clock
 # fudge 127.127.1.0 stratum 10
 # 4.预设时间差异分析档案与暂不用到的 keys 等,不需要更动它:
 driftfile /var/lib/ntp/drift  #系统时间与BIOS事件的偏差记录
 keys     /etc/ntp/keys

===restrict选项格式===

restrict [ 客户端IP ] mask [ IP掩码 ] [参数]

“客户端IP” 和 “IP掩码” 指定了对网络中哪些范围的计算机进行控制,如果使用default关键字,则表示对所有的计算机进行控制,参数指定了具体的限制内容,没有参数表示该 IP (或网域)"没有任何限制",常见的参数如下:

  ignore:拒绝连接到NTP服务器
  nomodiy: 客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
  noquery: 不提供客户端的时间查询
  notrap: 不提供trap远程登录功能,trap服务是一种远程时间日志服务。
  notrust: 客户端除非通过认证,否则该客户端来源将被视为不信任子网
  nopeer: 提供时间服务,但不作为对等体。
  kod: 向不安全的访问者发送Kiss-Of-Death报文。
 restrict -6 表示IPV6地址的权限设置。

===server选项格式===

server host [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]

其中host是上层NTP服务器的IP地址或域名,随后所跟的参数解释如下所示:

  key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。
  version: 表示发往上层服务器的报文使用的版本号,n默认是3,可以是1或者2。
  prefer: 如果有多个server选项,具有该参数的服务器优先使用。
  mode: 指定数据报文mode字段的值。
  minpoll: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。
 maxpoll: 指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。
 iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。

===层次(stratum)===

stratum根据上层server的层次而设定(+1)。

对于提供network time service provider的主机来说,stratum的设定要尽可能准确。

而作为局域网的time service provider,通常将stratum设置为10

0层的服务器采用的是原子钟、GPS钟等物理设备,stratum 1与stratum 0 是直接相连的,

往后的stratum与上一层stratum通过网络相连,同一层的server也可以交互。

ntpd对下层client来说是service server,对于上层server来说它是client。

ntpd根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。所有的配置都在/etc/ntp.conf文件中。

Linux 时间同步 chrony时间同步

实现NTP协议的的自由软件。可使系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘的手动输入进行同步。还可以作为NTPv4(RFC 5905)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。通过Internet同步的两台机器之间的典型精度在几毫秒之内,在LAN上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度。

chrony 的优势:

  • 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天 24 小时运行的虚拟计算机而言非常有用。

  • 能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用。

  • 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响。

  • 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性。

  • 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟。

chrony官网:https://chrony.tuxfamily.org chrony官方文档:https://chrony.tuxfamily.org/documentation.html

chrony包介绍

两个主要程序:

  • chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。

  • chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可在一台不同的远程计算机上工作。

服务unit文件: /usr/lib/systemd/system/chronyd.service

监听端口: 323/udp,123/udp

配置文件: /etc/chrony.conf

同步自身服务器

 systemctl stop firewalld
 systemctl enable firewalld
 sed -i s'/SElinux=enabling/SElinux=disabled'/etc/selinux/config
 安装chrony
 yum -y install chrony
 确认软件是否成功安装
 yum list|grep chrony
 .查看软件的文件列表
 rpm -qc chrony
 rpm -ql chrony
 systemctl start chronyd
 systemctl enable chronyd
 date -s "2020-10-10 10:10:10"
 vim /etc/chrony.conf
 server 210.72.145.44 iburst      # 这是中国国家授时中心的IP
 server cn.ntp.org.cn iburst                   #中国
 systemctl restart chronyd
 date/timedatectl        #查看时间是否同步

临时指定NTP服务器

 chronyd -q "server cn.ntp.org.cn iburst"

注:centos7 NTP和chrony都可使用

centos8只能使用chrony

一次修改以后,再次修改过段时间会自身同步

centos8配置时间同步服务器

 关闭防火墙和selinux
 配置软件仓库
 软件三部曲
     a.安装软件
     b.确认软件是否成功安装
     c.查看软件的文件列表(配置文件,程序本身,man手册)
 4.了解配置文件(man 5xxx.conf)
 5根据需求通过修改配置文件来完成服务搭建
 6.启动服务,开机自启动
 7,测试验证

时间同步服务器服务端:10.0.0.61 m01

 
systemctl stop firewalld
 systemctl enable firewalld
 sed -i s'/SElinux=enabling/SElinux=disabled'/etc/selinux/config
 安装chrony
 yum -y install chrony
 确认软件是否成功安装
 yum list|grep chrony
 .查看软件的文件列表
 rpm -qc chrony
 rpm -ql chrony
 systemctl start chronyd
 systemctl enable chronyd
 修改配置文件
 vim /etc/chrony.conf
 server cn.ntp.org.cn iburst 
 server ntp1.aliyun.com iburst    # iburst代表快速同步时间
 server ntp2.aliyun.com iburst 
 allow 172.16.1.0/24            # 允许此IP地址段访问
 allow 0.0.0.0/0                  # 允许所有主机访问
 local stratum 10                 # 本地局域网同步时间服务器(第十层的局域网主机),打开注释即可。 
 systemctl restart chrony
 在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件内。
 remote: 它指的就是本地机器所连接的远程NTP服务器
 refid: 它指的是给远程服务器(e.g. 193.60.199.75)提供时间同步的服务器
 NTP ---->123/UDP
 netstat -tnupl|grep chronyd

客户端:

centos7 10.0.0.200

其他客户端只需要与代表的客户端(即与服务器端时间同步的客户端主机)进行同步即可

修改chronyd配置文件 /etc/chrony.conf

 date -s "+2 years"
 systemctl stop firewalld
 systemctl enable firewalld
 sed -i s'/SElinux=enabling/SElinux=disabled'/etc/selinux/config
 安装chrony
 yum -y install chrony
 确认软件是否成功安装
 yum list|grep chrony
 .查看软件的文件列表
 rpm -qc chrony
 rpm -ql chrony
 systemctl start chronyd
 systemctl enable chronyd
 yum -y install chrony
 systemctl start chronyd
 systemctl enable chronyd
 [root@centos7 ~]# route del default gw 10.0.0.2
 [root@centos7 ~]# ping www.baidu.com
 ping: www.baidu.com: Name or service not known
 [root@centos7 ~]#vim /etc/chrony.conf
 server 10.0.0.61 iburst    # 删掉其他的,添加要同步时间的客户端主机ip
 [root@centos7 ~]# systemctl restart chronyd
 [root@centos7 ~]# chronyc sources -y  #查看同步情况
 date/timedatectl  具体查看时间是否修改成功

2、启动chronyd服务,并设置为开机启动。

 systemctl start chronyd
 systemctl enable chronyd

chronyc命令

 chronyc -a makestep      立即手工同步
         accheck          检查是否对特定主机可访问当前服务器
         activity         显示有多少NTP源在线/离线
         sources [-v]     显示当前时间源的同步信息
         sourcestats [-v] 显示当前时间源的同步统计信息
         add server       手动添加一台新的NTP服务器
         clients          报告已访问本服务器的客户端列表
         delete           手动移除NTP服务器或对等服务器
         settime          手动设置守护进程时间
         tracking         显示系统时间信息

chrony配置文件详解

server 可以多次用于添加时钟服务器,必须以"server "格式使用。可添加多个服务器

iburst 可加快初始同步速度 driftfile - 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中。 rtcsync - 启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC) allow / deny - 指定一台主机、子网,或者网络以允许或拒绝访问本服务器 cmdallow / cmddeny - 可以指定哪台主机可以通过chronyd使用控制命令 bindcmdaddress - 允许chronyd监听哪个接口来接收由chronyc执行的命令 makestep - 通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。 local stratum 10 - 即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端

 timedatectl set-ntp true/false  #临时开启/关闭ntp服务
 [root@centos7 ~]# ll /etc/localtime
 lrwxrwxrwx. 1 root root 35 Nov 15 00:59 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
 [root@centos7 ~]# rm -rf /etc/localtime
 [root@centos7 ~]# ln -s .. ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 ln: target ‘/etc/localtime’ is not a directory
 #写脚本同步时区
 [root@centos7 ~]# ln -s  ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 [root@centos7 ~]# date

  

 

 

 

posted @ 2021-02-09 23:17  上善若水~小辉  阅读(2291)  评论(0编辑  收藏  举报