歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux下ntp服務器的維護

上篇博文Linux實戰部署系列之ntp服務器----操作篇為大家講解了如何去部署簡易架構下的實現負載均衡和高可用的NTP服務器。接下來,我們就需要了解了解維護方面的技術,這樣才能更好的為公司業務保駕護航啊。

NTP服務器的維護大概分為2部分,第一部分為日常管理命令和常用操作,第二部分為錯誤的排查和解決方案

第一部分:管理命令

1、ntpstat命令

ntpstat是用來查看ntp服務器和上層是否連通的命令

[root@c64-ntp-1 ~]# ntpstat
synchronised to NTP server (202.112.31.197) at stratum 3
  timecorrect to within 81 ms
  polling server every 64 s

當執行命令,出現synchronised之後,才表示連通狀態。這個過程大約需要在啟動之後5分鐘才行,為什麼5分鐘呢,下面就會講到。

2、ntpq命令

ntpq是用來監視ntpd進程操作的,使用標准的NTP模式6的控制消息模式,並與NTP服務器通信。

ntpq -p查詢網絡中的NTP服務器,同時顯示目前NTP服務器和上級NTP服務器的關系。

[root@c64-ntp-1 ~]# ntpq -p
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp.glnet.edu.c 202.112.10.60    2 u   23   64  377   63.481   37.308  16.341
+Hshh.org        204.152.184.72   2 u   16   64  377   15.475   33.557  15.059
*dns2.synet.edu. 202.118.1.46     2 u   47   64  377   47.493   35.020  15.339

選項詳解:

remote: 指最先響應這個請求的NTP服務器的名稱
refid: 指給本地NTP服務器提供時間同步的上級NTP服務器源。
st: 該值用來表示上級NTP服務器源的層級別。由於NTP是層型結構,有頂端的服務器,多層的NTP服務器源,再到客戶端。所以服務器從高到低級別可以設定為1-16。為了減緩負荷和網絡堵塞,原則上應該避免直接連接到層級別為1的服務器上。
t: 該值用來表示遠程服務器的類型,有如下類型:u代表單播或多播的客戶端,b代表廣播或組播服務器,l代表本地(參考時鐘),s代表同級NTP服務器, A代表多播服務器,B代表廣播服務器,M代表組播服務器
when: 該值為自上次接收到數據包的時間距離當前的時間值
poll: 該值為本地NTP服務器和上級NTP服務器源的輪詢間隔,即雙方每過多久同步一次(單位為秒)。在NTP剛開始運行時,poll值會比較小,此時和上級NTP服務器源同步的頻率就會增加,因此可以盡快調整到正確的時間范圍內。之後poll值就會逐漸增大,同步的頻率也就會相應減小。
reach:這是一個八進制值,用來測試能否和服務器連接.每成功連接一次它的值就會增加
delay:該值為本地NTP服務器和上級NTP服務器源的NTP報文的往返時延。
offset:該值為本地NTP服務器和上級NTP服務器源的時間差值。該值越接近0,我們和上級NTP服務器源的時間就越准確。
jitter:該值是用來統計在特定個連續的連接數裡面offset(時間差值)的分布情況。該數值的絕對值越小,我們和上級NTP服務器源的時間就越准確。

知道了每個參數的作用,我們大家也許會有疑問,我明明添加的三台上級NTP源服務器不是這三個地址啊,為什麼這裡會出現這三個地址呢?

第一、因為NTP提供給我們的是一個Cluster Server的服務器集群,所以每次連接得到的服務器都有可能不一樣。同樣也告訴我們了在指定NTP服務器地址時應該使用hostname而不是IP。

第二、既然這麼多的服務器是為了在一台出問題的時候其他的服務器還可以正常地給我們提供服務。那麼如何知道這些服務器的狀態呢?這就是第一列的第一個字符的用途了!它會告訴我們服務器的情況,讓我們做做出判斷。

