L01-Linux (RHEL6.5)集群中部署NTP

来源:https://www.cnblogs.com/suhaha/archive/2018/03/12/8552897.html
-Advertisement-
Play Games

RHEL6.5集群中部署NTP NTP全稱為Network Time Protocol,即網路時間協議。一般在Linux系統中用來同步集群中不同機器的時間。 本文描述的ntp服務部署框架如下圖示 如上圖,框架中的有外網ntp伺服器、內網ntp伺服器和內網中的其他機器。為講解方便先作如下假設: 外網n ...


RHEL6.5集群中部署NTP

NTP全稱為Network Time Protocol,即網路時間協議。一般在Linux系統中用來同步集群中不同機器的時間。

 

本文描述的ntp服務部署框架如下圖示

 

如上圖,框架中的有外網ntp伺服器內網ntp伺服器內網中的其他機器。為講解方便先作如下假設:

外網ntp伺服器:xx.cn.pool.ntp.org

內網ntp伺服器:10.xxx.xxx.189

內網中的其他機器:10.xxx.xxx.148和10.xxx.xxx.149

 (189、148和149等的操作系統都是Red Hat 6.5)

機器之間的關係是這樣的:

(1)外網ntp伺服器與內網ntp伺服器的關係:

內網ntp伺服器189首先根據外網ntp伺服器的時間,調整自己的時間至同準確時間一致,然後通過ntpd或ntpdate定時向外網ntp伺服器同步時間。此時外網伺服器為ntp伺服器,189為ntp客戶端;

(2)內網ntp伺服器與內網其他機器的關係:

在189的時間調整準確之後,它便可以作為ntp伺服器為內網中的其他機器提供服務了。此時189為ntp服務端,而148和149等其他機器為ntp客戶端。

 

即整個架構中189同時作為ntp伺服器和客戶端而存在,就像一個三世同堂的家庭中,爸爸既是爸爸也是兒子,同樣的道理。

 

一、內網ntp伺服器(10.xxx.xxx.189)的設置

1、檢查並安裝ntp

使用rpm -qa | grep ntp 命令查看伺服器是否安裝了ntp,如果出現下麵兩個說明已安裝。

 

倘若沒有安裝,可使用yum install -y ntp命令進行安裝(前提是伺服器的yum可用,若是yum無法使用,也可以到網上找到相應的rpm包進行手動安裝)

 

2、使用ntpdate同步NTP伺服器時間

這一步的主要命令有兩個:

(1)   ntpdate 0.cn.pool.ntp.org  #ntpdate修改系統時間

(2)   hwclock –systohc   #將硬體時間修改到與系統時間相同

 

由於NTP的限制,如果系統時間與正確的時間相差太大的話,NTP是不會幫你做調整的——網上也有另一種說法,就是當你的時間設置和正確的時間相差很大的時候,NTP不會直接不同步,而是會花上很長一段時間進行同步調整——關於這點我沒有實際測試過,反正不管是由於哪種原因,總之我們需要先通過ntpdate做一個時間同步,把189的時間調整到跟實際相同,用到的是第(1)個命令。

 

2.1

首先我們要先確定好自己的時區(若時區已經正確了可略過這步)。

根據所在地點重新設置時區。以上海為例。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    #將時區設置成上海

 

[root@zabbix ~]# date

Mon Mar 12 18:28:42 CST 2018   #可以看到我們的時區已經設置過來了,因為時區顯示為CST了,CST即china standard time。

 

 

2.2

同步之前需要知道可用的外網NTP伺服器是多少,通過NTP官網http://www.pool.ntp.org找到離自己城市最近的NTP伺服器,如下圖:

 

我取到的公網NTP伺服器地址如下:

server 0.cn.pool.ntp.org

server 1.cn.pool.ntp.org

server 2.cn.pool.ntp.org

server 3.cn.pool.ntp.org

 

2.3

找到外網ntp伺服器之後,接下來使用ntpdate將時間調準。

 [root@zabbix ~]# ntpdate 0.cn.pool.ntp.org

12 Mar 14:03:12 ntpdate[19868]: step time server 85.199.214.100 offset 1114.672613 sec

註:可以執行兩三遍以減少時延

 執行前系統時間為下午1點42分,是錯誤的。

 

執行後系統時間修改為下午2點3分,已修改為正確時間。

 

註意:

1使用ntpdate修改時使用的是躍變的方式,就是說ntpdate命令是簡單的將時間從某個點修改為另一個時間點,中間沒有平滑的過渡。

2執行ntpdate  xx.cn.pool.ntp.org命令時可能會報“the NTP socket is in use”的錯誤,如下圖:

 

原因:造成該錯誤一般是因為系統ntpd伺服器正在運行中,導致udp的123埠被ntpd占用。這可以通過service  ntpd  status或者 ps aux | grep ntpd 命令加以驗證——大部分情況都是這個原因沒跑了。

解決辦法:若確實是這個原因,可使用命令 service ntpd stop 終止ntpd服務。實在不行可強行kill掉ntpd對應的pid。關閉ntpd服務之後就可以繼續執行命令了。如上圖。

 

(3)還有一種可能的報錯是:no server suitable for synchronization found,這種情況可能是防火牆的原因,可直接跳到下麵的防火牆部分,按照步驟開啟防火牆的123 udp埠即可。“可能”兩字使得這句話顯得不那麼自信,其實我在本地虛擬機上測試時確實報過這個錯誤,然後我開啟123埠之後就解決了,但是當時並沒有留下截圖。但是不管怎樣,123埠是無論如何都要打開的,所以作為排錯,你在這一步先設置了也未嘗不可。

 

2.4

上面2.3步驟中同步的是系統時間,接下來使用hwclock –systohc命令(sys(系統時間)to(寫到)hc(Hard Clock))將系統時間設置成硬體時間。

 

 

3、配置/etc/ntp.conf主配置文件

此時若直接用service ntpd start命令啟動189的ntp服務,其實已經可以向客戶端提供時間更新服務了——這是因為,只要將NTP伺服器的時間設定為正確時間,再將ntp服務啟動,189就可以作為ntp伺服器對內網中其他機器提供服務了,無需配置它的ntp主配置文件。但是,這樣是滿足不了企業安全性需求的(需配置ntp.conf中的restrict參數),並且誰也無法保證在189這一次性的時間調整之後,在接下來的時間里就它的時間永遠都是對的(189需定時與外網ntp伺服器做時間同步)。

因此在伺服器接下來的運行期間,189需要定時與外網ntp伺服器做時間同步,以保證它自己的時間不會跑偏。有兩種方法:

(1)   ntpdate + crontab的方法。

由前面我們知道,ntpdate 0.cn.pool.ntp.org命令可以將189的時間跟外網ntp伺服器進行同步,因此只需在機器上建立相應的crontab任務定時的執行該命令就可以保證189在其運行期間的時間一致性了。比如,在crontab中添加:

0 12 * * * * ntpdate 0.cn.pool.ntp.org

若是採用這種方法,到這裡就可以不用繼續往下看了。

(2)   ntpd服務的方法。

這種方法要好過第一種方法,因為ntpdate採用躍變的方式直接將時間修改過來,對一些依賴時間的應用程式可能會有影響。理想的做法是,在開機的時候使用ntpdate強制同步時間(因為機器剛開機,機器上的許多服務還沒有啟動,而且即使有個別應用已經啟動並且ntpdate命令對其造成影響,影響也是相對較小的),在其他時候使用ntpd服務來平滑地同步時間。

 

接下來講解的主要是採用第二種方法時ntp主配置文件/etc/ntp.conf的設置,該文件中需要註意的幾個參數如下:

1)driftfile參數:解決NTP伺服器校準時間時的傳送延遲

格式: driftfile 文件名

用途:將與上級時間伺服器聯繫時所花費的時間,記錄在driftfile參數後面指定的文件內

註意:driftfile後面必須接完整的文件路徑,不能是鏈接文件,並且必須要有ntpd守護進程可以寫入的許可權。

對應預設配置項:driftfile /var/lib/ntp/drift

 

註:實際操作中我沒改過driftfile參數

 

