Linux 时间同步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 时间同步相关的知识,希望对你有一定的参考价值。

参考技术A

在Linux系统中存在两个时钟时间,分别是

硬件时钟是指的在主板上的时钟设备,也就是通常可以在Bios画面设置的时钟,即使关机状态也可以计算时间。

而系统时钟则是指Kernel中的时钟,其值是由1970年1月1日00:00:00 UTC时间至当前时间所经历的秒数总和。当Linux启动的时候,系统时钟会读取硬件时钟的设定,之后系统时钟独立运作。长时间运行两者可能将会产生误差。另外所有的Linux相关指令都是读取系统时钟指定的,如date。

我们这里讨论的是系统时间。

NTP,网络时间协议,使用 123/udp 端口进行网络时钟同步;NTP 是仍在使用中的最古老的网络传输协议之一(1985 年前开始)。

以前Linux时间同步基本是使用 ntpdate 和 ntpd 这两个工具实现的,但是这两个工具已经很古老了。

【注】ntpdate和ntpd是互斥的,两者不能同时使用。ntpd是步进式平滑的逐渐调整时间,而ntpdate是断点式更新时间。

RHEL/CentOS 7.x 已经将 chrony 作为默认时间同步工具了。

其他Linux (如 ubuntu) 使用 systemd-timesyncd 服务。

chrony 是 RedHat 开发的,它是网络时间协议(NTP)的另一种实现;

RHEL/CentOS 7.x 的默认时间同步工具;

chrony 可以同时做为 ntp 服务的客户端和服务端;安装完后有两个程序 chronyd、chronyc:

chronyd 是一个 daemon 守护进程,chronyc 是用来监控 chronyd 性能和配置参数的命令行工具。

系统版本:CentOS 7.5

chrony_server(relay):10.0.0.4
chrony_client:10.0.0.5

Edit file /etc/chrony.conf

默认已经启动,不需要调整

example:

配置 chrony

edit file: /etc/chrony.conf

再次用chronyc 命令检查,比较它与chronyd server的差异

systemd-timesyncd 是一个用于跨网络同步系统时钟的守护服务。它实现了一个 SNTP 客户端,但更轻量级,更集成systemd。

systemd-timesyncd 启动时会读取 /etc/systemd/timesyncd.conf 配置文件,内容如下:

你可以输入你希望使用的其它时间服务器,比如你自己的本地 NTP 服务器,在 NTP= 行上输入一个以空格分隔的服务器列表。

如果服务器可以直接连接internet,不用修改默认配置;如果在内网,需要单独指定。

在最新的 Ubuntu 版本中,timedatectl 替代了老旧的 ntpdate。默认情况下,timedatectl 在系统启动的时候会立刻同步时间,并在稍后网络连接激活后通过 socket 再次检查一次。

timesyncd 替代了 ntpd 的客户端的部分。默认情况下 timesyncd 会定期检测并同步时间。它还会在本地存储更新的时间,以便在系统重启时做时间单步调整。

通过 timedatectl 和 timesyncd 设置的当前时间状态和时间配置,可以使用 timedatectl status 命令来进行确认。

由于 timedatectl 的存在,各发行版已经弃用了 ntpdate,默认不再进行安装。

timedatectl
timedatectl status ,查看时间同步状态;
timedatectl set-ntp true ,开启网络时间同步;

timedatectl set-timezone ZONE ,设置时区。

NTP synchronized: yes 表示时间是同步状态。

查看服务状态以及从哪个ntp server同步时间。

NTP:软件层面实现,成本低。同步精度10ms左右。

PTP:需要网络接口具备在物理层提供时间戳的功能,同步精度优于100ns,局域网的节点需要使用支持PTP功能的交换机。局域网网络接点不支持PTP的话,只能同不到us,而且受网络背景流量影响。

linux设置ntp时间同步

NTP时钟同步方式说明

NTP在linux下有两种时钟同步方式,分别为直接同步和平滑同步:
直接同步
使用ntpdate命令进行同步,直接进行时间变更。如果服务器上存在一个12点运行的任务,当前服务器时间是13点,但标准时间时11点,使用此命令可能会造成任务重复执行。因此使用ntpdate同步可能会引发风险,因此该命令也多用于配置时钟同步服务时第一次同步时间时使用。
平滑同步
使用ntpd进行时钟同步,可以保证一个时间不经历两次,它每次同步时间的偏移量不会太陡,是慢慢来的,这正因为这样,ntpd平滑同步可能耗费的时间比较长。

1、安装ntp

yum install ntp

2、设置ntp服务开机启动

systemctl  restart ntp.service

3、设置服务器

3.1. vi /etc/ntp.conf,内容如下:

driftfile /var/lib/ntp/ntp.drift #草稿文件

# 允许内网其他机器同步时间

restrict 192.168.137.0(替换成自己的ip) mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.

# 中国这边最活跃的时间服务器 :

[http://www.pool.ntp.org/zone/cn](http://www.pool.ntp.org/zone/cn)

server 210.72.145.44 perfer   # 中国国家受时中心

server 202.112.10.36             # 1.cn.pool.ntp.org

server 59.124.196.83             # 0.asia.pool.ntp.org  

# allow update time by the upper server

# 允许上层时间服务器主动修改本机时间

restrict 210.72.145.44 nomodify notrap noquery

restrict 202.112.10.36 nomodify notrap noquery

restrict 59.124.196.83 nomodify notrap noquery  

# 外部时间服务器不可用时,以本地时间作为时间服务

server  127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

3.2 重启服务:service ntpd restart

3.3查看同步状态:netstat -tlunp | grep ntp

4、设置同步

4.1 vim /etc/ntp.conf,内容如下:

driftfile /var/lib/ntp/ntp.drift # 草稿文件

statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats

filegen loopstats file loopstats type day enable

filegen peerstats file peerstats type day enable

filegen clockstats file clockstats type day enable

#让NTP Server为内网的ntp服务器

server 192.168.137.110 (master节点ip)

fudge 192.168.137.110 stratum 5

#不允许来自公网上ipv4和ipv6客户端的访问

restrict -4 default kod notrap nomodify nopeer noquery

restrict -6 default kod notrap nomodify nopeer noquery

#Local users may interrogate the ntp server more closely.

restrict 127.0.0.1

restrict ::1

4.2重启服务:service ntpd restart

4.3手动同步:ntpdate -u 192.168.124.146

以上是关于Linux 时间同步的主要内容,如果未能解决你的问题,请参考以下文章

linux时间不同步会影响挂载吗?

Linux系统之时间同步方法

linux时间同步

Linux 同步时间 设置时区

Linux 时间同步

linux时间同步服务器的时间更新问题