ntp時間同步


NTP時間服務器

NTP簡介

NTP(Network Time Protocol,網絡時間協議)是用來使網絡中的各個計算機時間同步的一種協議。它的用途是把 

計算機的時鍾同步到世界協調時UTC,其精度在局域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1- 

50ms。 

NTP服務器就是利用NTP協議提供時間同步服務的。 

簡易NTP實現原理圖 

環境准備

主機規划

服務端安裝部署

\#安裝ntp服務和ntpdate 

\#啟動ntp服務 

[root@ntpserver ~]# cat /etc/redhat-release 

CentOS Linux release 7.5.1804 (Core) 

NTP服務端:ntpserver IP:10.0.0.61 

NTP客戶端:ntpclient IP:10.0.0.7 
yum install ntp ntpdate -y#查看是否啟動成功 


配置ntp配置文件

#重啟ntp服務

注意:如果有同步時間的定時任務要將其注銷,否則會沖突

#查看ntp服務器與上層ntp的狀態

systemctl start ntpd.service 

systemctl enable ntpd.service 

netstat -lntup|grep ntpd 

[root@ntpserver ~]# vim /etc/ntp.conf 

driftfile /var/lib/ntp/drift 

restrict default kod nomodify notrap nopeer noquery 

restrict -6 default kod nomodify notrap nopeer noquery 

restrict 127.0.0.1 

restrict -6 ::1 
允許內網其他機器同步時間
restrict 172.16.1.0 mask 255.255.255.0 nomodify notrap 

#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 
定義使用的上游 ntp服務器,將原來的注釋
server time1.aliyun.com 

server ntp1.aliyun.com 
允許上層時間服務器主動修改本機時間
restrict time1.aliyun.com nomodify notrap noquery 

restrict ntp1.aliyun.com nomodify notrap noquery 


外部時間服務器不可用時,以本地時間作為時間服務
server 127.127.1.0 

fudge 127.127.1.0 stratum 10 

includefile /etc/ntp/crypto/pw 

keys /etc/ntp/keys 

systemctl restart ntpd.service 

[root@ntpserver ~]# ntpq -p 

remote refid st t when poll reach delay offset jitter 

============================================================================== 

203.107.6.88 10.165.84.13 2 u 66 64 7 27.784 10.499 1.787 

*120.25.115.20 10.137.53.7 2 u 3 64 17 33.749 9.611 1.618 

LOCAL(0) .LOCL. 10 l 10 64 17 0.000 0.000 0.000 
參數含義
remote:本機和上層ntp的ip或主機名,“+”表示優先,“*”表示次優先**客戶端部署** 
安裝ntp服務和ntpdate
#配置ntp服務配置文件 

#手動同步一次時間 (服務端主機IP,這里需要先關閉NTP服務哦) 

注意:客戶機要等幾分鍾再與新啟動的ntp服務器進行時間同步,否則會提示以下這個錯誤。 

no server suitable for synchronization found 

在這里,你可以設置定時任務,定時向服務端同步時間,亦可以啟動ntp服務,使其自動向服務端同步時間。 

#啟動ntp服務 

refid:參考上一層ntp主機地址 

st:stratum階層 

when:多少秒前曾經同步過時間 

poll:下次更新在多少秒后 

reach:已經向上層ntp服務器要求更新的次數 

delay:網絡延遲 

offset:時間補償 

jitter:系統時間與bios時間差 

yum install ntp ntpdate -y 

[root@web01 ~]# cat /etc/ntp.conf 

... 

... 

restrict 127.0.0.1 

restrict ::1 

#新增此行,進行權限配置 

restrict 172.16.1.0 mask 255.255.255.0 nomodify notrap 
# Hosts on local network are less restricted. 

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 

# Use public servers from the pool.ntp.org project. 

# Please consider joining the pool (http://www.pool.ntp.org/join.html). 
#注釋掉或刪除掉原來的服務器地址,新增本地服務器地址 

server 172.16.1.51 prefer 

#broadcast 192.168.1.255 autokey # broadcast server 

#broadcastclient # broadcast client 

.... 

.... 

[root@ntpclient ~]# ntpdate 172.16.1.61 

25 Mar 14:38:04 ntpdate[2937]: step time server 172.16.1.51 offset 139055.717574 sec#觀察時間同步狀況 

查看時間同步結果 

拓展一:系統時間與硬件時間同步

