一、NTP簡介
1.NTP簡介
NTP(Network Time Protocol,網絡時間協議)是用來使網絡中的各個計算機時間同步的一種協議。它的用途是把計算機的時鍾同步到世界協調時UTC,其精度在局域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-50ms。(1s=1000ms) NTP服務器就是利用NTP協議提供時間同步服務的。
2.NTP原理
NTP客戶端可以定時自動向NTP服務器發送請求來獲取時間,NTP服務器將時間發送給客戶端,。
NTP服務器的時間來源有兩個
1.網絡時間
2.NTP服務器自己的時間
3.NTP架構
C/S
二、不同機器之間的時間同步
為了避免主機時間因為長期運行下所導致的時間偏差,進行時間同步(synchronize)的工作是非常必要的。Linux系統下,一般使用ntp服務器來同步不同機器的時間。一台機器,可以同時是ntp服務端和ntp客戶端。在生產系統中,推薦使用像DNS服務器一樣分層的時間服務器來同步時間。
不同機器間同步時間,可以使用ntpdate命令(立即同步),也可以使用ntpd服務(緩慢同步)。
1、ntpdate命令
如果系統里沒有這個命令,表示沒有安裝相應的程序:通過下面命令安裝:
-------------------------------------------
[root@CentOS7 ~]# yum install ntpdate ##CentOS6 或7 系統
-------------------------------------------
使用ntpdate比較簡單。格式如下:
---------------------------------------------
1 root@debian:~# ntpdate [NTP IP/hostname]
2 root@debian:~# ntpdate 192.168.0.1
3 root@debian:~# ntpdate time.ntp.org
---------------------------------------------
注意:如果此時ntpd服務已經啟動,端口會被ntpd服務端占用,此時ntpdate命令就不能手動同步時間了
但這樣的同步,只是強制性的將系統時間與ntp服務器時間同步,機器的硬件時間不會同步,如果希望硬件時間和同步完的系統時間一直,可以通過hwclock -w將硬件時間與系統時間同步,
但是,如果CPU Tick有問題,只是治標不治本。所以,一般配合linux定時任務 Cron,來進行定期同步設置。比如,在crontab中添加:
---------------------------------------------
0 12 * * * /usr/sbin/ntpdate 192.168.0.1
這樣,會在每天的12點整,同步一次時間。ntp服務器為192.168.0.1。
---------------------------------------------
或者將下列腳本添加到/etc/cron.hourly/,這樣就每小時會執行一次同步:
---------------------------------------------
#!/bin/bash
#
# $Id: sync-clock,v 1.6 2009/12/23 15:41:29 jmates Exp $
#
# Use ntpdate to get rough clock sync with department of Genome Sciences
# time server.
NTPDATE=/usr/sbin/ntpdate
SERVER="192.168.0.1 "
# if running from cron (no tty available), sleep a bit to space
# out update requests to avoid slamming a server at a particular time
if ! test -t 0; then
MYRAND=$RANDOM
MYRAND=${MYRAND:=$$}
if [ $MYRAND -gt 9 ]; then
sleep `echo $MYRAND | sed 's/.*\(..\)$/\1/' | sed 's/^0//'`
fi
fi
$NTPDATE -su $SERVER
# update hardware clock on Linux (RedHat?) systems
if [ -f /sbin/hwclock ]; then
/sbin/hwclock --systohc
---------------------------------------------
三、部署NTP服務端
使用ntpd服務,要好於ntpdate加cron的組合。因為,ntpdate同步時間會造成時間的突變和跳躍,對一些依賴時間的程序和服務會造成影響。比如sleep,timer等。而且ntpd服務可以在修正時間的同時,修正CPU Tick。因此理想的做法為,在開機的時候,使用ntpdate強制同步時間,在其他時候使用ntpd服務來同步時間。
要注意的是,ntpd 有一個自我保護的機制:如果本機與上源時間相差太大,ntpd 不會運行時間同步操作,所以新設置的時間服務器一定要先 ntpdate 從上源取得時間初值, 然后啟動 ntpd服務。ntpd服務運行后,先是每64秒與上源NTP服務器同步一次,根據每次同步時測得的誤差值經復雜計算逐步調整自己的時間,隨着誤差減小,逐步增加同步的間隔。每次跳動,都會重復這個調整的過程。
1、安裝ntpd服務對應的軟件包
-----------------------------------
[root@CentOS7 ~]# yum install ntp ##CentOS6 或7 系統
-----------------------------------
2、ntpd服務的設置
NTP Server的主要配置文件為/etc/ntp.conf:這個是NTP daemon的主要設文件。在 NTP Server 的設定上,建議不要對Internet 無限制的開放,盡量僅提供局域網內部的 Client 端聯機進行網絡校時。此外,NTP Server 也是需要網絡上面較為准確的主機來自行更新自己的時間,它自己的時間都不准確怎么為客戶端提供准確的時間,所以在我們的 NTP Server 上面也要找一個最靠近自己的時間源服務器來進行自我校正。比如去中國國家授時中心提供的時間源服務器來校正自己的時間。
/etc/ntp.conf內各個選項信息如下:
(1)系統時間與BIOS事件的偏差記錄
driftfile /etc/ntp/drift
(2)restrict 控制相關權限。
語法為: restrict [IP地址] mask [子網掩碼] <參數>
其中IP地址也可以是default ,default 就是指所有的IP
參數有以下幾個:
---------------------------------------------
ignore : 關閉所有的 NTP 聯機服務
nomodify: 客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網絡校時。
notrust : 客戶端除非通過認證,否則該客戶端來源將被視為不信任子網
noquery : 不提供客戶端的時間查詢:用戶端不能使用ntpq,ntpc等命令來查詢ntp服務器
notrap : 不提供trap這個遠程事件登入
nopeer : 用於阻止主機嘗試與服務器對等,並允許欺詐性服務器控制時鍾
kod : 訪問違規時發送 KoD 包。
restrict -6 表示IPV6地址的權限設置。
---------------------------------------------
如果參數完全沒有設定,那就表示該 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進行時間同步了
(3)上層主機的設定
要設定上層主機主要以 server 這個參數來設定
語法為:server [IP|HOST Name] [參數]
Server 后面接的就是上層 Time Server
參數解釋如下所示:
◆ key: 表示所有發往服務器的報文包含有秘鑰加密的認證信息,n是32位的整數,表示秘鑰號。
◆ version: 表示發往上層服務器的報文使用的版本號,n默認是3,可以是1或者2。
◆ prefer: 如果有多個server選項,具有該參數的服務器優先使用。
◆ mode: 指定數據報文mode字段的值。
◆ minpoll: 指定與查詢該服務器的最小時間間隔為2的n次方秒,n默認為6,范圍為4-14。
◆ maxpoll: 指定與查詢該服務器的最大時間間隔為2的n次方秒,n默認為10,范圍為4-14。
◆ iburst: 當初始同步請求時,采用突發方式接連發送8個報文,時間間隔為2秒。
------------------------------------------------
server 192.168.0.1 prefer
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
------------------------------------------------
(4)確保localhost(這個常用的IP地址用來指Linux服務器本身)有足夠權限.使用沒有任何限制關鍵詞的語法:
------------------------------------------------
restrict 127.0.0.1
restrict -6 ::1
------------------------------------------------
3、配置/etc/ntp/stpe-tickers文件
修改/etc/ntp/stpe-tickers文件,內容如下(當ntpd服務啟動時,會自動與該文件中記錄的上層NTP服務進行時間校對)
------------------------------------------------
[root@CentOS7 ~]# cat /etc/ntp/step-tickers
# List of NTP servers used by the ntpdate service.
0.centos.pool.ntp.org
[root@CentOS7 ~]#
------------------------------------------------
關於ntp.conf and step-tickers區別:
step-tickers is used by ntpdate where as ntp.conf is the configuration file for the ntpd daemon. ntpdate is initially run to set the clock before ntpd to make sure time is within 1000 sec. ntp will not run if the time difference between the server and client by more then 1000 sec ( or there about). The start up script will read step-tickers for servers to be polled by ntpdate.
4、配置/etc/sysconfig/ntpd文件
ntp服務,默認只會同步系統時間。如果想要讓ntp同時同步硬件時間,可以設置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 這樣,就可以讓硬件時間與系統時間一起同步。
#允許BIOS與系統時間同步,也可以通過hwclock -w 命令
SYNC_HWCLOCK=yes
5、防火牆配置
由於NTP服務需要使用到UDP端口號123,所以當系統的防火牆啟動的情況下,必須開放UDP端口號123。或直接關閉防火牆
6、啟動NTP服務
CentOS6下
-------------------------------------------
service ntpd status #查看ntpd服務狀態
service ntpd start #啟動ntpd服務
service ntpd stop #停止ntpd服務
service ntpd restart #重啟ntpd服務
檢查ntp服務是否開機啟動,將其設置為開機啟動。
chkconfig ntpd on ##在運行級別2、3、4、5上設置為自動運行
chkconfig --list ntpd ##檢查ntp服務是否開機啟動
-------------------------------------------
CentOS7下
-------------------------------------------
systemctl status ntpd.service #查看ntpd服務狀態
systemctl start ntpd.service #啟動ntpd服務
systemctl stop ntpd.service #停止ntpd服務
systemctl restart ntpd.service #重啟ntpd服務
檢查ntp服務是否開機啟動,將其設置為開機啟動。
systemctl enable ntpd.service #置為開機啟動
-------------------------------------------
四、NTP服務端配置舉例
1、安裝ntp
2、設置ntpd服務開機啟動
3、防火牆開放UDP端口號123
4、先手工同步下時間,如果不能連接外網,手動更改系統時間和硬件時間為北京時間
ntpdate ntp.ntsc.ac.cn
5、配置ntpd主配置文件ntp.conf
vim /etc/ntp.conf 增加如下內容
------------------------------------------------------------
# 允許內網其他機器同步時間
restrict 192.168.239.0 mask 255.255.255.0 nomodify notrap
# 配置外部時間服務器,將配置文件中默認的全部注釋掉
server ntp.ntsc.ac.cn prefer ##中國國家授時中心
server ntp1.aliyun.com ##中國授時,當上面服務器同步不了,則尋找第二個
# 外部時間服務器不可用時,以本地時間作為時間服務
server 127.127.1.0 ## local clock 如果上面的服務器都無法同步時間,就和本地系統時間同步。127.127.1.0在這里是一個IP地址,不是網段。
fudge 127.127.1.0 stratum 10 ##127.127.1.0 為第10層。ntp 和127.127.1.0同步完后,就變成了11層。 ntp是層次階級的。同步上層服務器的stratum 大小不能超過或等於16。
------------------------------------------------------------
6、開啟ntp服務
7、查看時間同步狀態 ntpstat (表示本地時間服務器已經和外網的NTP服務同步上了)
------------------------------------------------------------
[root@CentOS7 ~]# ntpstat
synchronised to NTP server (114.118.7.163) at stratum 3
time correct to within 68 ms
polling server every 64 s
[root@CentOS7 ~]#
------------------------------------------------------------
該指令可列出NTP服務器是否與上層聯機。由上述輸出結果可知,時間校正約
為68*10(-6)秒,且每隔64秒會主動更新時間
注:常見的錯誤:
------------------------------------------------------------
unsynchronized time server re-starting polling server every 64 s
// 或者
25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found
------------------------------------------------------------
其實,這不是一個錯誤。而是由於每次重啟NTP服務器之后大約要3-5分鍾客戶端才能與server建立正常的通訊連接。當此時用客戶端連接服務端就會報這樣的信息。一般等待幾分鍾就可以了。
8、查看ntp服務器與上層ntp的狀態
------------------------------------------------------------
指令"ntpq -p"可以列出目前我們的NTP與相關的上層NTP的狀態,以上的幾個字段的意義如下:
remote :即NTP主機的IP或主機名稱。注意最左邊的符號,如果由"+"則代表目前正在作用鍾的上層NTP,如果是"*"則表示也有連上線,不過是作為次要聯機的NTP主機。
refid :參考的上一層NTP主機的地址
st :即stratum階層
when :幾秒前曾做過時間同步更新的操作
poll :下次更新在幾秒之后
reach :已經向上層NTP服務器要求更新的次數
delay :網絡傳輸過程鍾延遲的時間
offset :時間補償的結果
jitter :Linux系統時間與BIOS硬件時間的差異時間
查看ntpd進程的狀態
【命令】watch "ntpq -p"
【終止】按 Ctrl+C 停止查看進程。

第一列中的字符指示源的質量。星號 ( * ) 表示該源是當前引用。
remote:列出源的 IP 地址或主機名。
when:指出從輪詢源開始已過去的時間(秒)。
poll:指出輪詢間隔時間。該值會根據本地時鍾的精度相應增加。
reach:是一個八進制數字,指出源的可存取性。值 377 表示源已應答了前八個連續輪詢。
offset:是源時鍾與本地時鍾的時間差(毫秒)。
四、NTP客戶端配置舉例
和NTP服務端配置舉例配置一樣,只是當作客戶端來進行時間同步則配置文件不需要配置那么復雜,只需要配置下面的內容就行
------------------------------------------------------------
# 配置時間服務器,將配置文件中默認的全部注釋掉
server 192.168.0.1 prefer ##局域網內的NTP服務器
------------------------------------------------------------
參考:
https://www.cnblogs.com/kerrycode/p/4744804.html
https://www.cnblogs.com/williamjie/p/10768657.html
https://blog.csdn.net/vic_qxz/article/details/80343351