*  它告訴我們遠端的服務器已經被確認為我們的主NTP Server,我們系統的時間將由這台機器所提供
+  它將作為輔助的NTP Server和帶有*號的服務器一起為我們提供同步服務. 當*號服務器不可用時它就可以接管
- 遠程服務器被clustering algorithm(聚類算法)認為是不合格的NTP服務器
" "(空格) 沒有響應的NTP服務器
x 遠程服務器不可用

3、ntptrace命令

ntptrace是用來用來追蹤NTP服務器與某台時間服務器的時間對應關系的

[root@c64-ntp-1 ~]# ntptrace -n 1.cn.pool.ntp.org
1.cn.pool.ntp.org: stratum 2, offset 0.007372, synch distance 0.097818

第二部分:錯誤排查

當我們在客戶端用ntpdate IP來同步NTP服務器時間時,有時會發現報no server suitable for synchronization found的信息,導致該信息產生的原因主要有以下2個:

第一、Server dropped: Strata too high

在NTP客戶端運行ntpdate IP時,出現no server suitable for synchronization found的錯誤。

[root@c64-client ~]# /usr/sbin/ntpdate 192.168.1.111
3 Nov 06:20:45 ntpdate[48188]: no server suitable forsynchronization found

在NTP客戶端用ntpdate –d IP查看,發現有“Server dropped: strata too high”的錯誤,並且顯示“stratum 16”。而正常情況下stratum這個值得范圍是“0~15”。

[root@c64-client ~]# /usr/sbin/ntpdate -d 192.168.1.111
3Nov 06:19:55ntpdate[48178]: ntpdate [email protected] Fri Feb 2211:23:28UTC 2013(1)
Looking forhost 192.168.1.111and service ntp
host found : 192.168.1.111
transmit(192.168.1.111)
receive(192.168.1.111)
transmit(192.168.1.111)
receive(192.168.1.111)
transmit(192.168.1.111)
receive(192.168.1.111)
transmit(192.168.1.111)
receive(192.168.1.111)
transmit(192.168.1.111)
192.168.1.111: Server dropped: strata too high
server 192.168.1.111, port 123
stratum 16, precision -24, leap 11, trust 000   #stratum的值正常范圍為1-16
refid [192.168.1.111], delay 0.02684, dispersion 0.00017
transmitted 4, infilter 4
reference time:    00000000.00000000  Thu, Feb  72036  6:28:16.000
originate timestamp: d620698b.ac24dcce  Sun, Nov  32013  6:19:55.672

transmit timestamp:  d620698b.9f531149  Sun, Nov  32013  6:19:55.622
filter delay:  0.02698  0.02774  0.02768  0.02684
        0.00000  0.00000  0.00000  0.00000
filter offset: 0.0493170.0489290.0488610.049286
        0.0000000.0000000.0000000.000000
delay 0.02684, dispersion 0.00017
offset 0.049286
3Nov 06:19:55ntpdate[48178]: no server suitable forsynchronization found

這是因為NTP服務器還沒有和其自身或者它的server同步上。

以下的定義是讓NTP服務器和其自身保持同步,如果在/etc/ntp.conf中定義的server都不可用時,將使用本地時間作為NTP服務提供給NTP客戶端。

添加以下內容到/etc/ntp.conf文件裡面即可

server 127.127.1.0
fudge 127.127.1.0 stratum 8

 

在NTP服務器上重新啟動ntpd服務後,NTP服務器自身或者與其上級NTP服務器源的同步需要一個時間段,這個過程可能是5分鐘,在這個時間之內客戶端運行ntpdate命令時就會產生no server suitable for synchronization found這樣的錯誤。

那麼如何知道何時NTP服務器完成了和自身同步的過程呢?

在NTP服務器上使用如下命令:

[root@c64-ntp-1 ~]# watch ntpq -p
出現畫面:
Every 2.0s: ntpq -p                                     Sun Nov  3 14:26:59 2013
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
gus.buptnet.edu 202.112.10.60    2 u    7   64    3   49.205    0.093   1.257
dns2.synet.edu. 202.118.1.46     2 u    6   64    3  369.197  150.284  63.078
LOCAL(0)        .LOCL.           8 l    6   64    3    0.000    0.000   0.000

