1. Linux系統時間的設置node
在Linux中設置系統時間,能夠用date命令:linux
1 //查看時間 2 [root@node1 ~]# date 3 Tue Feb 25 20:15:18 CST 2014 4 //修改時間 5 [root@node1 ~]# date -s "20140225 20:16:00" #yyyymmdd hh:mm:ss 6 Tue Feb 25 20:16:00 CST 2014 7 //date 有多種時間格式可接受,查看date --help
2. Linux硬件時間的設置bash
硬件時間的設置,能夠用hwclock或者clock命令。二者基本相同,只用一個就行,只不過clock命令除了支持x86硬件體系外,還支持Alpha硬件體系。服務器
1 //查看硬件時間能夠是用hwclock ,hwclock --show 或者 hwclock -r 2 [root@node1 ~]# hwclock --show 3 Tue 25 Feb 2014 08:21:14 PM CST -0.327068 seconds 4 //設置硬件時間 5 [root@node1 ~]# hwclock --set --date "20140225 20:23:00" 6 [root@node1 ~]# hwclock 7 Tue 25 Feb 2014 08:23:04 PM CST -0.750440 seconds
3. 系統時間和硬件時間的同步網絡
同步系統時間和硬件時間,可使用hwclock命令。異步
1 //以系統時間爲基準,修改硬件時間 2 [root@node1 ~]# hwclock --systohc <== sys(系統時間)to(寫到)hc(Hard Clock) 3 //或者 4 [root@node1 ~]# hwclock -w 5 //以硬件時間爲基準,修改系統時間 6 [root@node1 ~]# hwclock --hctosys 7 //或者 8 [root@node1 ~]# hwclock -s
4. 不一樣機器之間的時間同步post
爲了不主機時間由於長期運行下所致使的時間誤差,進行時間同步(synchronize)的工做是很是必要的。Linux系統下,通常使用ntp服務器來同步不一樣機器的時間。一臺機器,能夠同時是ntp服務端和ntp客戶端。在生產系統中,推薦使用像DNS服務器同樣分層的時間服務器來同步時間。ui
不一樣機器間同步時間,可使用ntpdate命令,也可使用ntpd服務。url
使用ntpdate比較簡單。格式以下:spa
1 [root@node1 ~]# ntpdate [NTP IP/hostname] 2 [root@node1 ~]# ntpdate 192.168.0.1 3 [root@node1 ~]# ntpdate time.ntp.org
但這樣的同步,只是強制性的將系統時間設置爲ntp服務器時間。若是CPU Tick有問題,只是治標不治本。因此,通常配合cron命令,來進行按期同步設置。好比,在crontab中添加:
0 12 * * * /usr/sbin/ntpdate 192.168.0.1
這樣,會在天天的12點整,同步一次時間。ntp服務器爲192.168.0.1。
或者將下列腳本添加到/etc/cron.hourly/,這樣就每小時會執行一次同步:
#!/bin/bash
#
# $Id: sync-clock,v 1.6 2009/12/23 15:41:29 jmates Exp $
#
# Use ntpdate to get rough clock sync with department of Genome Sciences
# time server.
NTPDATE=/usr/sbin/ntpdate
SERVER="192.168.0.1 "
# if running from cron (no tty available), sleep a bit to space
# out update requests to avoid slamming a server at a particular time
if ! test -t 0; then
MYRAND=$RANDOM
MYRAND=${MYRAND:=$$}
if [ $MYRAND -gt 9 ]; then
sleep `echo $MYRAND | sed 's/.*\(..\)$/\1/' | sed 's/^0//'`
fi
fi
$NTPDATE -su $SERVER
# update hardware clock on Linux (RedHat?) systems
if [ -f /sbin/hwclock ]; then
/sbin/hwclock --systohc
fi
4.2 ntpd服務
使用ntpd服務,要好於ntpdate加cron的組合。由於,ntpdate同步時間會形成時間的突變和跳躍,對一些依賴時間的程序和服務會形成影響。好比sleep,timer等。並且ntpd服務能夠在修正時間的同時,修正CPU Tick。所以理想的作法爲,在開機的時候,使用ntpdate強制同步時間,在其餘時候使用ntpd服務來同步時間。
要注意的是,ntpd 有一個自我保護的機制:若是本機與上源時間相差太大,ntpd 不會運行時間同步操做,因此新設置的時間服務器必定要先 ntpdate 從上源取得時間初值, 而後啓動 ntpd服務。ntpd服務運行後,先是每64秒與上源NTP服務器同步一次,根據每次同步時測得的偏差值經複雜計算逐步調整本身的時間,隨着偏差減少,逐步增長同步的間隔。每次跳動,都會重複這個調整的過程。
4.3. ntpd服務的設置
ntpd服務的相關設置文件以下:
(1)/etc/ntp.conf:這個是NTP daemon的主要設文件,也是 NTP 惟一的設定文件。
(2)/usr /share/zoneinfo/:在這個目錄下的文件實際上是規定了各主要時區的時間設定文件,例如北京地區的時區設定文件在 /usr/share/zoneinfo/Asia/Shanghai 就是了。這個目錄裏面的文件與底下要談的兩個文件(clock 與localtime)是有關係的。
(3)/etc/sysconfig/clock:這個文件其實也不包含在NTP 的 daemon 當中,由於這個是 Linux 的主要時區設定文件。每次開機後,Linux 會自動的讀取這個文件來設定本身系統所默認要顯示的時間。
(4)/etc /localtime:這個文件就是"本地端的時間配置文件"。剛剛那個clock 文件裏面規定了使用的時間設置文件(ZONE) 爲 /usr/share/zoneinfo/Asia/Shanghai ,因此說,這就是本地端的時間了,此時, Linux系統就會將Shanghai那個文件另存爲一份 /etc/localtime文件,因此將來咱們的時間顯示就會以Beijing那個時間設定文件爲準。
下面重點介紹 /etc/ntp.conf文件的設置。在 NTP Server 的設定上,建議不要對Internet 無限制的開放,儘可能僅提供局域網內部的 Client 端聯機進行網絡校時。此外,NTP Server 總也是須要網絡上面較爲準確的主機來自行更新本身的時間啊,因此在咱們的 NTP Server 上面也要找一部最靠近本身的 Time Server 來進行自我校訂。事實上, NTP 這個服務也是 Server/Client 的一種模式。
[root@linux ~]# vi /etc/ntp.conf
# 1. 關於權限設定部分
# 權限的設定主要以 restrict 這個參數來設定,主要的語法爲:
# restrict IP mask netmask_IP parameter
# 其中 IP 能夠是軟件地址,也能夠是 default ,default 就相似 0.0.0.0
# 至於 paramter 則有:
# ignore :關閉全部的 NTP 聯機服務
# nomodify:表示 Client 端不能更改 Server 端的時間參數,不過Client 端仍然能夠透過 Server 端來進行網絡校時。
# notrust :該 Client 除非經過認證,不然該 Client 來源將被視爲不信任網域
# noquery :不提供 Client 端的時間查詢
# notrap :不提供trap這個遠程事件登入
# 若是 paramter 徹底沒有設定,那就表示該 IP (或網域)"沒有任何限制"
restrict default nomodify notrap noquery # 關閉全部的 NTP 要求封包
restrict 127.0.0.1 #這是容許本機查詢
restrict 192.168.0.1 mask 255.255.255.0 nomodify
#在192.168.0.1/24網段內的服務器就能夠經過這臺NTP Server進行時間同步了
# 2. 上層主機的設定
# 要設定上層主機主要以 server 這個參數來設定,語法爲:
# server [IP|HOST Name] [prefer]
# Server 後面接的就是上層 Time Server,而若是 Server 參數
# 後面加上 perfer 的話,那表示咱們的 NTP 主機主要以該部主機來
# 做爲時間校訂的對應。另外,爲了解決更新時間封包的傳送延遲動做,
# 因此可使用 driftfile 來規定咱們的主機
# 在與 Time Server 溝通時所花費的時間,能夠記錄在 driftfile
# 後面接的文件內,例以下面的範例中,咱們的 NTP server 與
# cn.pool.ntp.org聯機時所花費的時間會記錄在 /etc/ntp/drift文件內
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server cn.pool.ntp.org prefer
#其餘設置值,以系統默認值便可
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
keys /etc/ntp/keys
總結一下,restrict用來設置訪問權限,server用來設置上層時間服務器,driftfile用來設置保存漂移時間的文件。
4.4 ntpd服務的啓動與查詢
在啓動NTP服務前,先對提供服務的這臺主機手動的校訂一次時間(由於啓動服務器,端口會被服務端佔用,就不能手動同步時間了)。
[root@node1 ~]# ntpdate cn.pool.ntp.org 25 Feb 21:10:52 ntpdate[9549]: adjust time server 202.112.31.197 offset 0.000101 sec
而後,啓動ntpd服務:
[root@node1 ~]# /etc/init.d/ntpd start Starting ntpd: [ OK ] [root@node1 ~]# date Tue Feb 25 21:11:07 CST 2014
查看端口(ntpd服務使用UDP的123端口):
[root@node1 ~]# netstat -ln |grep :123
udp 0 0 12.12.12.100:123 0.0.0.0:*
udp 0 0 192.168.0.100:123 0.0.0.0:*
udp 0 0 172.18.226.174:123 0.0.0.0:*
udp 0 0 10.10.10.100:123 0.0.0.0:*
udp 0 0 127.0.0.1:123 0.0.0.0:*
udp 0 0 0.0.0.0:123 0.0.0.0:*
udp 0 0 fe80::225:90ff:fe98:61ff:123 :::*
udp 0 0 fe80::225:90ff:fe98:61fe:123 :::*
udp 0 0 fe80::202:c903:1b:afa1:123 :::*
udp 0 0 ::1:123 :::*
udp 0 0 :::123 :::*
如何確認咱們的NTP服務器已經更新了本身的時間呢?
[root@node1 ~]# ntpstat
synchronised to NTP server (202.120.2.101) at stratum 4
time correct to within 557 ms
polling server every 64 s
# 該指令可列出NTP服務器是否與上層聯機。由上述輸出結果可知,時間校訂約
# 爲557*10(-6)秒,且每隔64秒會主動更新時間。
常見的錯誤:
unsynchronized time server re-starting polling server every 64 s // 或者 25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found
其實,這不是一個錯誤。而是因爲每次重啓NTP服務器以後大約要3-5分鐘客戶端才能與server創建正常的通信鏈接。當此時用客戶端鏈接服務端就會報這樣的信息。通常等待幾分鐘就能夠了。
ntpq命令:
[root@node1 ~]# ntpq -p
指令"ntpq -p"能夠列出目前咱們的NTP與相關的上層NTP的狀態,以上的幾個字段的意義以下:
remote:即NTP主機的IP或主機名稱。注意最左邊的符號,若是由"+"則表明目前正在做用鐘的上層NTP,若是是"*"則表示也有連上線,不過是做爲次要聯機的NTP主機。
refid:參考的上一層NTP主機的地址
st:即stratum階層
when:幾秒前曾作過期間同步更新的操做
poll:下次更新在幾秒以後
reach:已經向上層NTP服務器要求更新的次數
delay:網絡傳輸過程鍾延遲的時間
offset:時間補償的結果
jitter:Linux系統時間與BIOS硬件時間的差別時間
最後說起一點,ntp服務默認只會同步系統時間。若是想要讓ntp同時同步硬件時間,能夠設置/etc/sysconfig/ntpd 文件。
在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 這樣,就可讓硬件時間與系統時間一塊兒同步。
管理節點:192.168.0.100,192.168.0.101
計算節點:192.168.0.1~192.168.0.50
I/O節點:192.168.0.51~192.168.0.54
Internet NTP服務器:cn.pool.ntp.org
圖 1 NTP時間同步方案設計
方案詳細解釋:
(1)管理節點1做爲主NTP服務器,跟互聯網NTP服務器進行時間同步;管理節點2做爲備用NTP服務器,也跟互聯網NTP服務器進行時間同步。兩個管理節點作Heartbeat,設置一個漂移IP地址192.168.0.103,並對ntpd服務進行雙機高可用;
(2)集羣計算節點和IO節點,跟管理節點的虛擬IP地址192.168.0.103經過ntpd服務作時間同步;
(3)全部節點,在ntp時間同步的同時,設置硬件時間跟系統時間一致;
(4)全部計算節點和IO節點開機時,經過ntpdate跟192.168.0.103進行時間同步,而後再開啓ntpd服務。