centos7下配置ntp客戶端同步時間服務

需求:在CentOS7下配置NTP客戶端同步時間服務
簡介:
NTP服務是爲了時鐘同步使用,特別在一些實時性數據庫場景中非常重要。
Centos7下默認使用chronyd服務代替過渡ntpd服務,因此經常遇到大部分人還是記住ntpd服務而不去配置chronyd服務,因此經常在centos7下遇到無法使用ntp服務或ntp服務存在一些問題。以下就centos7下配置和使用ntp服務、ntp驗證、時區等配置進行講解。


本篇所有操作和講解只針對NTP客戶端,不涉及ntp-server操作

CentOS7下安裝和配置NTP(Centos6、redhat系列亦可以參考,不衝突)

    CentOS6和6之前的版本默認使用ndpd服務做客戶端去向ntp-server同步時間。

1、安裝ntp和ntpdate兩個rpm包。
使用yum install ntp、yum install ntpdate命令執行安裝操作(本次省略)
2、配置ntp客戶端文件【/etc/ntp.conf】中的server項, 只保留server的有效行(默認有3-4行server有效行去向公網同步時間,需註釋掉)。如

server 172.29.12.120  perfer      #提供ntp-server的主機地址
server  172.29.120.12 perfer      #提供ntp-server的主機地址

3、啓動ntpd服務、並添加至開機啓動項。如

systemctl  start  ntpd        #啓動ntpd服務
systemctl  start  ntpdate
systemctl enable  ntpd        #將ntpd添加到開機啓動項
systemctl enable  ntpdate
systemctl is-enabled ntpd        #查看是否在開機啓動項
systemctl is-enabled ntpdate
systemctl list-unit-files | grep ntp     #查看是否在開機啓動項
systemctl status ntpd                     #查看ntpd服務的狀態

4、驗證

 ntpq -p       #查看該主機使用的ntp-server情況和同步延時等信息;
 timedatectl      #查看ntpd服務或chronyd服務是否生效。只有centos7、redhat7、ubuntu14等以上(含)纔有該命令;

5、其他配置(或添加時間同步的計劃任務)
使用ntpdate命令也可以執行ntp時間同步,不需要ntp客戶的ntpd服務。如

ntpdate 172.29.120.12     #向172.29.120.12的ntpserver主機同步本地系統時間。
ntpdate -u  172.29.120.12  ##同上,-u參數是可以在客戶端ntpd服務啓動時同時執行的命令。

計劃任務中的時間同步,同樣的效果。也可以和客戶端的ntpd服務同時存在。

crontab -l
0 0 * * 0 /usr/sbin/ntpdate -u 172.29.120.12 || /usr/sbin/ntpdate -u 172.29.12.120

例子:
centos7下配置ntp客戶端同步時間服務

CentOS7下使用NTP遇到的問題

問題1、在CentOS7下使用NTP時,客戶端ntpd服務添加到開機啓動項中了,但主機系統啓動後ntpd服務還是停止狀態(dead),無法正常啓動。

解決以上現象有兩種方法 ,本人常用方法一的操作:
方法一
1.通過命令 systemctl enable ntpd 設置NTP服務開機自啓動。
2.重啓虛擬機後查看 服務運行狀態 systemctl status ntpd ,發現服務並沒有成功啓動。
3.查看chrony是否被設置爲開機自啓動。通過指令 systemctl is-enabled chronyd
或systemctl list-unit-files | grep chrony 查看,發現這個服務已經被設置爲開機自啓動所以導致NTP服務的自啓動失敗。

4.所以要把 chrony 的自啓動去掉。執行指令 systemctl disable chronyd 。
5.重啓虛擬機, 執行 systemctl status ntpd ,問題解決。
systemctl list-unit-files|grep ntpd
systemctl list-unit-files|grep chrony
centos7下配置ntp客戶端同步時間服務
方法二
需要開機自啓動某服務,第一個想到的當然是開機啓動自定義腳本
在Centos之前版本只要在 /etc/rc.d/rc.local 文件中加入 啓動服務的命令,當虛擬機重啓時就會執行該文件中的命令,服務也就啓動了。但是但Centos7版本,這個文件的權限被降低了,所以當你打開這個文件時,註釋中很友好的提示讓你給這個文件賦權,以確保它有可執行權限。chmod +x /etc/rc.d/rc.local 。
所以只要把指令寫到這個文件中,就可以在開機時啓動服務或者讓虛擬機做其它事情。
chmod +x /etc/rc.d/rc.local
echo "systemctl start ntpd" >> !$
centos7下配置ntp客戶端同步時間服務















問題2、ntpdate命令執行報錯,提示ntpd服務已經存在(ntpdate:the NTP socket is in use, exiting)

報錯的原因是因爲客戶端有ntpd服務在運行。因此需要繼續執行,必須加-u參數,如
update -u 172.29.120.12
centos7下配置ntp客戶端同步時間服務

問題3、啓動了ntpd服務,卻未執行過同步時間操作。

需要檢查ntpd服務是否生效、並應用是否也生效了。如
centos7下配置ntp客戶端同步時間服務
centos7下配置ntp客戶端同步時間服務

附錄

1、npq -p 執行結果的參數解釋

centos7下配置ntp客戶端同步時間服務
ntpq -p命令列出了所有作爲時鐘源校正過本地NTP服務器時鐘上層NTP服務器的列表,每一列的含義分別如下:
remote:響應請求的NTP服務器的名稱(IP地址或域名),帶“”的表示本地NTP服務器與該服務器同步
refid:遠程NTP服務器使用的上一級ntp服務器的IP地址
st:遠程NTP服務器的級別,由於NTP是層級結構,有頂端的服務器,多層的Relay Server再到客戶端。所以服務器從高到低,級別可以設定爲1~16級。爲了減緩負荷和網絡堵塞,原則上應該避免直接連接到級別爲1的服務器。
t:本地NTP服務器與遠程NTP服務器的通信方式。u:單播;b:廣播;I:本地
when:上次成功請求後到現在的秒數
poll:本地NTP服務器與遠程NTP服務器同步的時間間隔。
reach:這是一個八進制的值,用來測試衡量前八次查詢是否成功和服務器連接。377表示都成功,0表示不成功
delay:網絡延時,單位爲微秒(μs)
offset:本地NTP服務器與遠程NTP服務器的時間偏移,單位爲毫秒(ms)。offset越接近於0,主機與NTP服務器的時間越接近
jitter:查詢偏差的分佈值,用於表示遠程NTP的網絡延時是否穩定,單位爲微秒(μs)*










2、timedatectl 命令的講解

timedatectl輸出解析
centos7下配置ntp客戶端同步時間服務
1.1.Local time
本地時間,初始值來自於RTC,由內核維護,系統啓動之後和RTC就沒有關係,通常等於RTC+時區值(如上圖的本地時間=RTC+8)


1.2.Universal time
系統時間永遠是UTC,在應用程序使用的時候轉換爲本地時間

1.3.RTC(real-time clock)time
指硬件時間,一般是主板上的特殊電路,專用用於記錄時間,有電池供電,不受服務器和操作系統的開啓關閉影響。也稱作BIOS時間。
需要注意的是:當/etc/sysconfig/clock 文件中 UTC=true時, BIOS 使用UTC時間; UTC=false時, BIOS 使用本地時間。
hwclock --localtime #顯示 BIOS 中實際的時間
hwclock --systohc #根據系統時間設置硬件時間



1.4.Time zone
本地時區,即服務器所在的時區,在中國通常使用Asia/Shanghai
timedatectl set-timezone "Asia/Shanghai" #設置時區爲上海

1.5.NTP enable
狀態爲“yes”,表示開啓NTP同步。
網絡時間協議,英文名稱:Network Time Protocol(NTP)是用來使計算機時間同步化的一種協議,它可以使計算機對其服務器或時鐘源(如石英鐘,GPS等等)做同步化,它可以提供高精準度的時間校正。
timedatectl set-ntp true #開啓ntp同步
timedatectl set-ntp false #禁止ntp同步



1.6.NTP synchronized
爲“yes”,表示NTP同步完成。

1.7.RTC in local TZ
設置RTC時間,爲"no"表示未設置
timedatectl set-local-rtc 1 #將RTC設置爲本地時間
timedatectl set-local-rtc 0 #將RTC設置爲UTC


2.2、timedatectl常用命令
timedatectl set-time 15:58:30 #只設置時間
timedatectl set-time 20151120 #只設置日期
timedatectl set-time '16:10:40 2015-11-20' #設置時間和日期


以上是個人經驗總結,望多多指教

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章