︿
Top

前言

網路時間協定 NTP (Network Time Protocol) 最初由德拉瓦州大學 (Delaware University) 的大衛米爾斯 (David L. Mills) 所設計,主要目的為透過網路封包交換 (UDP Protocol, Port 123),將二端電腦的時鐘進行同步校對。若讀者想更詳細了解整個 NTP 協定的規範、實作、分析等詳細內容,請參考 RFC 1305 (NTP version 3)RFC 5905 (NTP version 4)

NTP 時間伺服器運作概念採用類似樹狀架構來處理時間的同步化,每一層時間伺服器就稱之為 Stratum,在台灣的主機可以跟 國家時間與頻率標準實驗室 (Stratum 2) 進行對時,NTP 時間伺服器運作概念圖可參考 維基百科 - Network Time Protocol

圖片來源: 維基百科 - Network Time Protocol

企業營運環境的伺服器為數眾多,倘若伺服器之間的時間不同步,可能會造成許多影響。例如伺服器之間的時間誤差超過 5 分鐘時,則將導致 Kerberos 的驗證失敗;或者,當企業購物平台的前端 AP 伺服器與後端資料庫伺服器時間不同步時,則使用者下單記錄可能在資料庫伺服器上顯示為未來時間,或是優惠活動時間明明已經結束,但使用者仍然可以下單購買,造成客服人員的困擾;再者,公司財務報表產生時,若伺服器之間的時間不同步,則會造成財務報表合併時在核對上出現困擾。以上舉例的種種問題,追究其原因,便是由於眾多伺服器之間時間不同步所造成。

在此次設定中,我們為 CentOS 主機安裝 OpenNTPD 客戶端,來進行系統運作時間校對。OpenNTPD 客戶端與一般的 NTP 客戶端時間校對方式有著明顯的不同,一般 NTP 客戶端的時間校對方式為「強迫性一次調整到位」,也就是不管現在系統時間,一律直接跟 NTP 伺服器校對後調整。偏向暴力性的一次到位調整時間的方式,在某些狀況下可能會對主機運作穩定性上產生問題。而此次安裝的 OpenNTPD 客戶端的時間校對方式為:當 OpenNTPD 客戶端與 NTP 時間伺服器有時間誤差時,OpenNTPD 客戶端會將主機每隔幾分鐘進行系統時間「微調」,慢慢調整,直到最後與時間伺服器上的標準時間達成一致。這樣溫和的時間調整方式,對於要求高穩定性的企業營運環境伺服器來說,相對而言是比較適合的。

在安裝 OpenNTPD 客戶端以前,請您先使用 rpm –qa 指令來確認 CentOS 主機是否已經安裝 gcc 及 make 套件(若系統沒有安裝,請使用 YUM 套件管理工具進行 yum –y install gcc make 安裝指令),以便在安裝 OpenNTPD 套件時能順利進行編譯 (Compile) 與安裝 (make)。在設定前,您可以故意先將 CentOS 主機系統時間調慢 5分鐘,待之後啟動 OpenNTPD 服務後,即可發現系統開始跟 NTP 時間伺服器慢慢進行時間校對。

在 CentOS 預設的 YUM 套件管理工具中,並未收錄 OpenNTPD 軟體套件,因此請自行從 OpenBSD 的鏡像站台下載、解壓縮、編譯,並安裝 OpenNTPD 套件。下列操作步驟為先利用 wget 指令下載 OpenNTPD 套件至 /tmp 資料夾下,並將 OpenNTPD 套件檔案解壓縮後執行 ./configure、make、make install 等指令,將 OpenNTPD 套件編譯並進行安裝。
yum -y install gcc make         //安裝 gcc 及 make 套件
rpm -qa gcc make                 //查看 gcc 及 make 套件資訊
  make-3.81-19.el6.i686
  gcc-4.4.4-13.el6.i686
cd /tmp                           //切換到 tmp 資料夾
wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenNTPD/openntpd-3.9p1.tar.gz //下載 OpenNTPD 套件
tar zxvf openntpd-3.9p1.tar.gz  //解壓縮
cd openntpd-3.9p1                 //切換到解壓縮後的目錄
./configure                        //環境準備
make                                //編譯
make install                       //安裝

在上述最後執行套件安裝的動作 make install 時,我們可以看到,系統提示我們必須要為系統建立 _ntp 的使用者帳號及群組,以便屆時使用 _ntp 使用者帳號來啟動 OpenNTP 服務,而非使用 root 管理者帳號,以避免安全性問題。因此安裝完畢後,請使用 useradd 及 groupadd 指令,配合相關參數來新增 _ntp 使用者帳號及群組,接著設定 OpenNTPD 設定檔,指向至企業內部所架設的 NTP 伺服器或網際網路上的 NTP 伺服器 IP 位址。接下來如下所示將 NTP 伺服器指向至國家時間與頻率標準實驗室 (Stratum 2),進行時間校對。最後,設定 OpenNTPD 記錄檔來記錄主機時間校時的狀況,新版 CentOS 6 改用 rsyslog 取代 syslogd,因此修改其設定檔 /etc/rsyslog.conf 並在完成後重新載入系統日誌服務 rsyslog 使其變更生效即可。
groupadd _ntp                   //建立 _ntp 群組
useradd -g _ntp -s /sbin/nologin -d /var/empty/ntp -c 'OpenNTP Daemon' _ntp   //建立 _ntp 使用者帳號
chown root /var/empty/ntp     //資料夾權限設定
vi /usr/local/etc/ntpd.conf  //修改 OpenNTPD 設定檔
 #server pool.ntp.org             //預設值
 server clock.stdtime.gov.tw      //修改後 (指向至國家時間與頻率標準實驗室)
vi /etc/rsyslog.conf
  deamon.info       /var/log/openntpd
service rsyslog reload
  Reloading system logger...                                 [  OK  ]

接著將 OpenNTPD 新增至 CentOS 內建的服務清單內,設定當 CentOS 重新開機時能夠自動啟動 OpenNTPD 服務,自動與國家時間與頻率標準實驗室 NTP 伺服器進行時間校對作業。完成設定後即可啟動 OpenNTPD 服務,並透過剛才建立的記錄檔來觀察目前主機與 NTP 伺服器進行時間校對的情況。
cp /tmp/openntpd-3.9p1/contrib/redhat/ntpd  /etc/init.d/openntpd  //複製檔案至系統服務資料夾
chmod +x /etc/init.d/openntpd     //將 openntpd 檔案加上可執行權限
vi /etc/init.d/openntpd           //修改 openntpd 服務設定檔
   prog="ntpd"
   PATH=/usr/local/sbin:$PATH          //加上此行
chkconfig --add openntpd          //新增 OpenNTPD 為系統服務
chkconfig openntpd on             //使 OpenNTPD 於 RunLevel 2 ~ 5 時皆會自動啟動服務
chkconfig --list openntpd         //檢查 OpenNTPD 服務自動啟動狀態
   openntpd    0:off   1:off   2:on    3:on    4:on    5:on    6:off
service openntpd start            //啟動 OpenNTPD 服務
   Starting ntpd:                 [  OK  ]
tail /var/log/openntpd
  Oct 29 17:47:27 Centos6 ntpd[8307]: ntp engine ready
  Oct 29 17:47:47 Centos6 ntpd[8307]: peer 220.130.158.72 now valid
  Oct 29 17:48:43 Centos6 ntpd[8305]: adjusting local clock by 13.694259s //開始校對時間
文章標籤: