iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0

NTP 網路校時

雖然我們可以使用 datetimedatectl 的工具將系統設定準確,但這似乎只限制在小量的管理上,現今應用系統架構複雜,每一個系統通常都是 2 台主機起跳,對於整個企業來說也許會有 10 台以上各種不同任務的主機需要管理,此時以手動設定時間的方式就比較沒有效率了。

在現代企業環境中,時間同步是極為重要的。一個小小的時間偏差可能會導致資料不一致,甚至是嚴重的系統故障。手動設定每台主機的時間不僅耗時,而且不實用,尤其當我們管理的不僅僅是一兩台機器,而是數十或數百台的時候。

使用 NTP 進行多終端校時

因此,在整個複雜的資訊結構中,會選擇一個校時機制,這個校時機制使用了網路來達成,也就是我們常聽到的網路時間 NTP Network Time Protocol)服務,NTP 實做上是使用 UDP/123 進行資料同步,所以當組織內的電腦或主機向同一個時間來源進行同步時,就不會發生不同設備時間不一樣的問題。

使用 Chrony

Chrony 在 Enterprise Linux 7 中正式使用,這個套件較傳統 ntp 提供更準確的校時機制,比如:

  • 從多個校時主機來源同步時間。
  • 自動調整校時頻率。
  • 同時扮演用戶端與伺服器端供其它主機同步。

基本上 chrony 為了增加時間的準確性,提更多項機制來完成這個目標。

若要使用 chrony 做為我們的校時工具,則需要安裝同名套件,實做方式如下:

student$ sudo dnf install -y chrony

現在我們可以使用 chrony 來校準時間。

chrony 需要啟同一個 chronyd 的服務,這個服務會在背景執行並且確認時間的準確性。

透過下列方式啟動 chronyd

student$ sudo systemctl enable --now chronyd

我們需要確認主機從哪些地方來校準時間,那麼使用 chronyc 就達到這個需求,chronyc 是一個用戶端工具可以知道服務的資訊。

讓我們來看看主機從哪幾個地方校正時間:

student$ sudo chrony sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* server1b.meinberg.de          2  10   377   517  -1604us[-1576us] +/-  109ms
^+ purple.bonev.com              2  10   177  273m    -16ms[  -16ms] +/-  212ms
^+ 144.24.146.96                 2  10   377   955  -2524us[-2496us] +/-  240ms
^+ 185.102.185.67                2  10   377   468  -5531us[-5531us] +/-  145ms

從上面的輸出可以看到主機選用了 4 個校時伺服器做為校正來源,這樣比起之前的 ntpdate 準確性更高。

指定同步來源

現今各企業的資訊安全需求增加,各主機通常會限制不可以直接連接對外服務以減低安全問題,所以在組織中就會建立自己的校時伺服器,最常用的就是 Windows Active Directory 服務了,在 Windows 的解決方案就是直接對應到 AD 就完成了校時,此時若把 Linux 的校時來源設定成 AD 主機的話那麼內部的時間就可以達到統一的目標。

要達到這個需求我們只需要修改一個檔案,也就是 Chrony 的主要設定檔: /etc/chrony.conf

/etc/chrony.conf 檔案中,我們可以指定用於時間同步的服務器。例如,若要指定內部的 Active Directory 伺服器 (172.16.6.3) 作為時間來源,可以編輯設定檔:

# 編輯 Chrony 設定檔
student$ sudo vi /etc/chrony.conf

找到系統預設 server 或 pool 開頭的指向,改為:

server 172.16.6.3 iburst

iburst 參數表示如果第一次連接失敗,Chrony 將會發送一系列封包進行快速連接。

編輯完成後存檔,重新啟動 chronyd 讓設定檔生效:

student$ sudo systemctl restart chronyd

啟用新的位置後,一樣透過 chronyc 來確認是否從指定來源校時:

student$ sudo chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 172.16.6.3                    3   6    17    11  -2939ns[  -32us] +/- 9513us

當然我們也以使用先前介紹的 timedatectl 來確認 NTP 是否同步。

使用下列方式來確認:

student$ timedatectl
      Local time: Fri 2023-09-08 21:23:43 CST
  Universal time: Fri 2023-09-08 13:23:43 UTC
        RTC time: Fri 2023-09-08 13:23:43
       Time zone: Asia/Taipei (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

從上面的輸出可以知道 NTP 服務有啟同而且有進行同步,這樣就可以確保時間的準確。

網路同步時間

若在組織內部沒有自行建立的校時系統,使用外部校時系統也可以,都能夠避免主機或用戶端時間不正確的問題。

在台灣,我們可以使用 中華電信研究所時間與頻率國家標準實驗室 提供的公開 NTP 服務,其位置如下:

  • tock.stdtime.gov.tw
  • watch.stdtime.gov.tw
  • time.stdtime.gov.tw
  • clock.stdtime.gov.tw
  • tick.stdtime.gov.tw

其它如 https://www.ntppool.org/zone/tw 所列表的主機也都可以使用:


上一篇
Day 19: 修改系統時間與時區
下一篇
Day 21: 系統排程
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言