概述
linux伺服器在提供服務時,要和其他機器進行請求的交互,實際生產環境中,可能因為時間不同步,導致了服務異常。
下面介紹下怎麼部署NTP服務來解決這個問題。
ps:強烈吐槽下頭條這個新排版功能,只要圖片解析度比較低然後點添加的時候直接白屏,也無法回退,這個很明顯的bug居然沒測出來,導致我重新寫了三次...
一、NTP服務概述
1、原理
NTP(Network TimeProtocol,網絡時間協議)是用來使計算機時間同步的一種協議。它可以使計算機對其伺服器或時鐘源做同步化,它可以提供高精準度的時間校正(LAN上與標準間差小於1毫秒,WAN上幾十毫秒),切可介由加密確認的方式來防止惡意的協議攻擊。
模式:C/S模式
2、使用的埠
默認NTP服務埠:UDP/123
3、ntp和ntpdate區別
1)兩個服務都是centos自帶的(centos7中不自帶ntp)。ntp的安裝包名是ntp;ntpdate的安裝包是ntpdate。他們並非由一個安裝包提供。
2)ntp守護進程為ntpd,配置文件是/etc/ntp.conf
3)ntpdate用於客戶端的時間矯正,非NTP伺服器可以不啟動NTP。
二、安裝部署
1、IP規劃
2、環境準備
以下基於centos7.3
2.1、關閉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區別和設置
要檢查各個伺服器時間格式,EDT或者是CST,在中國我們將伺服器的時間格式調為CST
EDT:指美國東部夏令時間,波士頓、紐約市、華盛頓哥倫比亞特區,都在這個時區內,跟北京時間有12小時的時差,晚12小時。
CST:可以指下面兩種:
1). 美國中部標準時間(西六區,-6:00),中國是東八區(+8:00),北京時間比美國中部標準時間早14個小時。3:45 PMCST是北京時間凌晨1:45。
2). 中澳大利亞標準時間(+10:30),中國是東八區(+8:00),北京時間比中澳大利亞標準時間晚2個半小時。3:45 PMCST是北京時間下午上午5:45。
將系統的時間格式調整為CST的命令如下兩條:
# mv /etc/localtime /etc/localtime.bak
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、搭建NTP服務端
3.1、部署ntp服務
#確定是否已經安裝NTP包,客戶端只安裝ntpdate安裝包
rpm -qa | grep ntp
#用yum源安裝
yum -y install ntp /*yum安裝NTP服務*/
3.2、服務端修改配置
# vim /etc/ntp.conf
====================================================================================
#設置默認策略為拒絕所有訪問方式的請求
restrict default ignore
#允許哪些機器同步
restrict 127.0.0.1
restrict -6 ::1
#允許區域網內機器同步時間,nomodify拒絕讓他們修改伺服器上的時間
restrict 172.xx.xx.xx mask 255.255.255.0 nomodify notrap
#將該伺服器的本地時間作為ntp server的時間,如果其他客戶端同步,將同步這台伺服器的時間
server 127.127.1.0
#stratum這行是時間伺服器的層次。設為0則為頂級,如果要向別的NTP伺服器更新時間,請不要把它設為0
fudge 127.127.1.0 stratum 2
#每一個system clock的頻率都有小小的誤差,這個就是為什麼機器運行一段時間後會不精確. NTP會自動來監測我們時鐘的誤差值並予以調整.
#但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機以後之前的計算結果也就不會丟失了
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
====================================================================================
說明:
關於restrict格式如下:
其中parameter如下:
- ignore:忽略所有類型的ntp連接
- nomodify:不允許客戶端修改伺服器的時間參數,但是允許客戶端透過這部主機進行時間校驗。
- noquery: 不允許客戶端進行時間校驗。
- notrap:不提供trap時間登錄
- notrust:拒絕沒有認證的客戶端
3.3、啟動ntp服務
systemctl restart ntpd
3.4、驗證
現在已經啟動了NTP的服務,但是系統時間到底和伺服器同步了沒有呢? 為此NTP提供了一個很好的查看工具: ntpq (NTP query)
# watch ntpq -p
建議大家在打開NTP伺服器後就可以運行ntpq命令來監測伺服器的運行.這裡可以使用watch命令來查看一段時間內伺服器各項數值的變化。
這裡st為 配置文件設置的stratum,範圍是0--15,如果為16就是錯誤的
說明:
- remote: 它指的就是本地機器所連接的遠程NTP伺服器
- refid: 它指的是給遠程伺服器(e.g. 193.60.199.75)提供時間同步的伺服器
- st: 遠程伺服器的層級別(stratum). 由於NTP是層型結構,有頂端的伺服器,多層的Relay Server再到客戶端. 所以伺服器從高到低級別可以設定為1-16. 為了減緩負荷和網絡堵塞,原則上應該避免直接連接到級別為1的伺服器的.
- when: 一個計時器用來告訴我們還有多久本地機器就需要和遠程伺服器進行一次時間同步
- poll: 本地機和遠程伺服器多少時間進行一次同步(單位為秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和伺服器同步的頻率也就增加了,可以儘快調整到正確的時間範圍.之後poll值會逐漸增大,同步的頻率也就會相應減小
- reach: 這是一個八進位值,用來測試能否和伺服器連接.每成功連接一次它的值就會增加
- delay: 從本地機發送同步要求到伺服器的round trip time
- offset: 這是個最關鍵的值, 它告訴了我們本地機和伺服器之間的時間差別. offset越接近於0,我們就和伺服器的時間越接近
- jitter: 這是一個用來做統計的值. 它統計了在特定個連續的連接數里offset的分布情況. 簡單地說這個數值的絕對值越小我們和伺服器的時間就越精確
三、配置時間同步
客戶端需要停用ntp服務,否則無法運行ntpdata 伺服器地址這個命令 來同步時間,同步的時候會提示ntp被使用中。
1、停用ntp服務
systemctl stop ntpd
2、手動同步ntp伺服器時間
ntpdate 172.xx.xx.xx
3、定期同步
#每天8點執行同步命令
* 8 * * * /usr/sbin/ntpdate 172.xx.xx.xx;/sbin/hwclock -w
覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~