linux同步多台服务器的时间
2018-08-31
张子阳
分类: Linux
今天在运行一个Spark作业时出现了下面一个异常:
diagnostics: Application application_1535358999915_2006 failed 2 times dutempt_1535358999915_2006_000002. Got exception: org.apache.hadoop.yarn.exceptions.d request to start container. This token is expired. current time is 1535728077792 found 1535699829483 Note: System times on machines may be out of sync. Check system time and time zone at sun.reflect.GeneratedConstructorAccessor78.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingCon45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ... ...(省略10行) . Failing the application.
核心一句是:This token is expired. current time is 1535728077792 found 1535699829483 Note: System times on machines may be out of sync. Check system time and time zone。
在4台服务器上执行了一遍date,发现其中有1台的日期和其他3台差了8个多小时,其余3台的服务器虽然日期近似,但也不完全相同,少则相差十几秒,多则相差一分钟。
所以有必要将4台服务器(位于同一个集群)的日期调整为完全一致。除此以外,这个集群是没有外网访问的(外网既不能进也不能出),因此无法直接和互联网上的时间服务器进行同步。而我有一个集群的客户端,这个客户端可以进行外网访问,我已在这个客户端上配置好了ssh,可以通过这个集群客户端来管理集群。
因此思路就是让客户端同步互联网时间服务器的时间,再让集群同步客户端的时间。
这篇文章将记录这一过程,所有操作均在集群的客户端上完成。
首先确保当前时区正确,中国时区为UTC+8(CST,China Standard Time)
现在客户端上执行下面的操作,将本机时区设为上海时间(和北京时间是一样的)。
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # date Fri Aug 31 16:15:56 CST 2018
在4台服务器(主机名分别为hadoop01~hadoop04)执行同样的操作:
for i in {1..4}; do ssh -p 60034 root@hadoop0${i} "echo 'hadoop0${i}'; cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime" done
在集群客户端上安装ntp、ntpdate工具
yum -y install ntp ntpdate
更新客户端时间为互联网时间
# ntpdate 0.centos.pool.ntp.org 31 Aug 16:02:56 ntpdate[31742]: adjust time server 80.127.119.186 offset 0.010105 sec
上面更新日期的服务器地址为:0.centos.pool.ntp.org,来自 /etc/ntp.conf 文件。
将系统时间刷入到BIOS时钟里面去。
# hwclock --systohc
客户端启动ntpd服务
# systemctl restart ntpd.service
让集群同步客户端(192.168.0.150)的时间
for i in {1..4}; do ssh -p 60034 root@hadoop0${i} "echo 'hadoop0${i}'; ntpdate 192.168.0.150; hwclock --systohc" done
最后核对一下时间是否一致:
date; \ for i in {1..4}; do ssh -p 60034 root@hadoop0${i} "echo 'hadoop0${i}'; date" done
结果如下,因为网络问题,会有1秒的差别,说明5台机器(1台客户端,4台集群内服务器)的日期已经完全同步了。
Fri Aug 31 16:28:17 CST 2018 hadoop01 Fri Aug 31 16:28:17 CST 2018 hadoop02 Fri Aug 31 16:28:18 CST 2018 hadoop03 Fri Aug 31 16:28:18 CST 2018 hadoop04 Fri Aug 31 16:28:18 CST 2018
感谢阅读,希望这篇文章能给你带来帮助!