如何在 CentOS 中設置 NTP 服務器
網絡時間協議(NTP)用來同步網絡上不同主機的系統時間。你管理的所有主機都可以和一個指定的被稱為 NTP 服務器的時間服務器同步它們的時間。而另一方面,一個 NTP 服務器會將它的時間和任意公共 NTP 服務器,或者你選定的服務器同步。由 NTP 管理的所有系統時鐘都會同步精確到毫秒級。
在公司環境中,如果他們不想為 NTP 傳輸打開防火墻,就有必要設置一個內部 NTP 服務器,然后讓員工使用內部服務器而不是公共 NTP 服務器。在這個指南中,我們會介紹如何將一個 CentOS 系統配置為 NTP 服務器。在介紹詳細內容之前,讓我們先來簡單了解一下 NTP 的概念。
為什么我們需要 NTP?
由于制造工藝多種多樣,所有的(非原子)時鐘并不按照完全一致的速度行走。有一些時鐘走的比較快而有一些走的比較慢。因此經過很長一段時間以后,一個時鐘的時間慢慢的和其它的發生偏移,這就是常說的 “時鐘漂移” 或 “時間漂移”。為了將時鐘漂移的影響最小化,使用 NTP 的主機應該周期性地和指定的 NTP 服務器交互以保持它們的時鐘同步。
在不同的主機之間進行時間同步對于計劃備份、入侵檢測記錄、分布式任務調度或者事務訂單管理來說是很重要的事情。它甚至應該作為日常任務的一部分。
NTP 的層次結構
NTP 時鐘以層次模型組織。層級中的每層被稱為一個 stratum(階層)。stratum 的概念說明了一臺機器到授權的時間源有多少 NTP 跳。
Stratum 0 由沒有時間漂移的時鐘組成,例如原子時鐘。這種時鐘不能在網絡上直接使用。Stratum N (N > 1) 層服務器從 Stratum N-1 層服務器同步時間。Stratum N 時鐘能通過網絡和彼此互聯。
NTP 支持多達 15 個 stratum 的層級。Stratum 16 被認為是未同步的,不能使用的。
準備 CentOS 服務器
現在讓我們來開始在 CentOS 上設置 NTP 服務器。
首先,我們需要保證正確設置了服務器的時區。在 CentOS 7 中,我們可以使用 timedatectl 命令查看和更改服務器的時區(比如,"Australia/Adelaide",LCTT 譯注:中國可設置為 Asia/Shanghai )
# timedatectl list-timezones | grep Australiatimedatectl set-timezone Australia/Adelaide
timedatectl</pre>
![]()
繼續并使用 yum 安裝需要的軟件
# yum install ntp然后我們會添加全球 NTP 服務器用于同步時間。
# vim /etc/ntp.conf
server 0.oceania.pool.ntp.org server 1.oceania.pool.ntp.org server 2.oceania.pool.ntp.org server 3.oceania.pool.ntp.org默認情況下,NTP 服務器的日志保存在 /var/log/messages。如果你希望使用自定義的日志文件,那也可以指定。
logfile /var/log/ntpd.log如果你選擇自定義日志文件,確保更改了它的屬主和 SELinux 環境。
# chown ntp:ntp /var/log/ntpd.logchcon -t ntpd_log_t /var/log/ntpd.log</pre>
現在初始化 NTP 服務并確保把它添加到了開機啟動。
# systemctl restart ntpsystemctl enable ntp</pre>
驗證 NTP Server 時鐘
我們可以使用 ntpq 命令來檢查本地服務器的時鐘如何通過 NTP 同步。
![]()
下面的表格解釋了輸出列。
remote | 源在 ntp.conf 中定義。‘*’ 表示當前使用的,也是最好的源;‘+’ 表示這些源可作為 NTP 源;‘-’ 標記的源是不可用的。 | </tr>|||||||||||||||||||||||||
refid | 用于和本地時鐘同步的遠程服務器的 IP 地址。 | </tr>|||||||||||||||||||||||||
st | Stratum(階層) | </tr>|||||||||||||||||||||||||
t | 類型。 'u' 表示單播(unicast)。其它值包括本地(local)、多播(multicast)、廣播(broadcast)。 | </tr>|||||||||||||||||||||||||
when | 自從上次和服務器交互后經過的時間(以秒數計)。 | </tr>|||||||||||||||||||||||||
poll | 和服務器的輪詢間隔,以秒數計。 | </tr>|||||||||||||||||||||||||
reach | 表示和服務器交互是否有任何錯誤的八進制數。值 337 表示 100% 成功(即十進制的255)。 | </tr>|||||||||||||||||||||||||
delay | 服務器和遠程服務器來回的時間。 | </tr>|||||||||||||||||||||||||
offset | 我們服務器和遠程服務器的時間差異,以毫秒數計。 | </tr>|||||||||||||||||||||||||
jitter | 兩次取樣之間平均時差,以毫秒數計。 | </tr> </tbody> </table>