一、NTP 是什么?
NTP ( Network Time Protocol,網絡時間協議)是用來使計算機時間同步化的一種協議。它可以使計算機對其服務器或時鍾源做同步化,它可以提供高精准度的時間校正(LAN上與標准間差小於1毫秒,WAN上幾十毫秒),且可介由加密確認的方式來防止惡意的協議攻擊。
模式采用c/s模式
ntp的安裝
檢查是否安裝了ntp相關包。如果沒有安裝ntp相關包,使用rpm或yum安裝,安裝也非常簡單方便
rpm -qa|grep ntp
ntp安裝
yum install -y ntp

端口號查看:
/etc/services

目的很簡單,就是為了提供准確時間,保障業務系統間的時間的一致性。因為我們的手表、手機、電腦等電子設備,經常會跑着跑着時間就出現了誤差,或快或慢的少幾秒,時間長了甚至誤差過分鍾。這對系統數據的准確性、有效性非常重要,同時對於后期運維工作也起着舉足輕重的作用。
三、NTP服務的部署
NTP服務是采用 Server/Client 的模式進行時間的同步,也就是說需要區分為NTP服務端和NTP客戶端。另外,默認情況下所有需要進行時間同步的服務器,都要求安裝NTP服務。其中需要一台作為內部NTP服務端,其它的作為NTP客戶端。
如果客戶端不安裝NTP,就只能通過ntpdate來手工同步時間,而使用ntpdate,大部分時候搭配crond定時任務來進行校時。
使用ntpd服務,要好於ntpdate加cron的組合。因為,ntpdate同步時間,會造成時間的跳躍,對一些依賴時間的程序和服務會造成影響。比 如sleep,timer等。而且,ntpd服務可以在修正時間的同時,修正cpu tick。理想的做法為,在開機的時候,使用ntpdate強制同步時間,在其他時候使用ntpd服務來同步時間。
要注意的是,ntpd 有一個自我保護設置: 如果本機與上源時間相差太大, ntpd 不運行. 所以新設置的時間服務器一定要先 ntpdate 從上源取得時間初值, 然后啟動 ntpd服務。ntpd服務 運行后, 先是每64秒與上源服務器同步一次, 根據每次同步時測得的誤差值經復雜計算逐步調整自己的時間, 隨着誤差減小, 逐步增加同步的間隔. 每次跳動, 都會重復這個調整的過程.
在安裝NTP服務前,我們需要檢查當前系統是否有啟動NTP服務
[root@localhost ~]# ps -ef | grep ntpd
root 21284 17818 0 15:30 pts/0 00:00:00 grep --color=auto ntpd
#查看是否安裝了ntp服務
[root@localhost ~]# rpm -qa | grep ntp
ntpdate-4.2.6p5-25.el7.centos.2.x86_64
#如果安裝了ntp,則會顯示如下:
[root@localhost etc]# rpm -qa | grep ntp
ntp-4.2.6p5-28.el7.centos.x86_64
ntpdate-4.2.6p5-28.el7.centos.x86_64
一般情況下,NTP服務包括三個rpm包:
1: autogen-libopts-5.18-5.el7.x86_64.rpm
2: ntpdate-4.2.6p5-28.el7.centos.x86_64.rpm
3: ntp-4.2.6p5-28.el7.centos.x86_64.rpm
注:版本號會根據源服務端包的實際版本變化,以服務端版本為准。
在開始安裝NTP服務前,建議最好先查看下本機系統的時區信息,並且保證所有關聯的設備時區信息保持一致。
在Centos7下使用timedatectl命令可以查詢和更改系統時鍾和設置,你可以使用此命令來設置或更改當前的日期,時間和時區,或實現與遠程NTP服務器的自動系統時鍾同步。具體的可查閱timedatectl文檔。
#查看當前系統時區及其它關聯信息
[root@localhost ~]# timedatectl status
Local time: 二 2019-01-22 17:11:33 CST
Universal time: 二 2019-01-22 09:11:33 UTC
RTC time: 二 2019-01-22 09:11:33
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes/no
NTP synchronized: yes/no
RTC in local TZ: no
DST active: n/a
其中Time zone即為時區數據。
NTP服務的安裝其實非常簡單,使用yum指令進行安裝即可。
#通過yum安裝NTP服務
[root@localhost ~]# yum install -y ntp
在配置及啟動服務前,建議先對本機進行校時。這里采用的是阿里的NTP服務器,畢竟阿里的還是比較穩定。
[root@localhost ~]# ntpdate ntp1.aliyun.com
22 Jan 16:38:28 ntpdate[2938]: adjust time server 120.25.115.20 offset 0.243404 sec
內部網絡在沒有時同設備的情況下,需要指定一台NTP服務器與外網授時中心連接,進行時間同步。其它NTP客戶端將服務端指向到這台內部NTP服務進行時間同步。
四、內部NTP服務端的配置
NTP安裝完成后,首先需要查看NTP安裝在哪里。根據查詢,大部分時候,NTP都默認安裝在/etc目錄下。
[root@localhost ~]# whereis ntp
ntp: /etc/ntp /etc/ntp.conf
NTP的配置文件默認是ntp.conf,文件存儲目錄在/etc目錄下,沒有在/etc/ntp目錄里。
該配置文件主要需要注意的是兩個參數:restrict 和server
restrict 主要用於配置訪問權限,即哪些IP可以訪問本機NTP服務,server主要用於配置本機訪問的上層NTP服務器IP。
1)訪問權限配置
權限的設定主要以 restrict 這個參數來設定,主要的語法為:
# restrict IP mask netmask_IP parameter
# 其中 IP 可以是軟件地址,也可以是 default ,default 就類似 0.0.0.0
# 至於 paramter 則有:
# ignore :關閉所有的 NTP 聯機服務
# nomodify:表示 Client 端不能更改 Server 端的時間參數,不過,
# Client 端仍然可以透過 Server 端來進行網絡校時。
# notrust :該 Client 除非通過認證,否則該 Client 來源將被視為不信任網域
# noquery :不提供 Client 端的時間查詢
# notrap :不提供trap這個遠程事件登入
# 如果 paramter 完全沒有設定,那就表示該 IP (或網域)“沒有任何限制”
restrict default nomodify notrap noquery # 關閉所有的 NTP 要求封包
restrict 127.0.0.1 #這是允許本級查詢
restrict 192.168.0.1 mask 255.255.255.0 nomodify
#在192.168.0.1/24網段內的服務器就可以通過這台NTP Server進行時間同步了
2)上層NTP服務配置
要設定上層NTP服務器主要以 server 這個參數來設定,語法為:
# server [IP|HOST Name] [prefer]
# server 參數后面的 perfer,表示主要以該IP來作為時間校正。
# 為了解決更新時間封包的傳送延遲動作,可以使用 driftfile 來定義當前NTP服務主機在與外部NTP服務校時所花費的時間
# 而與外部通信的信息記錄在 driftfile 后面接的文件內
# 例如下面的范例中,內部NTP服務與外部NTP服務聯機時所花費的時間會記錄在 /etc/ntp/drift文件內
server ntp1.aliyun.com
server ntp2.aliyun.com
server cn.pool.ntp.org prefer
driftfile /etc/ntp/drift
末尾參數說明:
perfer:表示優先級最高,主要以該IP來作為時間校正。
burst :當一個運程NTP服務器可用時,向它發送一系列的並發包進行檢測。
iburst :當一個運程NTP服務器不可用時,向它發送一系列的並發包進行檢測。
其他設置值,以系統默認值即可。
五、NTP客戶端的配置
首先確定客戶端已經正確安裝NTP服務(如上第三節 NTP服務的部署)。
然后,我們開始對客戶端進行配置。客戶端的配置很簡單,也是對/etc/ntp.conf文件進行編輯,主要修改server參數,將server指定為內部NTP服務端的IP即可。
如果在同步時,提示異常,可先檢查服務端防火牆是否開放了相應端口。
[root@localhost ~]# ntpdate 192.168.61.188
23 Jan 15:16:31 ntpdate[16810]: no server suitable for synchronization found
六、NTP基本操作指令
#啟動NTP服務
systemctl start ntpd
#開機自啟
[root@localhost ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
#查看NTP服務是否已正常占用指定端口
netstat -ln|grep 123
#驗證NTP同步上層NTP服務狀態
ntpq –p
特別提醒:在啟動NTP服務前,先對提供服務的這台主機手動的校正一次時間。如前所述,如果NTP發現時間差不多,不會更新本地時間,可能導致時間有誤差,對於時間一致要求非常高的應用場景非常不利。
如何確認我們的NTP服務器已經更新了自己的時間呢?
#沒有啟動NTP或NTP配置異常時
[root@localhost ~]# ntpstat
Unable to talk to NTP daemon. Is it running?
#使用ntpstat來查看同步狀態
[root@localhost etc]# ntpstat
synchronised to NTP server (120.25.115.20) at stratum 3
time correct to within 37 ms
polling server every 256 s
[root@localhost ~]# timedatectl status
Local time: 二 2019-01-22 17:11:33 CST
Universal time: 二 2019-01-22 09:11:33 UTC
RTC time: 二 2019-01-22 09:11:33
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes/no
NTP synchronized: yes/no
RTC in local TZ: no
DST active: n/a
查看系統時間狀態時,其中NTP enabled參數的控制指令為:
timedatectl set-ntp yes/no
在沒開啟NTP enabled情況下,NTP synchronized參數一般為no,表示還沒有進行過時間同步,在時間同步后會由no變為yes。當然,如果使用過ntpdate手工同步過,該參數也會是yes狀態。
#如果時區不對,還需要使用timedatectl設置時區
timedatectl set-timezone Asia/Shanghai
七、常用外部NTP服務地址
cn.pool.ntp.org cn.ntp.org.cn //IP:110.75.186.249 pool.ntp.org //IP:110.75.190.198 ntp.sjtu.edu.cn //IP:202.120.2.101 來自阿里雲的 NTP 服務器: ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.aliyun.com ntp5.aliyun.com ntp6.aliyun.com ntp7.aliyun.com
參考:Linux配置ntp時間服務器(全)