如果主從服務時間超過1000秒則不再進行同步了,這時候要手動同步,即:/usr/sbin/ntpdate命令,如果怕服務器 

時差會經常變動比較大可以再Linux中添加計划任務,例如: 

ntp服務,默認只會同步系統時間。如果想要讓ntp同時同步硬件時間,可以設置/etc/sysconfifig/ntpd文件, 

在/etc/sysconfifig/ntpd文件中,添加 SYNC_HWCLOCK=yes 這樣,就可以讓硬件時間與系統時間一起同步。 
拓展2:不同機器之間的時間同步
為了避免主機時間因為長期運作下所導致的時間偏差,進行時間同步(synchronize)的工作是非常必要的。 

同步時間,可以使用ntpdate命令,也可以使用ntp服務。 
方法一:使用ntpdate 比較簡單。格式如下:
[root@client ~]# ntpdate 172.16.1.61 

23 May 19:50:44 ntpdate[7507]: step time server 172.16.1.61 offset 1.239826 sec 

systemctl start ntpd.service 

systemctl enable ntpd.service 

[root@ntpcilent ~]# ntpq -p 

remote refid st t when poll reach delay offset jitter 

============================================================================== 

172.16.1.61 203.107.6.88 3 u - 64 1 2.485 400.150 0.000 

[root@ntpcilent ~]# ntpstat 

unsynchronised 

time server re-starting 

polling server every 8 s 

\#同步失敗,同步也需要時間嘛,需等待5-10分鍾再次查詢 

[root@ntpcilent ~]# ntpstat 

synchronised to NTP server (172.16.1.61) at stratum 3 

time correct to within 28 ms 

polling server every 64 s 

#OK!時間同步完成,date一下是不是和服務器主機時間一致呢 
10 5 * * * root /usr/sbin/ntpdate 192.168.31.223 && /sbin/hwclock -w 

hwclock -r 讀出BIOS的時間參數 

hwclock -w 將當前系統時間寫入BIOS中但這樣的同步,只是強制性的將系統時間設置為ntp 服務器時間。只是治標不治本。所以,一般配合cron命令,來進 

行定期同步設置。比如,在crontab 中添加: 

[root@client ~]# crontab -e 

0 10 * * * /usr/sbin/ntpdate 172.16.1.61 
方法二:使用ntpd 服務進行同步。
要注意的是,ntpd 有一個自我保護設置:如果本機與上源時間相差太大,ntpd 不運行。所以新設置的時間服務器
一定要先ntpdate 從上源取得時間初值。然后啟動ntpd 服務。 
ntpd,ntpdate的區別
下面是網上關於ntpd與ntpdate區別的相關資料。如下所示所示: 

使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什么區別。ntpd不僅僅是時間同步服務器,它還可以做客戶端 

與標准時間服務器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可 

同時運行。 

時鍾的躍變,對於某些程序會導致很嚴重的問題。許多應用程序依賴連續的時鍾——畢竟,這是一項常見的假定,即,取得的時 

間是線性的,一些操作,例如數據庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方 

式就是我們所說的”躍變“:在獲得一個時間之后,ntpdate使用settimeofday(2)設置系統時間,這有幾個非常明顯的問 

題:

第一,這樣做不安全。ntpdate的設置依賴於ntp服務器的安全性,攻擊者可以利用一些軟件設計上的缺陷,拿下ntp服務器並 

令與其同步的服務器執行某些消耗性的任務。由於ntpdate采用的方式是跳變,跟隨它的服務器無法知道是否發生了異常(時 

間不一樣的時候,唯一的辦法是以服務器為准)。 

第二,這樣做不精確。一旦ntp服務器宕機,跟隨它的服務器也就會無法同步時間。與此不同,ntpd不僅能夠校准計算機的時 

間,而且能夠校准計算機的時鍾。 

第三,這樣做不夠優雅。由於是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯(例如,如果ntpdate發現你的時間 

快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。因而,唯一一個可以令時間發生跳變的點,是計算機 

剛剛啟動,但還沒有啟動很多服務的那個時候。其余的時候,理想的做法是使用ntpd來校准時鍾,而不是調整計算機時鍾上的 

時間。 

NTPD 在和時間服務器的同步過程中,會把 BIOS 計時器的振盪頻率偏差——或者說 Local Clock 的自然漂移(drift)—— 

記錄下來。這樣即使網絡有問題,本機仍然能維持一個相當精確的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM