Linux 时间同步

Linux中时间设置

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

  • 硬件时钟RTC(Real Time Clock)
  • 系统时钟(System Clock)

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

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

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

NTP

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

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

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

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

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

chrony 简介

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

chrony_server

配置 chrony

Edit file /etc/chrony.conf

## 上游公共 ntp 服务器
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

## 允许 10.0.0.0/24 主机同步时间,此时它作为server
# Allow NTP client access from local network.
allow 10.0.0.0/24

运行 chrony

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

# systemctl enable chronyd
# systemctl start chronyd

chronyc 用法

## 查看 ntp_servers 状态
chronyc sources -v

## 查看 ntp_sync 状态
chronyc sourcestats -v

## 查看 ntp_servers 是否在线
chronyc activity -v

## 查看 ntp 详细信息
chronyc tracking -v

example:

[royzeng@roy-time1 ~]$ chronyc sources -v
210 Number of sources = 4

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- 203.95.213.129                2   6    17     7  +6589us[+6589us] +/-  128ms
^- ntp.hkg10.hk.leaseweb.net     2   6    17     9  -3166us[-4471us] +/-  230ms
^* ntp.xtom.com.hk               2   6    17     9   +446us[ -859us] +/-   44ms
^+ stratum2-01.hkg01.public>     2   6    17     9  +1465us[+1465us] +/-   49ms


[royzeng@roy-time1 ~]$ chronyc sourcestats -v
210 Number of sources = 4
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
203.95.213.129              5   3    71     -2.215     56.211  +6464us   197us
ntp.hkg10.hk.leaseweb.net   5   5    71     -0.455     43.785  -3413us   249us
ntp.xtom.com.hk             5   3    71     -4.793     32.118   -192us   138us
stratum2-01.hkg01.public>   5   3    71     +7.164    102.122  +2232us   529us


[royzeng@roy-time1 ~]$ chronyc activity -v
200 OK
4 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address


[royzeng@roy-time1 ~]$ chronyc tracking -v
Reference ID    : 2D7D0114 (ntp.xtom.com.hk)
Stratum         : 3
Ref time (UTC)  : Fri Dec 14 07:04:03 2018
System time     : 0.000712532 seconds fast of NTP time
Last offset     : -0.000283856 seconds
RMS offset      : 0.001270661 seconds
Frequency       : 1.802 ppm slow
Residual freq   : -0.221 ppm
Skew            : 4.037 ppm
Root delay      : 0.004713390 seconds
Root dispersion : 0.042513479 seconds
Update interval : 65.2 seconds
Leap status     : Normal

chrony_client

配置 chrony

edit file: /etc/chrony.conf

## 内网 ntp_server IP
server 10.0.0.4 iburst  

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

[royzeng@roy-time2 ~]$ chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.0.0.4                      3   6    17    15    +28us[  +88us] +/-   22ms
[royzeng@roy-time2 ~]$ chronyc sourcestats -v
210 Number of sources = 1
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
10.0.0.4                    4   3     6     +3.254    829.521   +121us   101us
[royzeng@roy-time2 ~]$ chronyc activity -v
200 OK
1 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address
[royzeng@roy-time2 ~]$ chronyc tracking -v
Reference ID    : 0A000004 (10.0.0.4)
Stratum         : 4
Ref time (UTC)  : Fri Dec 14 07:10:35 2018
System time     : 0.000086407 seconds slow of NTP time
Last offset     : -0.000094787 seconds
RMS offset      : 0.000094787 seconds
Frequency       : 50.500 ppm slow
Residual freq   : -1.147 ppm
Skew            : 0.190 ppm
Root delay      : 0.005246780 seconds
Root dispersion : 0.019316599 seconds
Update interval : 65.3 seconds
Leap status     : Normal

systemd-timesyncd 简介

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

配置

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

[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
NTP=time1.myserver.com
FallbackNTP=time2.myserver.com

你可以输入你希望使用的其它时间服务器,比如你自己的本地 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 status
      Local time: Fri 2018-12-14 02:35:15 UTC
  Universal time: Fri 2018-12-14 02:35:15 UTC
        RTC time: Fri 2018-12-14 02:35:15
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

timedatectl set-timezone ZONE,设置时区。

$ timedatectl list-timezones | grep -i shanghai
Asia/Shanghai
$ sudo timedatectl set-timezone Asia/Shanghai
$ date
Wed Feb 20 14:13:06 CST 2019
$ timedatectl status | grep Time
                       Time zone: Asia/Shanghai (CST, +0800)

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

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

$ sudo systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: active (running) since Tue 2018-12-04 02:48:13 UTC; 1 weeks 3 days ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 1167 (systemd-timesyn)
   Status: "Synchronized to time server 91.189.89.199:123 (ntp.ubuntu.com)."
    Tasks: 2
   Memory: 1.3M
      CPU: 736ms
   CGroup: /system.slice/systemd-timesyncd.service
           └─1167 /lib/systemd/systemd-timesyncd

Dec 04 02:48:13 roy-time-vm systemd[1]: Starting Network Time Synchronization...
Dec 04 02:48:13 roy-time-vm systemd[1]: Started Network Time Synchronization.
Dec 04 02:48:43 roy-time-vm systemd-timesyncd[1167]: Synchronized to time server 91.189.89.199:
lines 1-17/17 (END)

扩展:同步时间协议

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容