[toc] ntp時間伺服器 ntp簡介 NTP(Network Time Protocol,網路時間協議)是用來使網路中的各個電腦時間同步的一種協議。它的用途是把 電腦的時鐘同步到世界協調時UTC,其精度在區域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1 50ms。 NTP服務 ...
目錄
ntp時間伺服器
ntp簡介
NTP(Network Time Protocol,網路時間協議)是用來使網路中的各個電腦時間同步的一種協議。它的用途是把
電腦的時鐘同步到世界協調時UTC,其精度在區域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-
50ms。
NTP伺服器就是利用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
服務端安裝部署
安裝ntp和ntpdate
yum install ntp ntpdate -y
啟動ntp
systemctl start ntpd.service
systemctl enable ntpd.service
查看是否成功
netstat -lntup|grep ntpd
配置ntp配置文件
[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
重啟ntp服務
systemctl restart ntpd.service
==註意==:如果有同步時間的定時任務要將其註銷。否則會衝突
查看ntp伺服器與上層ntp的狀態
[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或主機名,“+”表示優先,“*”表示次優先
refid:參考上一層ntp主機地址
st:stratum階層
when:多少秒前曾經同步過時間
poll:下次更新在多少秒後
reach:已經向上層ntp伺服器要求更新的次數
delay:網路延遲
offset:時間補償
jitter:系統時間與bios時間差
客戶端部署
安裝ntp和ntpdate
yum install ntp ntpdate -y
配置ntp服務配置文件
[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.61 prefer
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
....
....
手動同步一次時間(服務端主機IP,這裡需要先關閉NTP服務哦)
[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
註意:客戶機要等幾分鐘再與新啟動的ntp伺服器進行時間同步,否則會提示以下這個錯誤。
no server suitable for synchronization found
在這裡,你可以設置定時任務,定時向服務端同步時間,亦可以啟動ntp服務,使其自動向服務端同步時間。
啟動ntp
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一下是不是和伺服器主機時間一致呢
擴展一:系統時間與硬體時間同步
如果主從服務時間超過1000秒則不再進行同步了,這時候要手動同步,即:/usr/sbin/ntpdate命令,如果怕伺服器
時差會經常變動比較大可以再Linux中添加計劃任務,例如:
10 5 * * * root /usr/sbin/ntpdate 192.168.31.223 && /sbin/hwclock -w
ntp服務,預設只會同步系統時間。如果想要讓ntp同時同步硬體時間,可以設置/etc/sysconfifig/ntpd文件,
在/etc/sysconfifig/ntpd文件中,添加 SYNC_HWCLOCK=yes 這樣,就可以讓硬體時間與系統時間一起同步。
hwclock -r 讀出BIOS的時間參數
hwclock -w 將當前系統時間寫入BIOS中
擴展二:不同機器之間的時間同步
為了避免主機時間因為長期運作下所導致的時間偏差,進行時間同步(synchronize)的工作是非常必要的。
同步時間,可以使用ntpdate命令,也可以使用ntp服務。
方法一:使用ntpdate比較簡單,格式如下
[root@client ~]# ntpdate 172.16.1.623 May 19:50:44 ntpdate[7507]: step time server 172.16.1.61 offset 1.239826 sec
但這樣的同步,只是強制性的將系統時間設置為ntp 伺服器時間。只是治標不治本。所以,一般配合cron命令,來進
行定期同步設置。比如,在crontab 中添加:
[root@client ~]# crontab -e
0 10 * * * /usr/sbin/ntpdate 172.16.1.61
方法二:使用ntp服務進行同步
要註意的是,ntpd 有一個自我保護設置:如果本機與上源時間相差太大,ntpd 不運行。所以新設置的時間伺服器一
定要先ntpdate 從上源取得時間初值。然後啟動ntpd 服務。
ntp.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)——記錄下來。這樣即使網路有問題,本機仍然能維持一個相當精確的走時。