概述
linux服務(wù)器在提供服務(wù)時,要和其他機(jī)器進(jìn)行請求的交互,實(shí)際生產(chǎn)環(huán)境中,可能因?yàn)闀r間不同步,導(dǎo)致了服務(wù)異常。
下面介紹下怎么部署NTP服務(wù)來解決這個問題。
ps:強(qiáng)烈吐槽下頭條這個新排版功能,只要圖片分辨率比較低然后點(diǎn)添加的時候直接白屏,也無法回退,這個很明顯的bug居然沒測出來,導(dǎo)致我重新寫了三次...
一、NTP服務(wù)概述
1、原理
NTP(Network TimeProtocol,網(wǎng)絡(luò)時間協(xié)議)是用來使計(jì)算機(jī)時間同步的一種協(xié)議。它可以使計(jì)算機(jī)對其服務(wù)器或時鐘源做同步化,它可以提供高精準(zhǔn)度的時間校正(LAN上與標(biāo)準(zhǔn)間差小于1毫秒,WAN上幾十毫秒),切可介由加密確認(rèn)的方式來防止惡意的協(xié)議攻擊。
模式:C/S模式
2、使用的端口
默認(rèn)NTP服務(wù)端口:UDP/123
3、ntp和ntpdate區(qū)別
1)兩個服務(wù)都是centos自帶的(centos7中不自帶ntp)。ntp的安裝包名是ntp;ntpdate的安裝包是ntpdate。他們并非由一個安裝包提供。
2)ntp守護(hù)進(jìn)程為ntpd,配置文件是/etc/ntp.conf
3)ntpdate用于客戶端的時間矯正,非NTP服務(wù)器可以不啟動NTP。
二、安裝部署
1、IP規(guī)劃
2、環(huán)境準(zhǔn)備
以下基于centos7.3
2.1、關(guān)閉selinux和防火墻
systemctl stop firewalld systemctl disable firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
2.2、配置yum
# cat /etc/yum.repos.d/t.repo [InstallMedia] name=Centos 7.3 baseurl=file:///media/cdrom/ enabled=1 gpgcheck=0 # mount -o loop -t iso9660 /root/CentOS-7-x86_64-Everything-1611.iso /media/cdrom/ # yum clean all && yum makecache
2.3、EDT 和 CST區(qū)別和設(shè)置
要檢查各個服務(wù)器時間格式,EDT或者是CST,在中國我們將服務(wù)器的時間格式調(diào)為CST
EDT:指美國東部夏令時間,波士頓、紐約市、華盛頓哥倫比亞特區(qū),都在這個時區(qū)內(nèi),跟北京時間有12小時的時差,晚12小時。
CST:可以指下面兩種:
1). 美國中部標(biāo)準(zhǔn)時間(西六區(qū),-6:00),中國是東八區(qū)(+8:00),北京時間比美國中部標(biāo)準(zhǔn)時間早14個小時。3:45 PMCST是北京時間凌晨1:45。
2). 中澳大利亞標(biāo)準(zhǔn)時間(+10:30),中國是東八區(qū)(+8:00),北京時間比中澳大利亞標(biāo)準(zhǔn)時間晚2個半小時。3:45 PMCST是北京時間下午上午5:45。
將系統(tǒng)的時間格式調(diào)整為CST的命令如下兩條:
# mv /etc/localtime /etc/localtime.bak # ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、搭建NTP服務(wù)端
3.1、部署ntp服務(wù)
#確定是否已經(jīng)安裝NTP包,客戶端只安裝ntpdate安裝包 rpm -qa | grep ntp #用yum源安裝 yum -y install ntp /*yum安裝NTP服務(wù)*/
3.2、服務(wù)端修改配置
# vim /etc/ntp.conf ==================================================================================== #設(shè)置默認(rèn)策略為拒絕所有訪問方式的請求 restrict default ignore #允許哪些機(jī)器同步 restrict 127.0.0.1 restrict -6 ::1 #允許局域網(wǎng)內(nèi)機(jī)器同步時間,nomodify拒絕讓他們修改服務(wù)器上的時間 restrict 172.xx.xx.xx mask 255.255.255.0 nomodify notrap #將該服務(wù)器的本地時間作為ntp server的時間,如果其他客戶端同步,將同步這臺服務(wù)器的時間 server 127.127.1.0 #stratum這行是時間服務(wù)器的層次。設(shè)為0則為頂級,如果要向別的NTP服務(wù)器更新時間,請不要把它設(shè)為0 fudge 127.127.1.0 stratum 2 #每一個system clock的頻率都有小小的誤差,這個就是為什么機(jī)器運(yùn)行一段時間后會不精確. NTP會自動來監(jiān)測我們時鐘的誤差值并予以調(diào)整. #但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機(jī)以后之前的計(jì)算結(jié)果也就不會丟失了 driftfile /var/lib/ntp/drift # Enable public key cryptography. includefile /etc/ntp/crypto/pw keys /etc/ntp/keys # Disable the monitoring facility to prevent amplification attacks using ntpdc disable monitor ====================================================================================
說明:
關(guān)于restrict格式如下:
其中parameter如下:
- ignore:忽略所有類型的ntp連接
- nomodify:不允許客戶端修改服務(wù)器的時間參數(shù),但是允許客戶端透過這部主機(jī)進(jìn)行時間校驗(yàn)。
- noquery: 不允許客戶端進(jìn)行時間校驗(yàn)。
- notrap:不提供trap時間登錄
- notrust:拒絕沒有認(rèn)證的客戶端
3.3、啟動ntp服務(wù)
systemctl restart ntpd
3.4、驗(yàn)證
現(xiàn)在已經(jīng)啟動了NTP的服務(wù),但是系統(tǒng)時間到底和服務(wù)器同步了沒有呢? 為此NTP提供了一個很好的查看工具: ntpq (NTP query)
# watch ntpq -p
建議大家在打開NTP服務(wù)器后就可以運(yùn)行ntpq命令來監(jiān)測服務(wù)器的運(yùn)行.這里可以使用watch命令來查看一段時間內(nèi)服務(wù)器各項(xiàng)數(shù)值的變化。
這里st為 配置文件設(shè)置的stratum,范圍是0--15,如果為16就是錯誤的
說明:
- remote: 它指的就是本地機(jī)器所連接的遠(yuǎn)程N(yùn)TP服務(wù)器
- refid: 它指的是給遠(yuǎn)程服務(wù)器(e.g. 193.60.199.75)提供時間同步的服務(wù)器
- st: 遠(yuǎn)程服務(wù)器的層級別(stratum). 由于NTP是層型結(jié)構(gòu),有頂端的服務(wù)器,多層的Relay Server再到客戶端. 所以服務(wù)器從高到低級別可以設(shè)定為1-16. 為了減緩負(fù)荷和網(wǎng)絡(luò)堵塞,原則上應(yīng)該避免直接連接到級別為1的服務(wù)器的.
- when: 一個計(jì)時器用來告訴我們還有多久本地機(jī)器就需要和遠(yuǎn)程服務(wù)器進(jìn)行一次時間同步
- poll: 本地機(jī)和遠(yuǎn)程服務(wù)器多少時間進(jìn)行一次同步(單位為秒). 在一開始運(yùn)行NTP的時候這個poll值會比較小,那樣和服務(wù)器同步的頻率也就增加了,可以盡快調(diào)整到正確的時間范圍.之后poll值會逐漸增大,同步的頻率也就會相應(yīng)減小
- reach: 這是一個八進(jìn)制值,用來測試能否和服務(wù)器連接.每成功連接一次它的值就會增加
- delay: 從本地機(jī)發(fā)送同步要求到服務(wù)器的round trip time
- offset: 這是個最關(guān)鍵的值, 它告訴了我們本地機(jī)和服務(wù)器之間的時間差別. offset越接近于0,我們就和服務(wù)器的時間越接近
- jitter: 這是一個用來做統(tǒng)計(jì)的值. 它統(tǒng)計(jì)了在特定個連續(xù)的連接數(shù)里offset的分布情況. 簡單地說這個數(shù)值的絕對值越小我們和服務(wù)器的時間就越精確
三、配置時間同步
客戶端需要停用ntp服務(wù),否則無法運(yùn)行ntpdata 服務(wù)器地址這個命令 來同步時間,同步的時候會提示ntp被使用中。
1、停用ntp服務(wù)
systemctl stop ntpd
2、手動同步ntp服務(wù)器時間
ntpdate 172.xx.xx.xx
3、定期同步
#每天8點(diǎn)執(zhí)行同步命令 * 8 * * * /usr/sbin/ntpdate 172.xx.xx.xx;/sbin/hwclock -w