《Linux centos NTP的配置方法》—那些你應該知道的知識(五)
寫在前面:
在NTP改造的過程中,會涉及到NTP客戶端裝置的NTP配置的修改。不同的作業系統有不同的配置方法,在實際NTP取時的行為過程中也有些許差異,本文將重點闡述Linux centos 作業系統NTP服務的配置方法、不同配置間的差異以及其他值得我們注意的相關技術細節。
知識準備:
在NTP服務端
首先,我們知道專業的NTP裝置,通過衛星同步的方式獲取準確的時間。目前NTP裝置可以選擇同步北斗或者GPS衛星的時間,兩個時間沒有差異。而資料中心內的其他裝置,在裝置數量不大,且網路質量較好的情況下,可以直接向專業的NTP裝置取時,打造扁平化的NTP架構,減少NTP層級,確保我們裝置時間的準確性。
在NTP裝置部署時,要注意裝置天線部署的位置、天線的防雷、饋線的長度等等,這些一般由專業的廠家直接完成,博主不在這裡闡述。
NTP裝置獲取到的時間為UTC時間,所以NTP客戶端到NTP裝置上取得的也是UTC時間。有關時區的設定需要在NTP客戶端本地獨立完成。中國所處的時區比UTC時間快8小時,也就是UTC+8,時區為CST。
在NTP客戶端
針對本文重點要講的Linux centos作業系統,要通過NTP獲取時間一共有兩種方式。分別是ntpdate和ntpd
ntpdate—採用這種方式,作業系統會直接發起向NTP裝置的時間同步請求,作業系統的時間會直接調整到從NTP伺服器獲取到的準確時間。獲取準確時間後,作業系統將依賴作業系統本身的運算機制計算本地時間,而不會再去進行同步。所以,有些作業系統會配合crontab,定時進行時間的同步工作。
ntpd—採用這種方式,作業系統會去嘗試與NTP裝置進行時間同步,當發現兩者的時間偏差較大的時候,會通過多次同步過程來完成同步,而不是直接調整到位。這個過程可能會持續10幾分鐘,甚至更多的時間,這取決於時間偏差有多少,直到作業系統時間準確。之後作業系統會以一定的間隔向NTP裝置同步時間,保持作業系統時間的同步。
我們知道有些程式—尤其是資料庫在執行時依賴時間的準確性,而採用ntpdate的方式,直接將作業系統時間同步,可能會導致作業系統時間發生躍變,因此我們選擇採用ntpd的方式,來同步時間。
在NTP客戶端層面,除了作業系統時間以外,還有硬體時間的概念。硬體時間一般是硬體裝置在出廠時裝置製造地在硬體底層便設定好的,我們可以設定硬體時間與作業系統時間進行同步,確保硬體時間是我們當地的時間。
具體怎麼做:
手動設定的方法:
首先,我們可以通過date命令檢視當前時間
[[email protected] ~]# date
Mon Oct 1 00:00:01 CST 2018
這裡,我們可以看到當前的時間,時區為CST時間,我們可以通過timedatectl檢視當前的時區
[[email protected] ~]# timedatectl
Local time: Wed 2018-10-24 11:19:42 CST
Universal time: Wed 2018-10-24 03:19:42 UTC
RTC time: Wed 2018-10-24 03:19:43
Timezone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
可以通過hwclock檢視當前硬體時間
[[email protected] ~]# hwclock
Wed 24 Oct 2018 10:16:33 AM CST -0.864798 seconds
通過hwclock -w 將作業系統時間同步到硬體時間
[[email protected] ~]# hwclock -w
[[email protected] ~]# hwclock
Mon 01 Oct 2018 12:01:25 AM CST -0.956970 seconds
除了通過NTP同步時間以外,我們也可以通過date-s手動設定時間
[[email protected] ~]# date -s "20181001 00:00:00"
Mon Oct 1 00:00:00 CST 2018
手動設定時區
timedatectl set-timezone Asia/Shanghai
採用ntpd的方式進行同步:
首先要安裝ntp服務,可以與網際網路通訊的話,可以通過yum進行安裝
yum -y install ntp
檢視當前ntp狀態
[[email protected] ~]# ntpstat
timeout
NTP設定主要涉及到兩個配置檔案,分別為在/etc/ntp.conf和/etc/sysconfig/ntpd
在/etc/ntp.conf設定NTP伺服器
[[email protected] ~]# vi /etc/ntp.conf
server cn.pool.ntp.org prefer
上述用到的cn.pool.ntp.org為網際網路上的一個提供ntp服務的網址
重啟NTPD服務
[[email protected] ~]# service ntpd restart
Redirecting to /bin/systemctl restart ntpd.service
檢視當前NTP狀態
[[email protected] ~]# ntpstat
unsynchronised
time server re-starting
polling server every 8 s
檢視NTP同步情況
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.126.98 .INIT. 16 u - 64 0 0.000 0.000 0.000
dns1.synet.edu. 202.118.1.46 2 u 27 64 1 44.996 2024174 0.000
這裡有幾個重要引數,when代表了多少秒前進行了時間的同步;poll代表了時間同步的間隔;delay代表從客戶端到NTP服務端之間的延時;offset代表了當前時間的差距。
可見當前作業系統時間與NTP伺服器有較大的差距
過了一會
[[email protected] ~]# ntpstat
unsynchronised
polling server every 64 s
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.126.98 .STEP. 16 u - 64 0 0.000 0.000 0.000
203.107.6.88 100.107.25.114 2 u 45 64 1 24.507 6.837 0.000
等待了十幾分鍾以後
[[email protected] ~]# ntpstat
synchronised to NTP server (203.107.6.88) at stratum 3
time correct to within 43 ms
polling server every 64 s
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.126.98 .STEP. 16 u - 512 0 0.000 0.000 0.000
*203.107.6.88 100.107.25.114 2 u 24 64 377 24.974 17.522 2.376
過了一會,同步成功
[[email protected] ~]# ntpstat
synchronised to NTP server (203.107.6.88) at stratum 3
time correct to within 42 ms
polling server every 128 s
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.126.98 .STEP. 16 u - 1024 0 0.000 0.000 0.000
*203.107.6.88 10.165.84.13 2 u 124 128 377 20.336 -5.768 3.414
其他ntpd引數設定
-g引數
檢視當前ntpd的配置,系統預設使用了-g引數
[[email protected] ~]# cat /etc/sysconfig/ntpd
# Command line options for ntpd
OPTIONS="-g"
這裡解釋一下-g引數,通過增加-g 可忽略本地與遠端NTP伺服器時鐘相差大於1000s時,ntpd停止工作的問題,如果不設定-g引數,當偏差大於1000s時,ntp服務會停止,測試過程如下:
在這裡我們嘗試不使用 無 -g引數,檢視使用效果
[[email protected] ~]# cat /etc/sysconfig/ntpd
# Command line options for ntpd
# OPTIONS="-g"
重啟ntpd服務
[[email protected] ~]# service ntpd restart
Redirecting to /bin/systemctl restart ntpd.service
檢視當前ntp狀態
[[email protected] ~]# ntpstat
unsynchronised
time server re-starting
polling server every 8 s
[[email protected] ~]# ^C
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.126.98 .INIT. 16 u - 64 0 0.000 0.000 0.000
dns1.synet.edu. 202.118.1.46 2 u 27 64 1 44.996 2024174 0.000
過一會在看
[[email protected] ~]# ntpstat
Unable to talk to NTP daemon. Is it running?
[[email protected] ~]# ntpq -p
ntpq: read: Connection refused
可見NTP服務停止。
-x引數
設定-x引數 作業系統在進行NTP同步時只做微調,當偏差大於600s時步進,但也不是一次到位的。
不使用-x引數 則小於128ms時微調,大於128ms步進,同樣,也不是一步到位的。
centos系統預設是不帶-x引數的,配置方法如下:
[[email protected]_tcp_2 ~]# cat /etc/sysconfig/ntpd
# Command line options for ntpd
OPTIONS="-g -x"
-x的引數帶來的差異不好模擬,沒有做相關實驗。
SYNC_HWCLOCK引數
可用該引數保持硬體時間與作業系統時間的自動同步,配製方法如下:
[[email protected]_tcp_2 ~]# cat /etc/sysconfig/ntpd
# Command line options for ntpd
OPTIONS="-g"
SYNC_HWCLOCK=yes
該引數設定帶來的差異,在虛擬機器環境沒有模擬出來。
ntpdate的使用
我們也可以通過ntpdate的方式,手動進行時間的同步,在前文已經講到,使用這種方式同步時間,作業系統的時間會一次到位,但可能會影響應用程式的執行,需要謹慎操作,使用時需要重啟NTP服務,使用效果如下:
[[email protected] ~]# date -s "20181001 00:00:00"
Mon Oct 1 00:00:00 CST 2018
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# date
Mon Oct 1 00:00:01 CST 2018
[[email protected] ~]# ntpdate cn.pool.ntp.org
24 Oct 13:05:00 ntpdate[3059]: step time server 34.198.99.183 offset 2034288.744837 sec
[[email protected] ~]# date
Wed Oct 24 13:05:04 CST 2018
可見,作業系統時間直接同步到了準確的時間
總結
至此,我將目前所掌握的NTP配製方法和相關引數帶來的差異在前文中進行了講述,並做了相關的實驗。除了配製方法以外,我們應該能夠熟練地使用ntpstat命令和ntpq -p命令,檢視當前ntp同步的狀態。希望以上內容能夠對大家有所幫助。除了上文講到的引數以外,在作業系統中,應該還有許多其他NTP引數可以進行設定,以後工作中有需要再去研究吧~