內網環境集群主機的時間同步


場景描述

  • 內網主機之間時間不一致,需要作同步;主機多數不能連接外網,只有極少數幾台能連接外網

系統環境

  • centos7
  • root權限

實施方案

  • 內網中一台主機A (如172.16.59.25)與外網互通,通過外網 NTP 服務器同步時間

  • 主機A對內網提供 NTP 服務

  • 內網其他機器通過主機A進行對時

實施過程

主機A設置

# 安裝NTP軟件
# 方式1
yum -y install ntp
# 方式2(嚴格按照順序autogen->ntpdate->ntp)
rpm -hiv autogen-libopts-5.18-5.el7.x86_64.rpm
rpm -hiv ntpdate-4.2.6p5-18.el7.centos.x86_64.rpm
rpm -hiv ntp-4.2.6p5-18.el7.centos.x86_64.rpm

# 編輯NTP配置
vim /etc/ntp.conf

ntp.conf 配置如下

driftfile /var/lib/ntp/drift
# 默認拒絕客戶端所有操作
restrict default kod notrap nomodify nopeer noquery
# 允許本地操作
restrict 127.0.0.1
restrict ::1
# 允許該網段同步時間,但不可修改NTP服務器時間
restrict 172.16.59.0 mask 255.255.255.0 nomodify
# 用於NTPD的上級服務器、本機時鍾的同步,以及時鍾的層次stratum
server cn.ntp.org.cn prefer
server edu.ntp.org.cn iburst
# 本機時間兜底
server 127.127.1.0
fudge 127.127.1.0 stratum 8

includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
# 編輯 ntpd 文件
vim /etc/sysconfig/ntpd

ntpd 文件修改如下

OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"
# BIOS時間也會跟隨改變
SYNC_HWCLOCK=yes
# 查看狀態
systemctl status ntpd.service
ntpstat

# 重啟服務
systemctl restart ntpd.service
# 開機啟動
systemctl enable ntpd.service

其他主機設置

# 安裝 ntpdate 軟件
# 方式1
yum -y install ntp
# 方式2(嚴格按照順序autogen->ntpdate->ntp)
rpm -hiv autogen-libopts-5.18-5.el7.x86_64.rpm
rpm -hiv ntpdate-4.2.6p5-18.el7.centos.x86_64.rpm
rpm -hiv ntp-4.2.6p5-18.el7.centos.x86_64.rpm

# 編輯配置文件
vi /etc/ntp.conf

ntp.conf配置如下

driftfile /var/lib/ntp/drift

# 默認拒絕客戶端所有操作
restrict default kod notrap nomodify nopeer noquery
# 禁止本身的server
# server cn.ntp.org.cn prefer
# server edu.ntp.org.cn iburst
restrict 172.16.59.25
restrict 127.0.0.1
restrict ::1

server 172.16.59.25

# server    127.127.1.0    
# fudge     127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor

# 編輯 ntpd 文件
vim /etc/sysconfig/ntpd

ntpd 文件修改如下

OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"
# BIOS時間也會跟隨改變
SYNC_HWCLOCK=yes
systemctl restart ntpd.service
# 開機啟動
systemctl enable ntpd.service

過程總結

可能失敗原因及分析

  • NTP 服務剛啟動后,客戶端無法同步時間,需等待幾分鍾才可以

  • 關閉或者設置防火牆,允許123端口

  • 網絡上存在多個 NTP 服務器時,客戶端切換同步源后需要重啟

  • 如果本機與 NTP 服務器時間誤差超過1000s,則同步失敗。可以按照下面命令解決。

    # 更改時區為中國
    timedatectl set-timezone "Asia/Shanghai"
    # 與外網同步一次時間
    ntpdate cn.ntp.org.cn
    # 注意 ntpdate
    

stratum 的概念

  • 頂層是1,值為0時表示層數不明,層的值是累加的,比如 NTP 授時方向是 A -> B -> C,假設 A 的層值是3,那么B從A獲取到時間層值為4,C從B獲取到時間,C的層值被置為5。一般只有整個 NTP 系統最頂層的服務器stratum才設為1。

  • NTP 同步的方向是從stratum 值較小的節點向較大的節點傳播,如果某個 NTP 客戶端接收到 stratum 比自己還要大,那么 NTP 客戶端認為自己的時間比接受到的時間更為精確,不會進行時間的更新。

  • 對於大部分 NTP 軟件系統來說,服務啟動后,stratum 值初始是0,一旦 NTP 服務獲取到了時間,NTP 層次就設置為上級服務器 stratum +1。對於具備衛星時鍾、原子鍾的專業 NTP 設備,一般 stratum 值初始是1。

NTPD運行過程

  • NTPD 啟動后,stratum 值初始是0,此時 NTPD 接收到 NTP 請求,回復 stratum 字段為0的 NTP 包,客戶端接收后,發現 stratum 字段無效,拒絕更新時間,造成時間更新失敗。

  • 幾分鍾后,NTPD從上級服務器獲取到了更新,設置了正確的 stratum,回復 stratum 字段為 n+1的 NTP 包,客戶端接收后,確認 stratum 有效,成功進行時間更新。

  • 在 NTPD 上級服務器不可用的情況下,NTPD 將本機時鍾服務模擬為一個上級 NTP 服務器,地址使用環回127.127.1.0。服務啟動幾分鍾后,NTPD 從 127.127.1.0 更新了時鍾,設置了有效的 stratum,客戶端接收后,成功進行時間更新。

ntpd與ntpdate修改時間的區別

ntpd 不僅僅是時間同步服務器,他還可以做客戶端與標准時間服務器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可同時運行。

時鍾的躍變,對於某些程序會導致很嚴重的問題。許多應用程序依賴連續的時鍾——畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如數據庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之后,ntpdate使用settimeofday設置系統時間,這有幾個非常明顯的問題:

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

第二,這樣做不精確。一旦ntp服務器宕機,跟隨它的服務器也就會無法同步時間。與此不同,ntpd不僅能夠校准計算機的時間,而且能夠校准計算機的時鍾。

第三,這樣做不夠優雅。由於是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯(例如,如果ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。

因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其余的時候,理想的做法是使用ntpd來校准時鍾,而不是調整計算機時鍾上的時間。

NTPD 在和時間服務器的同步過程中,會把 BIOS 計時器的振盪頻率偏差——或者說 Local Clock 的自然漂移(drift)——記錄下來。這樣即使網絡有問題,本機仍然能維持一個相當精確的走時

RTC硬件時間相關命令

clock –r         顯示硬件時鍾與日期

clock –s         將系統時鍾調整為與目前的硬件時鍾一致。

clock –w        將硬件時鍾調整為與目前的系統時鍾一致

查看和修改時間

# 查看時間和日期
date
date -R
timedatectl

# 查看本月月歷
cal

# 設置時間和日期
# 例如:將系統日期設定成2019年11月3日的命令
date -s 11/03/2019

#將系統時間設定成下午5點55分55秒的命令
date -s 17:55:55

# 將當前時間和日期寫入BIOS,避免重啟后失效**
hwclock -w

# 修改時區
tzselect


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM