內網時間同步,ntp與ntpdate區別,與ntp服務器搭建

ntpd、ntpdate的區別
說在前面:ntp和ntpdate區別
①兩個服務都是centos自帶的(centos7中不自帶ntp)。ntp的安裝包名是ntp;ntpdate的安裝包是ntpdate。他們並非由一個安裝包提供。
②ntp守護進程爲ntpd,配置文件是/etc/ntp.conf
③ntpdate用於客戶端的時間矯正,非NTP服務器可以不啓動NTP。

簡介:ntp全名 network time protocol 。NTP服務器可以爲其他主機提供時間校對服務。
下面是網上關於ntpd與ntpdate區別的相關資料。如下所示所示:
使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什麼區別。ntpd不僅僅是時間同步服務器,它還可以做客戶端與標準時間服務器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可同時運行。
時鐘的躍變,對於某些程序會導致很嚴重的問題。許多應用程序依賴連續的時鐘——畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如數據庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之後,ntpdate使用settimeofday(2)設置系統時間,這有幾個非常明顯的問題:
第一,這樣做不安全。ntpdate的設置依賴於ntp服務器的安全性,攻擊者可以利用一些軟件設計上的缺陷,拿下ntp服務器並令與其同步的服務器執行某些消耗性的任務。由於ntpdate採用的方式是跳變,跟隨它的服務器無法知道是否發生了異常(時間不一樣的時候,唯一的辦法是以服務器爲準)。
第二,這樣做不精確。一旦ntp服務器宕機,跟隨它的服務器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。
第三,這樣做不夠優雅。由於是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯(例如,如果ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啓動,但還沒有啓動很多服務的那個時候。其餘的時候,理想的做法是使用ntpd來校準時鐘,而不是調整計算機時鐘上的時間。
NTPD 在和時間服務器的同步過程中,會把 BIOS 計時器的振盪頻率偏差——或者說 Local Clock 的自然漂移(drift)——記錄下來。這樣即使網絡有問題,本機仍然能維持一個相當精確的走時。

注意點:
ntpdate time.ntp.org
但這樣的同步,只是強制性的將系統時間設置爲ntp服務器時間。如果cpu tick有問題,只是治標不治本。所以,一般配合cron命令,來進行定期同步設置。比如,在crontab中添加:
0 12 * * * * /usr/sbin/ntpdate 192.168.0.1
這樣,會在每天的12點整,同步一次時間。ntp服務器爲192.168.0.1。
使用ntpd服務,要好於ntpdate加cron的組合。因爲,ntpdate同步時間,會造成時間的跳躍,對一些依賴時間的程序和服務會造成影響。比如sleep,timer等。而且,ntpd服務可以在修正時間的同時,修正cpu tick。理想的做法爲,在開機的時候,使用ntpdate強制同步時間,在其他時候使用ntpd服務來同步時間。
要注意的是,ntpd有一個自我保護設置: 如果本機與上源時間相差太大, ntpd不運行. 所以新設置的時間服務器一定要先ntpdate從上源取得時間初值, 然後啓動ntpd服務。ntpd服務運行後, 先是每64秒與上源服務器同步一次, 根據每次同步時測得的誤差值經複雜計算逐步調整自己的時間, 隨着誤差減小, 逐步增加同步的間隔. 每次跳動, 都會重複這個調整的過程.

解決方案:
爭對注意點中提出的ntpd同步時,本機與上源時間相差太大,ntpd不運行的,可以在執行ntpd同步之前,先使用ntpdate將時間茶縮小,然後使用ntpd進行時間的平滑同步。

ntp服務器的搭建:
安裝ntp和ntpdate軟件包
服務端啓動服務之後,客戶端使用ntpdate同步就可以了
寫成了一個腳本,如下
vim ntp_install.sh

#!/bin/bash

config_path=/etc/ntp.conf
#yum -y install ntp

while true
do
echo "if you chose installed a server,enter {server}"
echo "If you chose installed a client, enter {client server_ip}"
echo "please entry :"
read param

case "$param" in 
	"server")
	sed -i 's/server 0.centos.pool.ntp.org iburst/#server 0.centos.pool.ntp.org iburst/g' "$config_path" 	
	sed -i 's/server 1.centos.pool.ntp.org iburst/#server 0.centos.pool.ntp.org iburst/g' "$config_path" 	
	sed -i 's/server 2.centos.pool.ntp.org iburst/#server 0.centos.pool.ntp.org iburst/g' "$config_path" 	
	sed -i 's/server 3.centos.pool.ntp.org iburst/#server 0.centos.pool.ntp.org iburst/g' "$config_path" 	
	find_res=$(grep "server 127.127.1.0 prefer" /etc/ntp.conf)
	if [[ -z "$find_res" ]]
	then
	sed -i '$a\server 127.127.1.0 prefer' "$config_path"
	fi

	service  ntpd start
	echo "enter correct"
	break
	;;
	*)
	if [[ "$param" =~ "client"  ]]
	then
	echo "baohan"
	server_ip=$(echo "$param" | awk {'print $2'})
#	sed -i '$a/server '$server_ip'' "$config_path"
	ntpdate "$server_ip" 
	break
	else
	echo "input error,please enter the correct format"
	fi	
	;;
esac
done
echo "time sync ok"

上面這種方式,僅僅適用於內網安裝軟件時,採用的是跳變的時間同步,如果在軟件安裝之前已經安裝有軟件,爲了不對別人的軟件造成影響,建議使用平滑的時間同步。

參考:
https://blog.csdn.net/weixin_34010949/article/details/93521438
https://blog.csdn.net/wqfhenanxc/article/details/81197701
https://www.cnblogs.com/liushui-sky/p/9203657.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章