1. 程式人生 > 其它 >時間同步伺服器NTP

時間同步伺服器NTP

前言

伺服器的時間同步操作,是每臺伺服器應該配置的核心功能之一。不管是單機的定時任務,還是大規模的叢集服務,都需要有一個統計的時間基準,才能保證程式的正常執行。

目錄

  1. 配置同步伺服器ntp
  2. 客戶機進行時間同步
  3. 系統時間 和 bios硬體時間hwclock

系統環境

Linux Ubuntu 12.10 64位 server

~ uname -a
Linux delta 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

~ cat /etc/issue
Ubuntu 12.10 \n \l

NTP伺服器配置

NTP伺服器: 10.0.0.240

NTP客戶端: 10.0.0.8

1、安裝NTP軟體包

yum install -y ntp ntpdate

2、NTP的配置檔案詳解

#在與上級時間伺服器聯絡時所花費的時間,記錄在driftfile引數後面的文#件內

driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

#開啟內部遞迴網路介面lo埠
restrict 127.0.0.1
restrict -6 ::1
#允許內網其他機器同步時間,但不能修改NTP伺服器時間引數
restrict 10.0.0.0 mask 255.255.255.0 nomodify
#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
#定義使用的上游 ntp伺服器,將原來的註釋
server ntp1.aliyun.com
server time1.aliyun.com
#允許上層時間伺服器主動修改本機時間
restrict time1.aliyun.com nomodify notrap noquery
restrict ntp1.aliyun.com nomodify notrap noquery
#外部時間伺服器不可用時,以本地時間作為時間服務
server 127.127.1.0
fudge 127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys

#廣播延遲時間

#broadcastdelay 0.008

3、啟動ntp服務

Centos6: /etc/init.d/ntpd start

Centos7: systemctl start ntpd

4、伺服器端顯示時間節點

[root@yum etc]# ntpq -p

remote refid st t when poll reach delay offset jitter

==============================================================================

120.25.115.20 10.137.53.7 2 u 23 64 1 34.125 43.874 0.000

203.107.6.88 10.137.55.181 2 u 22 64 1 50.264 51.479 0.000

*LOCAL(0) .LOCL. 10 l 21 64 1 0.000 0.000 0.000

5、使用客戶端10.0.0.8來測試時間伺服器

1) 先客戶端時間更改為2009-01-01

[root@mysql ~]# date -s "20090101"

Thu Jan 1 00:00:00 CST 2009

[root@mysql ~]# date

Thu Jan 1 00:00:03 CST 2009

2) 使用時間伺服器來同步時間

[root@mysql ~]# ntpdate 10.0.0.240

3 Oct 10:11:06 ntpdate[23572]: step time server 10.0.0.240 offset 339329339.566811 sec

[root@mysql ~]# date

Thu Oct 3 10:11:10 CST 2019

6、客戶端配置crontab每過1小時自動同步ntp伺服器1次

[root@mysql ~]# crontab -e

* 1 * * * /sbin/ntpdate 10.0.0.240 >> /usr/local/logs/crontab/ntpdate.log

[root@mysql ~]# crontab -l

* 1 * * * /sbin/ntpdate 10.0.0.240 >> /usr/local/logs/crontab/ntpdate.log

7、客戶端顯示時間節點

[root@mysql ~]# ntpq -p

remote refid st t when poll reach delay offset jitter

==============================================================================

10.0.0.240 LOCAL(0) 11 u 1 64 1 1.192 0.144 0.000

8、客戶端同步問題

[root@mysql ~]# ntpdate 10.0.0.240

1 Jan 00:00:13 ntpdate[23539]: the NTP socket is in use, exiting

改為題為存在已經啟動的ntpdate服務,重複啟動導致的

處理方案:通過lsof -i:123 來檢視ntp服務的程序後,kill ntp的服務程序即可

[root@mysql ~]# lsof -i:123

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

ntpd 23590 ntp 16u IPv4 179721 0t0 UDP *:ntp

ntpd 23590 ntp 17u IPv6 179722 0t0 UDP *:ntp

ntpd 23590 ntp 18u IPv4 179727 0t0 UDP localhost:ntp

ntpd 23590 ntp 19u IPv4 179728 0t0 UDP mysql:ntp

ntpd 23590 ntp 20u IPv4 179729 0t0 UDP mysql:ntp

ntpd 23590 ntp 21u IPv4 179730 0t0 UDP mysql:ntp

ntpd 23590 ntp 22u IPv6 179731 0t0 UDP localhost:ntp

ntpd 23590 ntp 23u IPv6 179732 0t0 UDP mysql:ntp

ntpd 23590 ntp 24u IPv6 179733 0t0 UDP mysql:ntp

ntpd 23590 ntp 25u IPv6 179734 0t0 UDP mysql:ntp

kill掉ntp服務程序

[root@mysql ~]# kill -9 23590

重新同步成功

[root@mysql ~]# ntpdate 10.0.0.240

3 Oct 10:21:37 ntpdate[23627]: adjust time server 10.0.0.240 offset -0.000162 sec


1. 配置同步伺服器ntp

host: 192.168.1.79

安裝並啟動ntp伺服器


~ sudo apt-get install ntp

~ ps -aux|grep ntp
ntp      23717  0.0  0.0  39752  2184 ?        Ss   19:40   0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 126:135

~ /etc/init.d/ntp status
 * NTP server is running

2. 客戶機進行時間同步

client: 192.168.1.41

使用ntpdate命令


~ ntpdate
 1 Jul 19:58:48 ntpdate[2056]: no servers can be used, exiting

~ ping 192.168.1.79
PING 192.168.1.79 (192.168.1.79) 56(84) bytes of data.
64 bytes from 192.168.1.79: icmp_req=1 ttl=64 time=0.274 ms
64 bytes from 192.168.1.79: icmp_req=2 ttl=64 time=0.285 ms

時間同步操作


~ whereis ntpdate
ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz

#當前時間
~  date
Mon Jul  1 20:05:33 CST 2013

#重置時間
~ sudo date -s 19:00:00
Mon Jul  1 19:00:00 CST 2013
~ date
Mon Jul  1 19:00:03 CST 2013

#同步時間
~ sudo /usr/sbin/ntpdate 192.168.1.79
 1 Jul 20:07:02 ntpdate[2084]: step time server 192.168.1.79 offset 3987.719712 sec

~ date
Mon Jul  1 20:07:10 CST 2013

同步時間成功,設定定時任務,每天同步2次時間。(8:00, 16:00)

#編輯cron任務
~ sudo crontab -e
0 8,16 * * * /usr/sbin/ntpdate 192.168.1.79

#檢視cron設定
~ sudo crontab -l
0 8,16 * * * /usr/sbin/ntpdate 192.168.1.79

#重啟cron任務
~ sudo /etc/init.d/cron restart
cron stop/waiting
cron start/running, process 2190

完成時間同步的設定。

3. 系統時間和bios硬體時間

下面我們做多一點時間的測試:

host機, 先後打出下面兩條命令:時間是正常的

#系統時間
~ date
Mon Jul  1 20:18:54 CST 2013

#硬體時間
~  sudo hwclock --show
Mon 01 Jul 2013 08:19:00 PM CST  -0.172315 seconds

client機,先後打出下面兩條命令,發現兩個命令有時間差。

#系統時間
~ date
Mon Jul  1 20:22:31 CST 2013

#硬體時間
~ sudo hwclock --show
Mon 01 Jul 2013 08:24:38 PM CST  -0.927363 seconds

也就是說,剛才client在同步host時,系統時間已經改變了,而硬體的bios時間沒有改變,所以出現了軟體和硬體的時間不同步的情況。如果client被重啟時,系統就會使用硬體時間。

下面同步系統時間,寫入到硬體bios

#寫入到硬體bios
~ sudo hwclock --systohc

~ date
Mon Jul  1 20:27:19 CST 2013
~ sudo hwclock --show
Mon 01 Jul 2013 08:27:25 PM CST  -0.720095 seconds

好了,這回把時間就設定好了!!

常見的網際網路時間伺服器:

上海交通大學的NTP

ntp.sjtu.edu.cn

aliyun的NTP

ntp1.aliyun.com

ntp2.aliyun.com

ntp3.aliyun.com

ntp4.aliyun.com

ntp5.aliyun.com

ntp6.aliyun.com

ntp7.aliyun.com