«

etcd 故障排查之 `the clock difference against peer xxx is too high [xxxs > 1s]`

协助排查 etcd 的一个问题,出现如下日志:

2018-05-16 12:38:59.796724 W | rafthttp: the clock difference against peer e7e21c67737845ce is too high [3.370772704s > 1s]  

从日志描述中可以直观的想到,是不是节点时间不一致了?

在不同的节点上同时执行:

$ date

果然,发现输出时间不一致,相差大概几秒,确定为时间同步问题。

时间同步,这是每个分布式集群必须强调的地方,而对于etcd集群,时间误差超过1s就会导致Raft协议异常,所以时间必须同步。

简单粗暴,是可以通过 date 指令调整系统时间的,如下:

$ date -s "dd/mm/yyyy hh:mm:ss"

肯定不推荐这么做,因为认为操作总是会有误差,不能保证多个节点的时间一致。

最好的办法,当然是通过 NTP 服务器同步机器时间。

有条件的话,可自行搭建一台NDP服务器,比如有一台NTP测试服务器:

- NTP 服务器(测试): 100.106.88.207

接着使用 ntpdate 命令同步时间:

$ ntpdate 100.106.88.207

如果 ntpddate 已经启动了,请杀死后再重新启动,确保连接的是同一台 NTP 服务器。

ntpdate[6747]: the NTP socket is in use, exiting  

如果之前设置了其它服务器的 ntpdate 的关机启动,最好关闭,并为自己的NTP服务器同步设置自动同步,类似脚本如下:

# 在crontab 中添加一条例行任务
$ vi /etc/crontab

00 15 * * * root /usr/sbin/ntpdate 100.106.88.207 ; hwclock --systohc  

这样,就会在每天 00:15 与 NTP服务器同步下时间,同时修改硬件时间。

最后一个知识点,hwclock --systohc 表示同时把把系统时钟(System Clock)设置成硬件时钟(RTC),因为NTP一般只会同步系统时钟。

另外一种同步硬件时钟(RTC)的方式如下:

# vi /etc/sysconfig/ntpd

SYNC_HWCLOCK=yes  
分享