• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Error

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

            date顯示時(shí)間
            tsselect設(shè)置時(shí)區(qū)



            本文是基本是[Linux的時(shí)間設(shè)置與同步(NTP)]的原文,只在一些地方更新和完善了一下。

              一、時(shí)間和時(shí)區(qū)

              如果有人問你說現(xiàn)在幾點(diǎn)? 你看了看表回答他說晚上8點(diǎn)了. 這樣回答看上去沒有什么問題,但是如果問你的這個(gè)人在歐洲的話那么你的回答就會(huì)讓他很疑惑,因?yàn)樗抢镞€太陽(yáng)當(dāng)空呢.

              這里就有產(chǎn)生了一個(gè)如何定義時(shí)間的問題. 因?yàn)樵诘厍颦h(huán)繞太陽(yáng)旋轉(zhuǎn)的24個(gè)小時(shí)中,世界各地日出日落的時(shí)間是不一樣的.所以我們才有劃分時(shí)區(qū)(timezone) 的必要,也就是把全球劃分成24個(gè)不同的時(shí)區(qū). 所以我們可以把時(shí)間的定義理解為一個(gè)時(shí)間的值加上所在地的時(shí)區(qū)(注意這個(gè)所在地可以精確到城市)

              地理課上我們都學(xué)過格林威治時(shí)間(GMT), 它也就是0時(shí)區(qū)時(shí)間. 但是我們?cè)谟?jì)算機(jī)中經(jīng)常看到的是UTC. 它是Coordinated Universal Time的簡(jiǎn)寫. 雖然可以認(rèn)為UTC和GMT的值相等(誤差相當(dāng)之小),但是UTC已經(jīng)被認(rèn)定為是國(guó)際標(biāo)準(zhǔn),所以我們都應(yīng)該遵守標(biāo)準(zhǔn)只使用UTC

              那么假如現(xiàn)在中國(guó)當(dāng)?shù)氐臅r(shí)間是晚上8點(diǎn)的話,我們可以有下面兩種表示方式

              20:00 CST
              12:00 UTC

              這里的CST是Chinese Standard Time,也就是我們通常所說的北京時(shí)間了. 因?yàn)橹袊?guó)處在UTC+8時(shí)區(qū),依次類推那么也就是12:00 UTC了.

              第一,不管通過任何渠道我們想要同步系統(tǒng)的時(shí)間,通常提供方只會(huì)給出UTC+0的時(shí)間值而不會(huì)提供時(shí)區(qū)(因?yàn)樗恢滥阍谀睦?.所以當(dāng)我們?cè)O(shè)置系統(tǒng)時(shí)間的時(shí)候,設(shè)置好時(shí)區(qū)是首先要做的工作

              第二,很多國(guó)家都有夏令時(shí),那就是在一年當(dāng)中的某一天時(shí)鐘撥快一小時(shí)(比如從UTC+8一下變成UTC+9了),那么同理到時(shí)候還要再撥慢回來.如果我們?cè)O(shè)置了正確的時(shí)區(qū),當(dāng)需要改變時(shí)間的時(shí)候系統(tǒng)就會(huì)自動(dòng)替我們調(diào)整

              現(xiàn)在我們就來看一下如何在Linux下設(shè)置時(shí)區(qū),也就是time zone

              二、如何設(shè)置Linux Time Zone

              在Linux下glibc提供了我們事先編譯好的許多timezone文件, 他們就放在/usr/share/zoneinfo這個(gè)目錄下,這里基本涵蓋了大部分的國(guó)家和城市

            ?View Code BASH
            1 2 3 4 5 6 7 
              # ls -F /usr/share/zoneinfo/   Africa/      Asia/       Canada/  Cuba   EST      Factory  GMT0       Hongkong  Iran         Japan      Mexico/   Navajo    Poland      PRC      ROK        Universal  W-SU America/     Atlantic/   CET      EET    EST5EDT  GB       GMT-0      HST       iso3166.tab  Kwajalein  Mideast/  NZ        Portugal    PST8PDT  Singapore  US/        zone.tab Antarctica/  Australia/  Chile/   Egypt  Etc/     GB-Eire  GMT+0      Iceland   Israel       Libya      MST       NZ-CHAT   posix/      right/   Turkey     UTC        Zulu Arctic/      Brazil/     CST6CDT  Eire   Europe/  GMT      Greenwich  Indian/   Jamaica      MET        MST7MDT   Pacific/  posixrules  ROC      UCT        WET

              在這里面我們就可以找到自己所在城市的time zone文件. 那么如果我們想查看對(duì)于每個(gè)time zone當(dāng)前的時(shí)間我們可以用zdump命令

            ?View Code BASH
            1 2 3 
            # zdump  /usr/share/zoneinfo/Asia/Chongqing    # /usr/share/zoneinfo/Asia/Chongqing  Fri May 27 10:35:24 2011 CST

              那么我們又怎么來告訴系統(tǒng)我們所在time zone是哪個(gè)呢? 方法有很多,這里舉出兩種

              第一個(gè)就是修改/etc/localtime這個(gè)文件,這個(gè)文件定義了我么所在的local time zone.

              我們可以在/usr/share/zoneinfo下找到我們的time zone文件然后拷貝去到/etc/localtimezone(或者做個(gè)symbolic link)
             
              假設(shè)我們現(xiàn)在的time zone是BST(也就是英國(guó)的夏令時(shí)間,UTC+1)

            ?View Code BASH
            1 2 
            # date 2011年 05月 27日 星期五 10:52:05 CST

              我們想把time zone換成重慶所在的時(shí)區(qū)就可以這么做

            ?View Code BASH
            1 2 3 4 
            # ln -sf /usr/share/zoneinfo/posix/Asia/Chongqing  /etc/localtime    # date 2011年 05月 27日 星期五 10:39:18 CST

              這樣時(shí)區(qū)就改過來了(注意時(shí)間也做了相應(yīng)的調(diào)整)

              第二種方法也就設(shè)置TZ環(huán)境變量的值. 許多程序和命令都會(huì)用到這個(gè)變量的值. TZ的值可以有多種格式,最簡(jiǎn)單的設(shè)置方法就是使用tzselect命令

            ?View Code BASH
            1 2 3 4 
            # tzselect  ...   TZ='Asia/Chongqing'; export TZ

              tzselect是一個(gè)交互式腳本,會(huì)讓你選擇所在的國(guó)家和城市(這里省略了這些步驟),最后輸出相應(yīng)的TZ變量的值.那么如果你設(shè)置了TZ的值之后時(shí)區(qū)就又會(huì)發(fā)生變化

              注:交互選擇這個(gè)過程,其實(shí)就是為了確定TZ變量的值,如果你知道正確的值,可以設(shè)定就可以了。

            ?View Code BASH
            1 2 
            # date 2011年 05月 27日 星期五 10:52:05 CST

              通過這兩個(gè)例子我們也可以發(fā)現(xiàn)TZ變量的值會(huì)優(yōu)先于/etc/localtime. 也就是說當(dāng)TZ變量沒有定義的時(shí)候系統(tǒng)才使用/etc/localtime來確定time zone. 所以你想永久修改time zone的話那么可以把TZ變量的設(shè)置寫入/etc/profile里

              好了現(xiàn)在我們知道怎么設(shè)置時(shí)區(qū)了,下面我們就來看看如何設(shè)置Linux的時(shí)間吧

              三、Real Time Clock(RTC) and System Clock

              說道設(shè)置時(shí)間這里還要明確另外一個(gè)概念就是在一臺(tái)計(jì)算機(jī)上我們有兩個(gè)時(shí)鐘:一個(gè)稱之為硬件時(shí)間時(shí)鐘(RTC),還有一個(gè)稱之為系統(tǒng)時(shí)鐘(System Clock)

              硬件時(shí)鐘是指嵌在主板上的特殊的電路, 它的存在就是平時(shí)我們關(guān)機(jī)之后還可以計(jì)算時(shí)間的原因

              系統(tǒng)時(shí)鐘就是操作系統(tǒng)的kernel所用來計(jì)算時(shí)間的時(shí)鐘. 它從1970年1月1日00:00:00 UTC時(shí)間到目前為止秒數(shù)總和的值 在Linux下系統(tǒng)時(shí)間在開機(jī)的時(shí)候會(huì)和硬件時(shí)間同步(synchronization),之后也就各自獨(dú)立運(yùn)行了

              那么既然兩個(gè)時(shí)鐘獨(dú)自運(yùn)行,那么時(shí)間久了必然就會(huì)產(chǎn)生誤差了,下面我們來看一個(gè)例子

            ?View Code BASH
            1 2 3 4 5 
            # date 2011年 05月 27日 星期五 10:59:27 CST   # hwclock --show 2011年05月27日 星期五 11時(shí)02分29秒  -0.863266 seconds

              通過hwclock –show或hwclock -r命令我們可以查看機(jī)器上的硬件時(shí)間(always in local time zone), 我們可以看到它和系統(tǒng)時(shí)間還是有一定的誤差的, 那么我們就需要把他們同步

              如果我們想要把硬件時(shí)間設(shè)置成系統(tǒng)時(shí)間我們可以運(yùn)行以下命令

            ?View Code BASH
            1 2 3 
            # hwclock --hctosys 或者 # hwclock -s

              反之,我們也可以把系統(tǒng)時(shí)間設(shè)置成硬件時(shí)間

            ?View Code BASH
            1 2 3 
            # hwclock --systohc 或者 # hwclock -w

              那么如果想設(shè)置硬件時(shí)間我們可以開機(jī)的時(shí)候在BIOS里設(shè)定.也可以用hwclock命令

            ?View Code BASH
            1 
            # hwclock --set --date="mm/dd/yy hh:mm:ss"

              如果想要修改系統(tǒng)時(shí)間那么用date命令就最簡(jiǎn)單了

            ?View Code BASH
            1 
            # date -s "yy-mm-dd hh:mm:ss"

              現(xiàn)在我們知道了如何設(shè)置系統(tǒng)和硬件的時(shí)間. 但問題是如果這兩個(gè)時(shí)間都不準(zhǔn)確了怎么辦? 那么我們就需要在互聯(lián)網(wǎng)上找到一個(gè)可以提供我們準(zhǔn)確時(shí)間的服務(wù)器然后通過一種協(xié)議來同步我們的系統(tǒng)時(shí)間,那么這個(gè)協(xié)議就是NTP了. 注意接下去我們所要說的同步就都是指系統(tǒng)時(shí)間和網(wǎng)絡(luò)服務(wù)器之間的同步了

              四、設(shè)置NTP Server前的準(zhǔn)備

              其實(shí)這個(gè)標(biāo)題應(yīng)該改為設(shè)置”NTP Relay Server”前的準(zhǔn)備更加合適. 因?yàn)椴徽撐覀兊挠?jì)算機(jī)配置多好運(yùn)行時(shí)間久了都會(huì)產(chǎn)生誤差,所以不足以給互聯(lián)網(wǎng)上的其他服務(wù)器做NTP Server. 真正能夠精確地測(cè)算時(shí)間的還是原子鐘. 但由于原子鐘十分的昂貴,只有少部分組織擁有, 他們連接到計(jì)算機(jī)之后就成了一臺(tái)真正的NTP Server. 而我們所要做的就是連接到這些服務(wù)器上同步我們系統(tǒng)的時(shí)間,然后把我們自己的服務(wù)器做成NTP Relay Server再給互聯(lián)網(wǎng)或者是局域網(wǎng)內(nèi)的用戶提供同步服務(wù)

              好了,前面講了一大堆理論,現(xiàn)在我們來動(dòng)手實(shí)踐一下吧. 架設(shè)一個(gè)NTP Relay Server其實(shí)非常簡(jiǎn)單,我們先把需要的RPM包裝上

            ?View Code BASH
            1 
            # rpm -ivh ntp-4.2.2p1-9.el5.centos.2.1.x86_64.rpm

              那么第一步我們就要找到在互聯(lián)網(wǎng)上給我們提供同步服務(wù)的NTP Server

              http://www.pool.ntp.org是NTP的官方網(wǎng)站,在這上面我們可以找到離我們城市最近的NTP Server. NTP建議我們?yōu)榱吮U蠒r(shí)間的準(zhǔn)確性,最少找兩個(gè)個(gè)NTP Server
            那么比如在中國(guó)的話就可以選擇下面幾個(gè)服務(wù)器

            ?View Code BASH
            1 2 3 
            server 1.cn.pool.ntp.org server 0.asia.pool.ntp.org server 3.asia.pool.ntp.org

              它的一般格式都是number.country.pool.ntp.org

              第二步要做的就是在打開NTP服務(wù)器之前先和這些服務(wù)器做一個(gè)同步,使得我們機(jī)器的時(shí)間盡量接近標(biāo)準(zhǔn)時(shí)間. 這里我們可以用ntpdate命令

            ?View Code BASH
            1 2 3 4 5 
            # ntpdate 1.cn.pool.ntp.org 27 May 11:18:56 ntpdate[26465]: adjust time server 61.153.197.226 offset 0.276787 sec   # ntpdate 0.asia.pool.ntp.org 27 May 11:20:01 ntpdate[26470]: adjust time server 122.226.192.4 offset 0.211920 sec

              假如你的時(shí)間差的很離譜的話第一次會(huì)看到調(diào)整的幅度比較大,所以保險(xiǎn)起見可以運(yùn)行兩次. 那么為什么在打開NTP服務(wù)之前先要手動(dòng)運(yùn)行同步呢?

              1. 因?yàn)楦鶕?jù)NTP的設(shè)置,如果你的系統(tǒng)時(shí)間比正確時(shí)間要快的話那么NTP是不會(huì)幫你調(diào)整的,所以要么你把時(shí)間設(shè)置回去,要么先做一個(gè)手動(dòng)同步
              2. 當(dāng)你的時(shí)間設(shè)置和NTP服務(wù)器的時(shí)間相差很大的時(shí)候,NTP會(huì)花上較長(zhǎng)一段時(shí)間進(jìn)行調(diào)整.所以手動(dòng)同步可以減少這段時(shí)間

              五、配置和運(yùn)行NTP Server

              現(xiàn)在我們就來創(chuàng)建NTP的配置文件了, 它就是/etc/ntp.conf. 我們只需要加入上面的NTP Server和一個(gè)driftfile就可以了

            ?View Code BASH
            1 2 3 4 5 6 7 8 9 10 11 12 13 14 
            # vi /etc/ntp.conf   #注釋掉缺省的NTP服務(wù)器并添加兩個(gè)位置比較近的NTP服務(wù)器   #server 0.centos.pool.ntp.org #server 1.centos.pool.ntp.org #server 2.centos.pool.ntp.org server 1.cn.pool.ntp.org server 0.asia.pool.ntp.org driftfile /var/lib/ntp/drift   #預(yù)設(shè)的一個(gè)內(nèi)部時(shí)鐘資料,用在沒有外部NTP服務(wù)器時(shí),這里我們可以將它注解掉: # server    127.127.1.0     # local clock # fudge     127.127.1.0 stratum 10

              ntp.conf配置說明

              利用server設(shè)定上層NTP伺服器,上層 NTP 伺服器的設(shè)定方式為:

              server [IP or hostname] [prefer]

              在server后端可以接IP或主機(jī)名稱,perfer表示[優(yōu)先使用]的主機(jī)。

              以driftfile記錄時(shí)間差異

              設(shè)定的方式如下:

              driftfile [可以被ntpd寫入的目錄與檔案]

              因?yàn)轭A(yù)設(shè)的NTP Server本身的時(shí)間計(jì)算是依據(jù)BIOS的晶片震蕩周期頻率來計(jì)算的,但是這個(gè)數(shù)值與上層Time Server有誤差.所以NTP這個(gè)daemon(ntpd)會(huì)自動(dòng)的去計(jì)算我們自己主機(jī)的頻率與上層Time server的頻率,并且將兩個(gè)頻率的誤差記錄下來,記錄下來的檔案就是在driftfile后面接的完整文件名中了!

              關(guān)于文件名你必須要知道:

              driftfile后面接的文件需要使用完整路徑;
              該文件不能是連結(jié)檔;
              該文件需要設(shè)定成 ntpd 這個(gè) daemon 可以寫入的權(quán)限。
              該文件所記錄的數(shù)值單位為:百萬分之一秒(ppm)。
              driftfile后面接的檔案會(huì)被ntpd自動(dòng)更新,所以他的權(quán)限一定要能夠讓ntpd 寫入才行。在CentOS 5.x預(yù)設(shè)的NTP伺服器中,使用的ntpd的owner是ntp ,這部份在/etc/sysconfig/ntpd中設(shè)置的!

              如何同步硬件時(shí)鐘?
              
              NTP一般只會(huì)同步system clock。但是如果我們也要同步RTC的話那么只需要把下面的選項(xiàng)打開就可以了

            ?View Code BASH
            1 2 
            # vi /etc/sysconfig/ntpd SYNC_HWCLOCK=yes

              接下來我們就啟動(dòng)NTP Server,并且設(shè)置其在開機(jī)后自動(dòng)運(yùn)行

            ?View Code BASH
            1 2 3 
            # /etc/init.d/ntpd/start    # chkconfig --level 35 ntpd on

              六、查看NTP服務(wù)的運(yùn)行狀況

              現(xiàn)在我們已經(jīng)啟動(dòng)了NTP的服務(wù),但是我們的系統(tǒng)時(shí)間到底和服務(wù)器同步了沒有呢? 為此NTP提供了一個(gè)很好的查看工具: ntpq(NTP query)

              我建議大家在打開NTP服務(wù)器后就可以運(yùn)行ntpq命令來監(jiān)測(cè)服務(wù)器的運(yùn)行.這里我們可以使用watch命令來查看一段時(shí)間內(nèi)服務(wù)器各項(xiàng)數(shù)值的變化

            ?View Code BASH
            1 2 3 4 5 6 7 8 
            # watch ntpq -p Every 2.0s: ntpq -p                                                                                                                                                               Fri May 27 14:06:57 2011        remote           refid	 st t when poll reach   delay   offset  jitter ==============================================================================  Hshh.org        209.81.9.7	  2 u   35   64    7  103.838  361.111  87.482  time.uni.net.th 202.28.214.2     2 u   98   64    6  450.107  343.325 137.580  LOCAL(0)        .LOCL.          10 l   31   64    7    0.000    0.000   0.001

              ntpq中各參數(shù)的含義

              remote: 它指的就是本地機(jī)器所連接的遠(yuǎn)程N(yùn)TP服務(wù)器

              refid: 它指的是參考的上一層NTP主機(jī)的地址

              st: 遠(yuǎn)程服務(wù)器的級(jí)別. 由于NTP是層型結(jié)構(gòu),有頂端的服務(wù)器,多層的Relay Server再到客戶端. 所以服務(wù)器從高到低級(jí)別可以設(shè)定為1-16. 為了減緩負(fù)荷和網(wǎng)絡(luò)堵塞,原則上應(yīng)該避免直接連接到級(jí)別為1的服務(wù)器的.

              when: 用做計(jì)時(shí),用來告訴我們還有多久本地機(jī)器就需要和遠(yuǎn)程服務(wù)器進(jìn)行一次時(shí)間同步

              poll: 本地機(jī)和遠(yuǎn)程服務(wù)器多少時(shí)間進(jìn)行一次同步(單位為秒). 在一開始運(yùn)行NTP的時(shí)候這個(gè)poll值會(huì)比較小,那樣和服務(wù)器同步的頻率也就增加了,可以盡快調(diào)整到正確的時(shí)間范圍.之后poll值會(huì)逐漸增大,同步的頻率也就會(huì)相應(yīng)減小

              reach: 這是一個(gè)八進(jìn)制值,表示已經(jīng)向上層NTP伺服器要求更新的次數(shù)。每成功連接一次它的值就會(huì)增加。

              delay: 網(wǎng)路傳輸過程當(dāng)中延遲的時(shí)間,單位為 10^(-6) 秒

              offset: 這是個(gè)最關(guān)鍵的值, 它告訴了我們本地機(jī)和服務(wù)器之間的時(shí)間差別. offset越接近于0,我們就和服務(wù)器的時(shí)間越接近。單位為10^(-3)秒

              jitter: Linux系統(tǒng)時(shí)間與BIOS硬件時(shí)間的差異時(shí)間,單位為10^(-6)秒。簡(jiǎn)單地說這個(gè)數(shù)值的絕對(duì)值越小我們和服務(wù)器的時(shí)間就越精確。

              那么大家細(xì)心的話就會(huì)發(fā)現(xiàn)兩個(gè)問題: 第一我們連接的是1.cn.pool.ntp.org為什么和remote server不一樣? 第二那個(gè)最前面的+和*都是什么意思呢?

              第一個(gè)問題是因?yàn)镹TP提供給我們的是一個(gè)cluster server所以每次連接的得到的服務(wù)器都有可能是不一樣.同樣這也告訴我們了在指定NTP Server的時(shí)候應(yīng)該使用hostname而不是IP

              第二個(gè)問題和第一個(gè)相關(guān),既然有這么多的服務(wù)器就是為了在發(fā)生問題的時(shí)候其他的服務(wù)器還可以正常地給我們提供服務(wù).那么如何知道這些服務(wù)器的狀態(tài)呢? 這就是第一個(gè)記號(hào)會(huì)告訴我們的信息

              *
              它告訴我們遠(yuǎn)端的服務(wù)器已經(jīng)被確認(rèn)為我們的主NTP Server,我們系統(tǒng)的時(shí)間將由這臺(tái)機(jī)器所提供

              +
              它將作為輔助的NTP Server和帶有*號(hào)的服務(wù)器一起為我們提供同步服務(wù). 當(dāng)*號(hào)服務(wù)器不可用時(shí)它就可以接管
              
              -
              遠(yuǎn)程服務(wù)器被clustering algorithm認(rèn)為是不合格的NTP Server

              x
              遠(yuǎn)程服務(wù)器不可用

              了解這些之后我們就可以實(shí)時(shí)監(jiān)測(cè)我們系統(tǒng)的時(shí)間同步狀況了

              七、NTP安全設(shè)置
             
              運(yùn)行一個(gè)NTP Server不需要占用很多的系統(tǒng)資源,所以也不用專門配置獨(dú)立的服務(wù)器,就可以給許多client提供時(shí)間同步服務(wù), 但是一些基本的安全設(shè)置還是很有必要的
            那么這里一個(gè)很簡(jiǎn)單的思路就是第一我們只允許局域網(wǎng)內(nèi)一部分的用戶連接到我們的服務(wù)器. 第二個(gè)就是這些client不能修改我們服務(wù)器上的時(shí)間

              在/etc/ntp.conf文件中我們可以用restrict關(guān)鍵字來配置上面的要求

              [restrict]參數(shù)的設(shè)定方式為:

              restrict [你的IP] mask [netmask_IP] [parameter]

              其中parameter 的參數(shù)主要有底下這些:

              ignore:拒絕所有類型的NTP連線
              nomodify:用戶端不能使用ntpc與ntpq 兩支程式來修改伺服器的時(shí)間參數(shù),但用戶端仍可透過這部主機(jī)來進(jìn)行網(wǎng)路校時(shí)的
              noquery:用戶端不能夠使用ntpq, ntpc等指令來查詢時(shí)間伺服器,等于不提供NTP的網(wǎng)路校時(shí);
              notrap:不提供trap這個(gè)遠(yuǎn)程事件登錄(remote event logging)的功能。
              notrust:拒絕沒有認(rèn)證的用戶端。
              nopeer:不與其他同一層的ntp服務(wù)器進(jìn)行時(shí)間同步

              如果你沒有在parameter的地方加上任何參數(shù)的話,這表示該IP或網(wǎng)段不受任何限制。一般來說,我們可以先關(guān)閉NTP的使用權(quán)限,然后再一個(gè)一個(gè)的啟用允許登入的網(wǎng)段。
              
              首先我們對(duì)于默認(rèn)的client拒絕所有的操作

            ?View Code BASH
            1 
            restrict default kod nomodify notrap nopeer noquery

              然后允許本機(jī)地址一切的操作

            ?View Code BASH
            1 
            restrict 127.0.0.1

              最后我們?cè)试S局域網(wǎng)內(nèi)所有client連接到這臺(tái)服務(wù)器同步時(shí)間.但是拒絕讓他們修改服務(wù)器上的時(shí)間

            ?View Code BASH
            1 
            restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

              把這三條加入到/etc/ntp.conf中就完成了我們的簡(jiǎn)單配置。 NTP還可以用key來做authenticaiton,這里就不詳細(xì)介紹了。有興趣的朋友可以參考ntp-keygen這個(gè)指令的相關(guān)說明。

              八、NTP client的設(shè)置
             
              做到這里我們已經(jīng)有了一臺(tái)自己的Relay Server。如果我們想讓局域網(wǎng)內(nèi)的其他client都進(jìn)行時(shí)間同步的話那么我們就都應(yīng)該照樣再搭建一臺(tái)Relay Server,然后把所有的client都指向這兩臺(tái)服務(wù)器(注意不要把所有的client都指向Internet上的服務(wù)器). 只要在client的ntp.conf加上這你自己的服務(wù)器就可以了

              注:多做一臺(tái)NTP的服務(wù)器是為了時(shí)間更加精準(zhǔn),并不是必需的。一臺(tái)也是可以達(dá)到網(wǎng)絡(luò)校時(shí)的效果的。

              由于ntpd的server/client之間的時(shí)間誤差不允許超過1000秒,因此你得先手動(dòng)進(jìn)行時(shí)間同步,然后再設(shè)定與啟動(dòng)服務(wù)。

              ntpdate基本用法

            ?View Code BASH
            1 2 3 4 5 6 
            ntpdate [-dv] [NTP IP/hostname]   選項(xiàng)與參數(shù):   -d :進(jìn)入除錯(cuò)模式 (debug) ,可以顯示出更多的有效資訊。 -v :有較多訊息的顯示。
            ?View Code BASH
            1 
            # ntpdate 192.168.0.215

              配置客戶端

            ?View Code BASH
            1 2 3 4 5 6 7 8 
            vi /etc/ntp.conf   #先注釋掉缺省的NTP服務(wù)器,然后增加自己的NTP服務(wù)器 #server 0.centos.pool.ntp.org #server 1.centos.pool.ntp.org #server 2.centos.pool.ntp.org server 192.168.1.215 server 192.168.1.106
            ?View Code BASH
            1 2 3 4 5 6 7 
            vi /etc/ntp/ntpservers #This file contains a list of ntp servers to show in the system-config-date user interface. #It is not recommended that you modify this file by hand. #注釋掉缺省的NTP服務(wù)器或者清空這個(gè)文件也可以 #0.centos.pool.ntp.org #1.centos.pool.ntp.org #2.centos.pool.ntp.org
            ?View Code BASH
            1 2 3 
            vi /etc/ntp/step-tickers  #增加自己的NTP服務(wù)器 192.168.1.215

              同樣客戶端也啟動(dòng)NTP服務(wù),并且設(shè)置其在開機(jī)后自動(dòng)運(yùn)行

            ?View Code BASH
            1 2 3 
            # /etc/init.d/ntpd/start    # chkconfig --level 35 ntpd on

              
              九、ntpdate和ntpd的區(qū)別

              ntpd不僅僅是時(shí)間同步服務(wù)器,他還可以做客戶端與標(biāo)準(zhǔn)時(shí)間服務(wù)器進(jìn)行同步時(shí)間,而且是平滑同步,并非ntpdate立即同步,在生產(chǎn)環(huán)境中應(yīng)慎用ntpdate。

              由于ntpdate是立即同步,在獲得一個(gè)時(shí)間之后,ntpdate使用settimeofday(2)設(shè)置系統(tǒng)時(shí)間,就會(huì)產(chǎn)生時(shí)鐘的躍變。

              用ntpdate調(diào)整時(shí)間的方式,會(huì)有幾個(gè)非常明顯的問題:

              第一,這樣做不安全。ntpdate的設(shè)置依賴于ntp服務(wù)器的安全性,攻擊者可以利用一些軟件設(shè)計(jì)上的缺陷,拿下ntp服務(wù)器并令與其同步的服務(wù)器執(zhí)行某些消耗性的任務(wù)。由于ntpdate采用的方式是跳變,跟隨它的服務(wù)器無法知道是否發(fā)生了異常(時(shí)間不一樣的時(shí)候,唯一的辦法是以服務(wù)器為準(zhǔn))。

              第二,這樣做不精確。一旦ntp服務(wù)器宕機(jī),跟隨它的服務(wù)器也就會(huì)無法同步時(shí)間。與此不同,ntpd不僅能夠校準(zhǔn)計(jì)算機(jī)的時(shí)間,而且能夠校準(zhǔn)計(jì)算機(jī)的時(shí)鐘。

              第三,這樣做不夠優(yōu)雅。由于ntpdate是跳變,而不是使時(shí)間變快或變慢,依賴時(shí)序的程序會(huì)出錯(cuò)。例如,如果ntpdate發(fā)現(xiàn)你的時(shí)間快了,則可能會(huì)經(jīng)歷兩個(gè)相同的時(shí)刻,對(duì)某些應(yīng)用而言,這是致命的。

              許多應(yīng)用程序依賴連續(xù)的時(shí)鐘,取得的時(shí)間是線性的。例如數(shù)據(jù)庫(kù)事務(wù),通常會(huì)地依賴這樣的事實(shí):時(shí)間不會(huì)往回跳躍。

              我們可以想象以下,假如Oracle服務(wù)器的時(shí)間是01:00 AM,標(biāo)準(zhǔn)時(shí)間是00:30 AM,很明顯Oracle服務(wù)器經(jīng)過他自己的時(shí)間00:40 AM。假若此時(shí)直接使用ntpdate將服務(wù)器與標(biāo)準(zhǔn)時(shí)間同步,那么意味著Oracle服務(wù)器將在同一天經(jīng)過兩個(gè)00:40 AM,這對(duì)于某些計(jì)劃任務(wù)來說可能是致命的。

              因而,唯一一個(gè)可以令時(shí)間發(fā)生跳變的點(diǎn),是計(jì)算機(jī)剛剛啟動(dòng),但還沒有啟動(dòng)很多服務(wù)的那個(gè)時(shí)候。其余的時(shí)候,理想的做法是使用ntpd來校準(zhǔn)時(shí)鐘,而不是調(diào)整計(jì)算機(jī)時(shí)鐘上的時(shí)間。

              十、其它一些可用的同步時(shí)間服務(wù)器

              129.7.1.66,210.72.145.44(中國(guó)國(guó)家授時(shí)中心服務(wù)器IP地址)
              ntp.sjtu.edu.cn(上海交通大學(xué)網(wǎng)絡(luò)中心NTP服務(wù)器地址)
              202.120.2.101(上海交通大學(xué)網(wǎng)絡(luò)中心NTP服務(wù)器地址)
              time.nist.gov
              ntp.fudan.edu.cn(復(fù)旦大學(xué)網(wǎng)絡(luò)中心NTP服務(wù)器地址)
              timekeeper.isi.edu
              subitaneous.cpsc.ucalgary.ca
              usno.pa-x.dec.com
              time.twc.weather.com
              swisstime.ethz.ch
              ntp0.fau.de
              ntp3.fau.de
              time-a.nist.gov
              time-b.nist.gov
              time-nw.nist.gov
              nist1-sj.glassey.com

              十一、常見錯(cuò)誤

              1、在ntp客戶端運(yùn)行ntpdate serverIP,出現(xiàn)no server suitable for synchronization found的錯(cuò)誤。

            ?View Code BASH
            1 2 3 
            #ntpdate 192.168.1.106   27 May 21:58:03 ntpdate[5891]: no server suitable for synchronization found

              在ntp客戶端用ntpdate –d serverIP查看,發(fā)現(xiàn)有“Server dropped: strata too high”的錯(cuò)誤,并且顯示“stratum 16”。而正常情況下stratum這個(gè)值得范圍是“0~15”。

            ?View Code BASH
            1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
            # ntpdate  -d 192.168.1.106   27 May 22:04:24 ntpdate[5949]: ntpdate 4.2.2p1@1.1570-o Sat Dec 19 00:56:14 UTC 2009 (1) Looking for host 192.168.1.106 and service ntp host found : 192.168.1.106 transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) 192.168.1.106: Server dropped: strata too high server 192.168.1.106, port 123 stratum 16, precision -20, leap 11, trust 000 refid [192.168.1.106], delay 0.02589, dispersion 0.00005 transmitted 4, in filter 4 reference time:    00000000.00000000  Thu, Feb  7 2036 14:28:16.000 originate timestamp: d18a2ecc.72a5beb8  Fri, May 27 2011 22:08:12.447 transmit timestamp:  d18a2de8.61c6b053  Fri, May 27 2011 22:04:24.381 filter delay:  0.02628  0.02628  0.02614  0.02589           0.00000  0.00000  0.00000  0.00000  filter offset: 228.0657 228.0656 228.0656 228.0657          0.000000 0.000000 0.000000 0.000000 delay 0.02589, dispersion 0.00005 offset 228.065737   27 May 22:04:24 ntpdate[5949]: no server suitable for synchronization found

              這是因?yàn)镹TP server還沒有和其自身或者它的server同步上。

              以下的定義是讓NTP Server和其自身保持同步,如果在ntp.conf中定義的server都不可用時(shí),將使用local時(shí)間作為ntp服務(wù)提供給ntp客戶端。

            ?View Code BASH
            1 2 
            server 127.127.1.0 fudge 127.127.1.0 stratum 8

              在ntp server上重新啟動(dòng)ntp服務(wù)后,ntp server自身或者與其server的同步的需要一個(gè)時(shí)間段,這個(gè)過程可能是5分鐘,在這個(gè)時(shí)間之內(nèi)在客戶端運(yùn)行ntpdate命令時(shí)會(huì)產(chǎn)生no server suitable for synchronization found的錯(cuò)誤。

              那么如何知道何時(shí)ntp server完成了和自身同步的過程呢?

              在ntp server上使用命令:

            ?View Code BASH
            1 2 3 4 5 6 7 8 
            # watch ntpq -p   Every 2.0s: ntpq -p                                                                                                                                                                   Fri May 27 22:39:39 2011        remote           refid	 st t when poll reach   delay   offset  jitter ==============================================================================  221.7.129.79    80.127.4.179     2 u   59   64   77   58.386   20.698   1.954 *laika.paina.jp  133.243.238.243  2 u    -   64  177  115.143   17.613   3.054

              注意:由于我在前面的配置是把讓本地做為ntp服務(wù)的選項(xiàng)關(guān)閉了的,所以這里看不見LOCAL(0)項(xiàng)的。如果你沒有關(guān)閉會(huì)看到類似下面的行

            ?View Code BASH
            1 
            LOCAL(0)        LOCAL(0)        10 l   21   64    1    0.000   0.000  0.001

              這個(gè)就是與自身同步的ntp server。

              在啟動(dòng)ntp server服務(wù)后,reach這個(gè)值這個(gè)值就從0開始不斷增加,當(dāng)增加到17的時(shí)候(從0到17是5次的變更,每一次是poll的值的秒數(shù),是64秒*5=320秒的時(shí)間)后,再ntpdate看看,應(yīng)該就可以了。

              2、Server dropped: no data

              從客戶端執(zhí)行ntpdate –d時(shí)有錯(cuò)誤信息如下:

            ?View Code BASH
            1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
            transmit(192.168.1.6)   transmit(192.168.1.6)   transmit(192.168.1.6)   transmit(192.168.1.6)   transmit(192.168.1.6)   192.168.1.6: Server dropped: no data   server 192.168.1.6, port 123   ..... 28 Jul 17:42:24 ntpdate[14148]: no server suitable for synchronization found

              出現(xiàn)這個(gè)問題的原因可能有以下兩個(gè):

              a)檢查ntp的版本,如果你使用的是ntp4.2(包括4.2)之后的版本,在restrict的定義中使用了notrust的話,會(huì)導(dǎo)致以上錯(cuò)誤。

              使用以下命令檢查ntp的版本:

            ?View Code BASH
            1 
            # ntpq -c version

             
              下面是來自ntp官方網(wǎng)站的說明:

              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 time servers to authenticate themselves to your (client) ntpd

              解決方法:把notrust選項(xiàng)去掉。

              b)檢查ntp server的防火墻。可能是server的防火墻屏蔽了upd 123端口。

              可先以下命令暫時(shí)關(guān)閉iptables

            ?View Code BASH
            1 
            #service iptables stop

              關(guān)掉iptables服務(wù)后,再嘗試從ntp客戶端的同步,如果成功,證明是防火墻的問題,需要更改iptables的設(shè)置。

              十二、參考資料

              http://www.google.com
              http://linux.vbird.org/linux_server/0440ntp.php#server_ntp.conf
              http://www.showlife8.com/article.asp?id=121
              http://www.linuxsir.org/bbs/lastpostinthread307840.html
              http://www.blogjava.net/spray/archive/2008/07/10/213964.html

            posted on 2014-01-15 13:58 Enic 閱讀(290) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产精品国色综合久久| 综合人妻久久一区二区精品| 亚洲国产精品嫩草影院久久| 国产精品久久久久久五月尺| 精品久久久无码人妻中文字幕豆芽| 国産精品久久久久久久| 欧美黑人又粗又大久久久| 久久男人AV资源网站| www.久久热| 欧美精品国产综合久久| 91精品国产91热久久久久福利| 亚洲国产成人精品无码久久久久久综合 | 欧美精品乱码99久久蜜桃| 蜜桃麻豆www久久| 亚洲欧美伊人久久综合一区二区| 麻豆精品久久精品色综合| 久久这里只有精品首页| 超级碰久久免费公开视频| 久久天天躁狠狠躁夜夜96流白浆| 中文字幕无码久久精品青草 | 久久久久久午夜成人影院| 久久久精品久久久久特色影视| 久久综合给合久久狠狠狠97色69 | 久久91精品国产91久久户| 狠狠色狠狠色综合久久| 国产精品狼人久久久久影院| 欧美亚洲色综久久精品国产| 亚洲精品WWW久久久久久| 国产巨作麻豆欧美亚洲综合久久 | 三级片免费观看久久| 国产精品狼人久久久久影院| 精品免费tv久久久久久久| 久久久久人妻精品一区| 97精品伊人久久久大香线蕉| 久久亚洲sm情趣捆绑调教| 综合久久精品色| 超级97碰碰碰碰久久久久最新| 无码8090精品久久一区| 伊人久久五月天| 久久久久se色偷偷亚洲精品av| 亚洲欧洲久久久精品|