注意LOCAL的這個就是與自身同步的ntp server。

注意reach這個值,在啟動NTP服務端啟動ntpd服務後,這個值就從0開始不斷增加,當增加到17的時候(poll是經過5次的變更實現從0到17的),每一次是poll的值的秒數,即64秒*5=320秒的時間。

如果之後從NTP客戶端同步NTP服務器還失敗的話,用ntpdate –d IP來查詢詳細錯誤信息,再做判斷。

第二、Server dropped: no data

從客戶端執行netdate –d時有錯誤信息如下:

[root@c64-client ~]# /usr/sbin/ntpdate -d 192.168.1.111
3Nov 06:50:02ntpdate[48271]: ntpdate [email protected] Fri Feb 2211:23:28UTC 2013(1)
Looking forhost 192.168.1.111and service ntp
host found : 192.168.1.111
transmit(192.168.1.111)
transmit(192.168.1.111)
transmit(192.168.1.111)
transmit(192.168.1.111)
transmit(192.168.1.111)
192.168.1.111: Server dropped: no data      #此處顯示no data
server 192.168.1.111, port 123
stratum 0, precision 0, leap 00, trust 000
refid [192.168.1.111], delay 0.00000, dispersion 64.00000
transmitted 4, infilter 4
reference time:    00000000.00000000  Thu, Feb  72036  6:28:16.000
originate timestamp: 00000000.00000000  Thu, Feb  72036  6:28:16.000
transmit timestamp:  d620709d.580fb4d8  Sun, Nov  32013  6:50:05.343
filter delay:  0.00000  0.00000  0.00000  0.00000
        0.00000  0.00000  0.00000  0.00000
filter offset: 0.0000000.0000000.0000000.000000
        0.0000000.0000000.0000000.000000
delay 0.00000, dispersion 64.00000
offset 0.000000
3Nov 06:50:06ntpdate[48271]: no server suitable forsynchronization found

出現這個問題的原因可能有兩點:

1)檢查ntp的版本

如果你使用的是ntp-4.2(包括4.2)之後的版本,那麼在restrict的定義中使用了notrust的話,會導致以上錯誤。

我們可以用下面的命令檢查ntp的版本

[root@c64-ntp-1 ~]# ntpq -c version
ntpq [email protected] Fri Feb 22 11:23:30 UTC 2013 (1)

大家可以看到我這裡用的版本是4.2.4的。

下面我截取了NTP官方文檔對此問題的解釋:

The behavior of notrust changed between versions 4.1 and 4.2.
In 4.1 (and earlier) notrust meant "Don't trust this host/subnet for time".
In 4.2 (and later) notrust means "Ignore all NTP packets that are not cryptographically authenticated."This forces remote timeservers to authenticate themselves to your (client) ntpd

解放方案:

編譯/etc/ntp.conf,把notrust去掉即可。

2)檢查NTP服務器的防火牆

導致此種問題的另一原因就是NTP服務器的防火牆屏蔽了upd的123號端口。

[root@c64-ntp-1 ~]# /etc/init.d/iptables stop   #先關閉防火牆,進行錯誤排查

我們可以先關閉iptables服務之後,再嘗試從NTP客戶端進行時間同步。如果時間同步成功,則證明是防火牆的問題,那麼我們就需要更改iptables的配置策略了。

到這裡,本系列博文就告一段落了。我用了3篇博文來為大家講述時間和NTP的概念,以及在生產環境下的簡易機構的實現負載均衡和高可用功能的NTP服務器部署流程,然後在末尾一篇為大家介紹了一些NTP服務的日常管理命令和錯誤排查流程。這裡也是給加一個思路,當出問題的時候,能更好的去解決它。希望對大家有所幫助!

本文出自 “sunsky” 博客,請務必保留此出處http://sunsky.blog.51cto.com/4824967/1319597

Copyright © Linux教程網 All Rights Reserved