2)restrict參數:許可權的控制(非常重要的參數,內網ntp伺服器需修改,內網ntp客戶端可不用修改

格式:restrict IP mask 掩碼 參數

用途:IP規定了允許或不允許訪問的地址(此處若為default,即為0.0.0.0所有ip),配合掩碼可以對某一網段進行限制。

restrict參數包括:

ignore關閉所有NTP服務

nomodify客戶端不能修改服務端的時間,但可以作為客戶端的校正伺服器

noquery不提供時間查詢,即用戶端不能使用ntpq,ntpc等命令來查詢ntp伺服器

nopeer不與同一層的其他伺服器進行時間同步

kodkod技術可以阻止“kiss of death”包(一種DOS攻擊)對伺服器的破壞

notrap不提供trap遠端事件登陸的功能

notrust客戶端除非通過認證,否則指定的網段為不信任網段 #ntp4.2之後的版本,已經預設沒有這個參數,如果你添加了,會報錯的。

對應預設配置項:

restrict default kod nomodify notrap nopeer noquery  #預設對所有client拒絕所有的操作

restrict -6 default kod nomodify notrap nopeer noquery

restrict 127.0.0.1  #允許本機地址的一切操作

restrict -6 ::1

 

3)server參數:設定上級時間伺服器(非常重要的參數,內網ntp伺服器和客戶端都需要配置

格式: server IP地址或功能變數名稱 [prefer]

用途:IP地址或功能變數名稱即為該NTP伺服器指定的上級NTP伺服器。當指定多個NTP伺服器時,使用prefer參數的伺服器優先順序最高,如果都沒有使用prefer參數,那麼伺服器的優先順序則按從上到下的順序依次由高到低。在指定上層伺服器後,至少15min才會與上層NTP伺服器進行時間校對。

預設配置項:

server 0.rhel.pool.ntp.org iburst

server 1.rhel.pool.ntp.org iburst

server 2.rhel.pool.ntp.org iburst

server 3.rhel.pool.ntp.org iburst

 

在實際操作中我的修改只有兩點,分別為: restrict和server。如下圖

 

4ntp服務預設只會同步系統時間。若是希望ntp也同時能修改機器的硬體時間,則需要將硬體時間的修改加入配置文件:在/etc/sysconfig/ntpd文件中,添加SYNC_HWCLOCK=yes

 

5除此之外,還有一個文件:/etc/ntp/step-tickers

在我的實際操作中,內網ntp伺服器189沒有修改這個文件的也沒有問題,但是內網的ntp客戶端如148和149都配置了,不配置的話148、149無法與189進行時間同步,出現的情況為:148、149等ntp客戶端的ntpd服務雖然啟動了,但是不會與189的ntp伺服器進行同步,查看客戶端ntp狀態時會一直顯示下圖所示的狀態

 

網上關於step-tickers文件的解釋是:當ntpd服務啟動時,會自動與該文件中記錄的上層NTP服務進行時間校對。

關於ntp.conf and step-tickers區別:

step-tickers is used by ntpdate where as ntp.conf is the configuration file for the ntpd daemon. ntpdate is initially run to set the clock before ntpd to make sure time is within 1000 sec. ntp will not run if the time difference between the server and client by more then 1000 sec ( or there about). The start up script will read step-tickers for servers to be polled by ntpdate.

預設情況下,我們配置的NTP伺服器不會去時間源那裡同步時間,所以必須修改/etc/ntp/step-tickers文件,加入我們的時間源,這樣每次通過/etc/init.d/ntpd 來啟動服務的時候就會自動更新時間了。

 

 

4、防火牆設置

配置完成之後,其實就可以啟動服務了,但是在啟動之前,我們先看一下防火牆設置。

NTP服務需要使用到UDP埠號123,在系統的防火牆(Iptables)啟動的情況下,必須開放UDP埠號123。

使用/etc/init.d/iptables status命令查看防火牆狀態。

 

上圖中我的防火牆在我之前安裝其他服務的時候已經關閉了,所以這裡不需要再設置了。但是如果你的防火牆沒關。則需要按照如下步驟開放防火牆的123埠。

(1)   /sbin/iptables -I INPUT -p udp --dport 123 -j ACCEPT  #開放udp的123埠

(2)   /etc/rc.d/init.d/iptables save    #保存配置

(3)   /etc/rc.d/init.d/iptables restart #重啟防火牆服務 

(4)   /etc/init.d/iptables status      #查看已開放埠

在伺服器的防火牆開啟,並且開放了123埠的示例:

 

(5)   也可以使用 lsof 命令來查看某一埠是否開放:lsof -i:123

 

如果防火牆沒有開放UDP埠號123,肯定是會出問題的,到時候出錯了可以直接上網查。

 

5.ntp服務加入開機自啟動

這一步其實挺有必要的,因為你的集群在部署好ntp服務之後,在往後項目的開發過程中都極少去關註它了,若某個時候你的某台伺服器由於某些原因重啟了(這總會發生的….),而你的ntp服務又不是開機自啟動的,那麼這台伺服器在一段時間後就有可能時間跑偏了。

步驟如下:

(1)使用chkconfig --list | grep ntpd命令查看是否已將ntp服務加入開機自啟動

(2)若沒有加入,則使用chkconfig ntpd on命令將其加入

 

6.接下來就可以啟動ntpd服務了。

(1)service ntpd start    #開啟ntp服務

(2)service ntpd status   #查看狀態

(3)service ntpd stop     #停止ntp服務

(4)service ntpd restart  #重啟ntp服務

 

上圖可見,在開啟ntpd服務之後若是立馬查詢狀態則有可能會出現unsynchronised

這是由於每次重啟NTP伺服器之後大約要3-5分鐘客戶端才能與server建立正常的通訊連接。當此時用客戶端連接服務端就會報這樣的信息。一般等待幾分鐘就可以了。因此客戶端重啟ntpd服務之後執行ntpstat查看的時候有可能會出現這種情況。

 

NTP服務啟動之後,可以使用下麵幾個命令進行查看其狀態。

(1)ntpstat命令查看ntp伺服器有無和上層ntp連通

正常連通的情況如下圖所示:

 

(2)ntpq –p命令該命令可以列出目前我們的NTP與相關的上層NTP的狀態

 

其中:

remote即NTP主機的IP或主機名稱。註意最左邊的符號,如果由“+”則代表目前正在作用鐘的上層NTP,如果是“*”則表示也有連上線,不過是作為次要聯機的NTP主機。

refid參考的上一層NTP主機的地址

st即stratum階層——理論上說,NTP 伺服器是分等級(Stratum)的,Stratum = 1 的 NTP 伺服器是直接和世界標準時鐘同步的,包括 GPS 時間、銫原子鐘、某些手機網路等。NIST、中國國家授時中心和中國教育網的第一級時間伺服器都是這個級別的。Stratum = 2 的 NTP 伺服器是和 Stratum = 1 的伺服器同步的,性能稍差,但精確度也在毫秒的量級,所以用起來沒什麼區別。再往下每同步一級,Stratum 就加一。(這一段從網上摘抄過來)

when幾秒前曾做過時間同步更新的操作

poll下次更新在幾秒之後

reach已經向上層NTP伺服器要求更新的次數

delay網路傳輸過程鐘延遲的時間

offset時間補償的結果

jitterLinux系統時間與BIOS硬體時間的差異時間

 

(3)watch “ntpq –p”命令:

 

Ctrl + C 退出。

 

 

二、內網ntp客戶端(10.xxx.xxx.148/149)設置

內網ntp客戶端的設置跟內網ntp伺服器189的ntp伺服器設置其實差別不大:在上一步中,189是客戶端,外網的xx.cn.pool.ntp.org是伺服器;這一步,148和149是客戶端,189變成伺服器了。

所以在這一步的配置中,只需要把上一步中的外網伺服器地址全部換成189的地址就可以了。

簡要步驟如下:

1.rpm -qa | grep ntp檢查是否安裝了ntp

2.ntpdate同步系統時間,並修改硬體時間
ntpdate 10.xxx.xxx.189 (兩遍)
hwclock --systohc

3.修改/etc/ntp.conf主配置文件,添加server
server 10.xxx.xxx.189 prefer
server 10.xxx.xxx.180

:ntp客戶端不用修改restrict參數

4.修改/etc/ntp/step-tickers,添加server:
server 10.xxx.xxx.189 prefer
server 10.xxx.xxx.180

5.將硬體時間的修改加入配置文件
在/etc/sysconfig/ntpd文件中,添加
SYNC_HWCLOCK=yes

6.防火牆的設置
/etc/init.d/iptables status

7.是否開機自啟動
chkconfig --list | grep ntpd

8.啟動服務並查看狀態
service ntpd start

ntpstat

ntpq -p

 

主要的不同有兩點:

(1)客戶端的/etc/ntp.conf文件中的restrict參數可以不用配置,它的/etc/ntp.conf文件中只需要修改server來設定189為它的上層時間伺服器即可,其他保持預設

(2)上一步配置內網ntp伺服器設置時/etc/ntp/step-tickers是不用配置的,但是在這裡的客戶端設置時需要配置該文件:在該文件中加上189,如下所示:

 

圖中之所以有兩行是因為我做了簡單的負載均衡和高可用,因此用prefer參數指定189為首選ntp伺服器。

 

 

我這裡更主要的是關註實施的步驟,更多的理論可以關註下麵幾篇文章,講的非常好,我剛開始實施的時候就是看的這幾篇文章,淺顯易懂。

https://www.linuxidc.com/Linux/2013-11/92275.htm

https://www.linuxidc.com/Linux/2013-11/92275p2.htm

http://luijnijei.blog.163.com/blog/static/350245942010913912192/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 在一個小項目的需求中,我需要一個短鏈生成伺服器來縮短一些某個網站的鏈接。 剛開始我使用的是新浪的短鏈生成服務,後來心血來潮Google了一下短鏈生成的演算法,在知乎上看到了 "一個非常棒的構思" ,也就是直接使用資料庫的id的62進位形式作為短鏈索引。 當天我們就把新浪的短鏈換成了自己的服務,不 ...
  • 作為一個java的學習者,我相信JDBC是大家最早接觸也是入門級別的資料庫連接方式,所以我們先來回憶一下JDBC作為一種用於執行SQL語句的Java API是如何工作的。下麵的一段代碼就是最基本的JDBC開發流程。 在上代碼之前要先導入JDBC的jar包,由於我用的資料庫是mysql,所以要先導 入 ...
  • 兩個星期前,微軟發佈了 "EF Core 2.1 Preview 1" ,同時還發佈了 ".NET Core 2.1 Preview 1" 和 "ASP.NET Core 2.1 Preview 1" ;EF Core 2.1 Preview 1 除了 "許多小改進和超過100種產品錯誤修複之外" ...
  • 本次 Windows Developer Day,最值得期待的莫過於 Windows AI Platform 了,可以說是千呼萬喚始出來。觀看直播的開發者們,留言最多的也是 Windows AI Platform。 下麵結合微軟提供的展示過程,文檔和 Git Sample 來詳細分析一下。 基礎概念 ...
  • 以前實現數據的緩存有多種方法,如客戶端的Cookie,伺服器端的Session、Application。 一、Cookie Cookie是保存客戶端的一組數據,主要用來保存用戶的個人信息,主要存放瀏覽器請求伺服器時的請求信息,這些信息是非敏感信息。主要用於當用戶訪問您的系統時,應用程式可以檢索以前存 ...
  • RabbitMQ原理及教程:http://www.cnblogs.com/AlvinLee/p/6141834.html EasyNetQ是什麼以及常見用法這裡都不做講解。可以參考這篇博文:http://blog.csdn.net/hesi9555/article/details/70139346 ...
  • 前言 在說C# Hook之前,我們先來說說什麼是Hook技術。相信大家都接觸過外掛,不管是修改游戲客戶端的也好,盜取密碼的也罷,它們都是如何實現的呢? 實際上,Windows平臺是基於事件驅動機制的,整個系統都是通過消息的傳遞來實現的。當進程有響應時(包括響應滑鼠和鍵盤事件),則Windows會嚮應 ...
  • 既然進來了,不妨點個贊鼓勵下我吧!謝謝! 本文目錄:1. 反向代理為什麼需要設置cookie2.haproxy設置cookie的幾種方式 2.1 cookie insert 2.2 cookie prefix 2.3 cookie rewrite3.haproxy如何使用cookie實現會話保持以及 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...