NTP介紹
- NTP(Network Time Protocol,網路時間協議)是用來使網路中的各個計算機時間同步的一種協議。它的用途是把計算機的時鐘同步到世界協調時UTC(Universal Time Coordinated,世界協調時),UTC 是由原子鐘報時的國際標準時間,而 NTP 獲得 UTC 的時間來源可以是原子鐘、天文臺、衛星,也可從 Internet 上面獲取。其精度在區域網內可達0.1ms,在網際網路上絕大多數的地方其精度可以達到1-50ms。 補充知識:搶票軟體等就是提前傳送已知的資料包,時間一到伺服器開始接受就會第一時間搶到。 NTP 伺服器就是利用 NTP 協議提供時間同步服務的。
NTP伺服器顧名思義就是時間同步伺服器(Network Time Protocol),Linux下的ntp伺服器配置相對來說都比較容易,但在Linux下有一個弊端,不同時區或者說是時間相差太大的無法同步,所以在配置ntp伺服器之前需要把時間配置成相同的。
NTP時鐘同步C/S模式:
NTP伺服器作用:
- 產生與處理系統是各種計算裝置叢集的,計算裝置將統一、同步的標準時間用於記錄各種事件發生時序,如E-MAIL資訊、檔案建立和訪問時間、資料庫處理時間等。
- 系統內不同計算裝置之間控制、計算、處理、應用等資料或操作都具有時序性,若計算機時間不同步,這些應用或操作或將無法正常進行。
- 系統是對時間敏感的計算處理系統,時間同步是大資料能夠得到正確處理的基礎保障,是大資料得以發揮作用的技術支撐。
- 大資料時代,整個處理計算系統內的大資料通訊都是通過網路進行,時間同步也是如此,利用大資料的網際網路絡傳送標準時間資訊,實現大資料系統內時間同步。
NTP時鐘同步方式說明
NTP在linux下有兩種時鐘同步方式,分別為直接同步和平滑同步:
- 直接同步
使用ntpdate命令進行同步,直接進行時間變更。如果伺服器上存在一個12點執行的任務,當前伺服器時間是13點,但標準時間時11點,使用此命令可能會造成任務重複執行。因此使用ntpdate同步可能會引發風險,因此該命令也多用於配置時鐘同步服務時第一次同步時間時使用。
- 平滑同步
使用ntpd進行時鐘同步,可以保證一個時間不經歷兩次,它每次同步時間的偏移量不會太陡,是慢慢來的,這正因為這樣,ntpd平滑同步可能耗費的時間比較長。
ntpd、ntpdate的區別
- 使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什麼區別。ntpd不僅僅是時間同步伺服器,他還可以做客戶端與標準時間伺服器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可同時執行。
- 時鐘的躍變,對於某些程式會導致很嚴重的問題。許多應用程式依賴連續的時鐘——畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如資料庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之後,ntpdate使用settimeofday(2)設定系統時間,這有幾個非常明顯的問題:
- 第一,這樣做不安全。ntpdate的設定依賴於ntp伺服器的安全性,攻擊者可以利用一些軟體設計上的缺陷,拿下ntp伺服器並令與其同步的伺服器執行某些消耗性的任務。由於ntpdate採用的方式是跳變,跟隨它的伺服器無法知道是否發生了異常(時間不一樣的時候,唯一的辦法是以伺服器為準)。
- 第二,這樣做不精確。一旦ntp伺服器當機,跟隨它的伺服器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。
- 第三,這樣做不夠優雅。由於是跳變,而不是使時間變快或變慢,依賴時序的程式會出錯(例如,如果ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。
- 因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其餘的時候,理想的做法是使用ntpd來校準時鐘,而不是調整計算機時鐘上的時間。
- NTPD 在和時間伺服器的同步過程中,會把 BIOS 計時器的振盪頻率偏差——或者說 Local Clock 的自然漂移(drift)——記錄下來。這樣即使網路有問題,本機仍然能維持一個相當精確的走時。
注意:NTP 也存在一定侷限性,如果系統時間比正確的時間要快的話,NTP 是不會幫你做調整的,而且當你的時間設定和正確的時間相差很大的時候,NTP 會花上很長一段時間進行同步調整。此外,當本地時間與標準時間相差30分鐘以上時, ntpd 會停止工作。
環境準備
屬性 | NTP伺服器 | NTP客戶端 |
節點 | wencheng-1 | wencheng-2 |
系統 | CentOS Linux release 7.5.1804 (Minimal) | CentOS Linux release 7.5.1804 (Minimal) |
核心 | 3.10.0-862.el7.x86_64 | 3.10.0-862.el7.x86_64 |
SELinux | setenforce 0 | disabled | setenforce 0 | disabled |
Firewlld | systemctl stop/disabled firewalld | systemctl stop/disabled firewalld |
IP地址 | 172.16.70.185 | 172.16.70.186 |
NTP伺服器操作步驟。
- 1.確認wencheng-1節點是否安裝ntp,並修改時區。
[root@wencheng-1 ~]# rpm -qa | grep ntp [root@wencheng-1 ~]# yum install -y ntp [root@wencheng-1 ~]# rpm -qa | grep ntp ntpdate-4.2.6p5-29.el7.centos.2.x86_64 ntp-4.2.6p5-29.el7.centos.2.x86_64 [root@wencheng-1 ~]# systemctl start ntpd [root@wencheng-1 ~]# systemctl status ntpd ● ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2021-03-25 01:09:13 EDT; 1 months 16 days ago Process: 8716 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 8717 (ntpd) CGroup: /system.slice/ntpd.service └─8717 /usr/sbin/ntpd -u ntp:ntp -g Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 2 lo 127.0.0.1 UDP 123 Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 3 ens33 172.16.70.185 UDP 123 Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 4 lo ::1 UDP 123 Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listen normally on 5 ens33 fe80::20c:29ff:fe7f:222b UDP 123 Mar 25 01:09:13 wencheng-1 ntpd[8717]: Listening on routing socket on fd #22 for interface updates Mar 25 01:09:13 wencheng-1 ntpd[8717]: 0.0.0.0 c016 06 restart Mar 25 01:09:13 wencheng-1 ntpd[8717]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM Mar 25 01:09:13 wencheng-1 ntpd[8717]: 0.0.0.0 c011 01 freq_not_set Mar 25 01:09:20 wencheng-1 ntpd[8717]: 0.0.0.0 c61c 0c clock_step +4075317.470688 s May 11 05:11:18 wencheng-1 ntpd[8717]: 0.0.0.0 c614 04 freq_mode [root@wencheng-1 ~]# netstat -ntplu | grep ntp udp 0 0 172.16.70.185:123 0.0.0.0:* 11655/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 11655/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 11655/ntpd udp6 0 0 fe80::20c:29ff:fe7f:123 :::* 11655/ntpd udp6 0 0 ::1:123 :::* 11655/ntpd udp6 0 0 :::123 :::* 11655/ntpd [root@wencheng-1 ~]# systemctl enable ntpd Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service. [root@wencheng-1 ~]# timedatectl set-timezone Asia/Shanghai [root@wencheng-1 ~]# timedatectl Local time: Tue 2021-05-11 17:16:10 CST Universal time: Tue 2021-05-11 09:16:10 UTC RTC time: Thu 2021-03-25 05:04:14 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
- 2.wencheng-1修改檔案 /etc/ntp.conf。
[root@wencheng-1 ~]# mv /etc/ntp.conf /etc/ntp.conf_bak [root@wencheng-1 ~]# vim /etc/ntp.conf # 新增一下內容 # -------------------------------------- ##記錄和上級時間伺服器的時間差異. driftfile /var/lib/ntp/drift ##新增:日誌目錄. logfile /var/log/ntpd.log restrict default nomodify ##引數解釋 ## restrict可以限制客戶端許可權,可以使用的 parameter說明: ## kod kod技術可以阻止“Kiss of Death “包對伺服器的破壞 ## nomodity client可通過ntp進行時間同步,但不能通過 ntpq, ntpc 等更改server引數 ## notrap 不提供trap遠端登陸 (remote event logging) 功能 ## nopeer 不與其它同一層的ntp server進行時間同步 ## noquery 客戶端不能夠使用 ntpq, ntpc 等指令來查詢時間伺服器,即拒絕ntp時間同步; ## notrust 拒絕無認證的client ## ignore 拒絕所有連線到ntp server的請求 ## 如果出現問題,可能是ipv6配置出錯,可以嘗試新增restrict -6 default kod nomodify notrap nopeer noquery #針對ipv6設定 ## 或者修改預設為restrict -4 default nomodify notrap nopeer noquery ##開啟允許本地所有操作 restrict 127.0.0.1 restrict ::1 restrict 172.16.0.0 mask 255.255.255.0 nomodify notrap ## restrict 用來分配指定網段許可權,格式如下: ## restrict [授權同步的網段] mask [netmask] [parameter] ##這一行的含義是授權172.16.0.0網段上的所有機器可以從這臺機器上查詢和同步時間. ##新增:時間伺服器列表. server time1.aliyun.com server time2.aliyun.com server time3.aliyun.com prefer ##引數解釋 ## server 用來設定上一級ntp伺服器,這裡使用阿里雲提供的ntp伺服器,parameter說明: ## prefer 最高優先順序 ## burst 當一個運程NTP伺服器可用時,向它傳送一系列的併發包進行檢測。 ## iburst 當一個運程NTP伺服器不可用時,向它傳送一系列的併發包進行檢測。 # 如果無法與上層ntp server通訊以本地時間為標準時間 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys disable monitor # ------------------------------------------
- 3.ntp服務,預設只會同步系統時間。如果想要讓ntp同時同步硬體時間,可以設定/etc/sysconfig/ntpd檔案
[root@wencheng-1 ~]# mv /etc/sysconfig/ntpd /etc/sysconfig/ntpd_bak [root@wencheng-1 ~]# vim /etc/sysconfig/ntpd # 新增一下內容 # ------------------------------------------- # Drop root to id 'ntp:ntp' by default. OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid" # 設定是否同步到硬體時間 SYNC_HWCLOCK=yes # Additional options for ntpdate 預設選項為-g NTPDATE_OPTIONS="-g" # -------------------------------------------
- 4.驗證與狀態檢查
[root@wencheng-1 ~]# systemctl restart ntpd [root@wencheng-1 ~]# netstat -ntplu | grep ntp udp 0 0 172.16.70.185:123 0.0.0.0:* 11655/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 11655/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 11655/ntpd udp6 0 0 fe80::20c:29ff:fe7f:123 :::* 11655/ntpd udp6 0 0 ::1:123 :::* 11655/ntpd udp6 0 0 :::123 :::* 11655/ntpd [root@wencheng-1 ~]# ntpstat synchronised to NTP server (203.107.6.88) at stratum 3 time correct to within 479 ms polling server every 64 s 注意:此命令出現上述synchronised結果比較慢,都等待幾分鐘。 [C:\~]$ ping time3.aliyun.com # 驗證檔案/etc/ntp.conf的server time3.aliyun.com prefer對應IP地址 正在 Ping ntp.aliyun.com [203.107.6.88] 具有 32 位元組的資料: 來自 203.107.6.88 的回覆: 位元組=32 時間=40ms TTL=51 來自 203.107.6.88 的回覆: 位元組=32 時間=40ms TTL=51 來自 203.107.6.88 的回覆: 位元組=32 時間=44ms TTL=51 來自 203.107.6.88 的回覆: 位元組=32 時間=41ms TTL=51 203.107.6.88 的 Ping 統計資訊: 資料包: 已傳送 = 4,已接收 = 4,丟失 = 0 (0% 丟失), 往返行程的估計時間(以毫秒為單位): 最短 = 40ms,最長 = 44ms,平均 = 41ms [root@wencheng-1 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *203.107.6.88 10.137.38.86 2 u 66 64 377 39.198 5.282 2.988 LOCAL(0) .LOCL. 10 l 531 64 0 0.000 0.000 0.000 ntpq -p 引數詳解 remote :本地主機所連線的上層NTP伺服器,最左邊的符號如下: 如果有[*] 代表目前正在使用當中的上層NTP伺服器。 如果有[+] 代表也有連上上層NTP伺服器,可以作為提高時間更新的候選NTP伺服器 如果有[-] 代表同步的該NTP伺服器被認為是不合格的NTP Server 如果有[x] 代表同步的外網NTP伺服器不可用 refid :指的是給上層NTP伺服器提供時間校對的伺服器。 St:上層NTP伺服器的級別。 When: 上一次與上層NTP伺服器進行時間校對的時間(單位:s) Poll :本地主機與上層NTP伺服器進行時間校對的週期(單位:s) reach:八進位制數,表示最近8次時鐘同步包接收情況(1表示接收成功,0表示接收失敗。每接收一個包左移一位。對於一個執行較長時間的NTP client而言,這個值應該是377->11,111,111,即最近8次包接收均成功;否則表示有丟包情況發生). delay:網路傳輸過程當中延遲的時間,單位為 10^(-6) 秒 offset:時間補償的結果,單位為10^(-6) 秒 jitter:Linux 系統時間與 BIOS 硬體時間的差異時間, 單位為 10^(-6) 秒。
NTP客戶端操作步驟。
- 1.確認是否安裝ntp,並修改時區。
[root@wencheng-2 ~]# yum install -y ntp [root@wencheng-1 ~]# rpm -qa | grep ntp ntpdate-4.2.6p5-29.el7.centos.2.x86_64 ntp-4.2.6p5-29.el7.centos.2.x86_64 [root@wencheng-2 ~]# timedatectl set-timezone Asia/Shanghai [root@wencheng-2 ~]# date -s "2020-10-10 10:10" #預設定錯誤的時間 [root@wencheng-2 ~]# timedatectl Local time: Sat 2020-10-10 10:16:35 CST Universal time: Sat 2020-10-10 02:16:35 UTC RTC time: Wed 2021-05-12 04:18:08 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
- 2.修改檔案/etc/ntp.conf,主要修改Server選擇部分。
[root@wencheng-2 ~]# cp /etc/ntp.conf /etc/ntp.conf_bak [root@wencheng-2 ~]# vim /etc/ntp.conf #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst #註釋所有centos.pool.ntp,再新增 server 172.16.70.185 frefer fudge 172.16.70.185 stratum 10
- 3.驗證與狀態檢查
[root@wencheng-2 ~]# systemctl start ntpd [root@wencheng-2 ~]# systemctl enable ntpd [root@wencheng-2 ~]# netstat -nutpl | grep ntp udp 0 0 172.16.70.186:123 0.0.0.0:* 9088/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 9088/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 9088/ntpd udp6 0 0 fe80::20c:29ff:fef6:123 :::* 9088/ntpd udp6 0 0 ::1:123 :::* 9088/ntpd udp6 0 0 :::123 :::* 9088/ntpd [root@wencheng-2 ~]# ntpstat synchronised to NTP server (172.16.70.185) at stratum 4 time correct to within 76 ms polling server every 256 s [root@wencheng-2 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *172.16.70.185 203.107.6.88 3 u 253 256 377 0.312 1.557 0.997 [root@wencheng-2 ~]# timedatectl Local time: Wed 2021-05-12 14:24:30 CST Universal time: Wed 2021-05-12 06:24:30 UTC RTC time: Wed 2021-05-12 06:24:30 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a
- 4.新增時間同步計劃任務。
[root@wencheng-2 ~]# vim /etc/cron.d/ntp # 每兩個小時同步一次,並修改硬體時間 0 */2 * * * /usr/sbin/ntpdate 172.16.70.185 && /usr/sbin/hwclock -w &>/dev/null
至此,NTP伺服器構建,並完成客戶端時間同步!