集群中時間不同步有可能會讓大數據的應用程序運行混亂,造成不可預知的問題,比如Hbase、mongodb副本集等,Hbase當時間差別過大時就會掛掉,mongodb如果副本時間過快,會出現時間棧幀溢出提前出發選舉等,所以在大數據集群中,ntp服務,應該作為一種基礎的服務,以下在演示在CentOS 7.2集群上配置ntp服務的過程
首先檢查系統中是否安裝ntp包:rpm -q ntp
然后,執行命令在線安裝ntp:yum -y install ntp
安裝成功之后,再次執行rpm -q ntp 可以看到對應的包:
這個時候可以使用命令查看ntp是否設置為開啟啟動狀態:systemctl is-enabled ntpd
可以看到默認是disable禁用開機啟動的
現在執行:chkconfig ntpd on 或者 systemctl enable ntpd 設置為開機自啟動
設置成功后,ntp服務並不能立即啟動,而是在下次重啟之后啟動,所以現在手動啟動ntp:
systemctl start ntpd.service
啟動之后,執行:netstat -an | grep 123 可以看到ntp服務的123端口已經使用:
===注意防火牆屏蔽ntp端口===
ntp服務器默認端口是123,如果防火牆是開啟狀態,在一些操作可能會出現錯誤,所以要記住關閉防火牆。
或者開啟123端口
iptables:
# yum install iptables iptables-services # iptables -A INPUT -p udp -m udp --dport 123 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -p udp -m udp --dport 123 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT # systemctl restart iptables.service
firewalld:
#yum -y install firewalld
# firewall-cmd --zone=public --add-port=123/udp --permanent # firewall-cmd --reload
執行:ps -ef | grep ntpd 可以看到ntp進程也已經啟動
默認情況下ntp是從外網時間服務器來更新時間的,在集群中使用只要保證集群中所有的服務器時間一致即可,所以先配置其中一台服務器為時間服務器,其他服務器相對來說為這台時間服務器的客戶端,從時間服務器上獲取時間數據,從而避免聯網,可用性更高
1、首先是時間服務器配置:
時間服務器的IP:192.168.0.157
執行 vim /etc/ntp.conf 打開ntp配置文件,找到server指定時間服務器的位置,這些條都注釋掉;然后添加下面2行固定配置:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
然后在restrict指定的兩行下面追加一行: restrict 192.168.1.1 mask 255.255.252.0 nomodify notrap
這個配置根據自己的網關和網段配置,只要能保證局域網主機通信就可以,比如這里子網掩碼為255.255.252.0那么網段配置192.168.0.0也可以,只是通信的范圍不太一樣,總之這個配置就是授權局域網內能從本地同步時間的主機范圍。
參考:
配置下游服務器可以使用該服務的IP網段(192.168.0.0-192.168.0.255) restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.255.0 nomodify 配置上游NTP服務器IP地址 server cn.pool.ntp.org #外部時間服務器不可用時,以本地時間作為時間服務 server 127.127.1.0 #local clock fudge 127.127.1.0 stratum 3
配置好之后,保存並退出,執行 systemctl restart ntpd.service 重啟ntp服務即可
2、然后是其他服務器的配置,這里相當於客戶端的配置:
同樣執行上面的一些命令對ntp進行安裝、啟動、自啟配置、狀態查看等操作,配置文件依然是:/etc/ntp.conf,打開進行如下配置:
同樣注釋默認的server服務器,添加一行指定時間服務器位置:server 192.168.0.157 因為上面時間服務器地址是192.168.0.157
配置好之后,保存,重啟ntp服務即可
所有客戶端都進行以上配置,都啟動之后,集群會自動定期進行服務的同步(啟動后3-5分鍾才會同步),這樣集群的時間就保持一致了
另外如果想要手動同步某一台機器的時間,那么可以依次執行下面命令實現:
systemctl stop ntpd # 先停止服務,否則ntp socket會被占用 ntpdate 192.168.0.157 # 手動執行同步 systemctl start ntpd # 繼續啟動服務
同步時,會看到如下結果表示同步成功:
如果沒有網絡時,可以在https://pkgs.org/download/ntp ntp離線安裝包,執行其中的install.sh腳本即可安裝,配置過程和前面完全一樣
ntp同步狀態查看
1. ntpstat
ntpstat 命令查看時間同步狀態,這個一般需要5-10分鍾后才能成功連接和同步。所以,服務器啟動后需要稍等下。
剛啟動的時候,一般是:
# ntpstat unsynchronised time server re-starting polling server every 8 s
連接並同步后
# ntpstat synchronised to NTP server (100.115.8.147) at stratum 4 time correct to within 1230 ms polling server every 64 s
2. ntpq -p
# ntpq -p
remote refid st t when poll reach delay offset jitter
============================================================================
*10.xx.xx.xx 10.175.113.138 3 u 44 128 377 1.065 -0.469 0.087
+100.xx.xx.xx 10.175.113.138 3 u 112 128 377 3.218 -0.986 0.372
remote: *表示目前使用的ntp server;+表示備用服務器
st:即stratum階層,值越小表示ntp serve的精准度越高;
when:幾秒前曾做過時間同步更新的操作;
Poll表示,每隔多少毫秒與ntp server同步一次;
reach:已經向上層NTP服務器要求更新的次數;
delay:網絡傳輸過程鍾延遲的時間;
offset:時間補償的結果;
jitter:Linux系統時間與BIOS硬件時間的差異時間
其他參數配置參考:https://blog.csdn.net/dengyadeng/article/details/81381142
ntp校時服務器:
server cn.pool.ntp.org
server asia.pool.ntp.org
server cn.ntp.org.cn
server ntp.aliyun.com
server time.asia.apple.com
參考連接:https://www.cnblogs.com/jiawen010/p/12778891.html
時間調整:
# date -s 09:00:00
//往后切2s date -s `date -d "2 second" +"%H:%M:%S"`
//往前切1小時 date -s `date -d "-1 hours" +"%H:%M:%S"`