Contents

Linux - NTP 時間伺服器

在許多系統確保精確的時間是非常重要的事,例如 Cluster 、 DB 等重要的系統,機器可以透過 網路時間協定 NTP(Network Time Protocol)來同步時間,在 Linux 除了 ntpd 之外更好選擇可以使用 chronyd 來進行同步時間。

1. chrony 套件介紹

Chrony 是在 Linux 實踐網路時間協定的方式,其中包含 chronyd 及 chronyc 一個背景執行程序及監控程式。

1.1 chronyd vs ntpd

摘要出下列 chronyd 點:

  1. chronyd 能更準確同步時間。
  2. chronyd 在網路較為擁塞環境也能較好的運行。
  3. chronyd 記憶體耗用較小。

chronyd 與 ntpd 比較,參考 chrony 官方網站說明

2. 設定同步指定伺服器時間

2.1 指定台灣時間伺服器

選擇下列伺服器設定: - watch.stdtime.gov.tw - time.stdtime.gov.tw

  1. 刪除原預設的 pool 伺服器池(或註解也行),並添加指定的伺服器
1
2
3
4
5
[root@serverb ~]# sed -i  '/^pool/d'  /etc/chrony.conf  \
> && cat >> /etc/chrony.conf <<EOF
> server watch.stdtime.gov.tw iburst
> server time.stdtime.gov.tw  iburst
> EOF
時間伺服器設定檔
設定檔均為 /etc/chrony.conf 。
  1. 重啟 chronyd
1
[root@serverb ~]# systemctl restart chronyd
  1. 驗證是否有同步
1
2
3
4
5
[root@serverb ~]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 118-163-81-63.hinet-ip.h>     1   6    17    14    +45us[  +78us] +/- 8786us
^- 118-163-81-61.hinet-ip.h>     3   6    17    14  +2953us[+2987us] +/-  269ms
符號意思

只要出現 ^* 表示目前所同步的伺服器來源也說明同步狀態良好。

其他出現 ?,X,~ 表示其未能同步時間,另可以使用 -v 參數來查看詳細內容。

3. Linux 伺服器當作內部時間伺服器使用

部分主機可能因法規或是特定因素等限制其訪問外部網路能力,顧其局內可以透過同步 DMZ 中的 Linux( 或是該主機特別開放對外同步校時 ) 的時間伺服器。

3.1. 開啟時間伺服器功能

  1. 開啟 allow 功能,並重啟時間伺服器
1
2
3
4
5
6
[root@serverb ~]# cat >> /etc/chrony.conf <<EOF
> allow 172.25.250.0/24
> EOF
[root@serverb ~]# systemctl restart chronyd
[root@serverb ~]# ss -npul | grep 123
UNCONN 0      0            0.0.0.0:123       0.0.0.0:*    users:(("chronyd",pid=1365,fd=7))           
設定允許網段
可以指定允許單個IP或是整個網段能訪問其時間伺服器。
  1. 開放防火牆規則,並設定持久化
1
2
3
4
[root@serverb ~]# firewall-cmd --add-service=ntp
success
[root@serverb ~]# firewall-cmd --add-service=ntp --permanent
success

4. Linux 時間同步來源為 Windows 的 W32tm

Windows 中的 AD 時常當作企業內的 DNS 、 Kerberos、LDAP 及 NTP 時間伺服器所使用,對於 Linux 同步校時來源將是一個災難。

4.1. 同步 Windows 時間伺服器為例 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@servera ~]# timeout 1 nc -vu  192.168.124.25 123
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.124.25:123.
[root@servera ~]# cat /etc/chrony.conf | grep server
# Use public servers from the pool.ntp.org project.
server 192.168.124.25 iburst


[root@servera ~]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? 192.168.124.25                4   6   177    20  +1194us[+1194us] +/- 7833ms
同步時間失敗
上述很明顯看出該 123/udp 是暢通,為 chronyd 無法有效辨識其來源,以致校時失敗。

4.2. 解決方案

在 /etc/chronyd.conf 中添加下列參數

1
maxdistance 16

參考下列文件 :

5. 小結

同步時間雖然看齊來微不足道,但是在 Cluoud 雲的世界級 Cluster 環境可是第一關必修的一門課程。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!