HBase因节点时间不同步无法启动regionserver

在搭建Hbase集群时,主节点上的HMaster正常启动,然而其他节点上的HRegionServer却一直无法启动。查看HRegionServer日志文件,找到原因

(日志真的很好用)

hbase在服务器上启动 hbase hregionserver没有启动_hbase


Reported time is too far out of sync with master,Time difference of 61735ms > max allowed of 30000ms

我就理解为,老板要你半小时后跟他汇报工作,此时他手表时间是5:00,你手表时间是5:01,他在5:30时等你汇报,他最多容忍你迟到30秒,结果你5:31才到,迟到60秒,超过他的限度,你就被炒了。

由于节点之间的时间不同,时间差太大,HRegionServer 的 Reported time is too far 超过了最大的30000ms,

解决方法

一,在hbase-site.xml添加配置

<property>
        <name>hbase.master.maxclockskew</name>
        <value>180000</value>
        <description>Time difference of regionserver from master</description>
 </property>

这个方法就是容忍错误,你无法确定value要多大才可满足!
二,用date命令修改所有节点时间,修改成相同的时间,但是执行date的时间不同,也会造成差距,如果有100台节点,第1台执行date与第100台执行date的时间肯定有很大的差距!
三,用NTP服务器同步所有节点时间。这种方法可以通过国家的服务器同步时间,或者可以自己搭建NTP服务器,然后其他节点用客户端与服务器同步,使得其他节点时间与服务端节点时间同步!我最终采用这种方法
现在Linux发行版都己默认安装ntp server
(一)ntp服务器配置
只需修改/etc/ntp.conf配置文件,声明哪些客户端能进行同步,以及同步相当安全权限

vim /etc/ntp.conf

hbase在服务器上启动 hbase hregionserver没有启动_服务器_02


上面简单增加一条语句就是个ntp服务器了,下面测试客启机是否能正常使用;只有在172.28.94.0这个网段的可以与NTP服务端进行时间同步!如果要配置任何主机都可以进行时间同步将“restrict default nomodify notrap noquery”表示默认禁止所有地址同步时间,修改,查看,这行修改成下面:restrict default nomodify notrap

然后启动服务端

#启动
systemctl start ntpd.service
#开机自启动
systemctl enable ntpd.service

(二)ntp客户端

#ntpdate 服务端IP或hostname
ntpdate -d server01

可能出现no server suitable for synchronization found报错
确认防火墙关闭。执行debug功能

ntpdate -d server01

这里我们发现两处问题:
1)
172.28.94.25: Server dropped: strata too high
server 172.28.94.25, port 123
stratum 16, precision -24, leap 11, trust 000
2)
no server suitable for synchronization found
以上两个错误因为NTP server还没有和其自身或者它的server同步上。而正常情况下stratum这个值得范围是“0~15”。
以下的定义是让NTP Server和其自身保持同步,如果在/ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端。
server 127.127.1.0 //回环地址
fudge 127.127.1.0 stratum 8

# vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8
#server 0.rhel.pool.ntp.org
#server 1.rhel.pool.ntp.org
#server 2.rhel.pool.ntp.org

在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。

#开机自启动
systemctl restart ntpd.service

在ntp server上使用命令:

watch ntpq -p
Every 2.0s: ntpq -p                                                                                      Sat Jun 28 15:02:09 2014

     remote           refid     st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        .LOCL.           8 l   51   64    1    0.000    0.000   0.000

当reach由1变为17后再测试客户机是否能正常同步

Every 2.0s: ntpq -p                                                                                      Sat Jun 28 15:05:07 2014

     remote           refid     st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(0)        .LOCL.           8 l   34   64   17    0.000    0.000   0.000

在其他节点执行同步命令

sudo ntpdate server01
#要早root权限下,不然会被拒绝!

hbase在服务器上启动 hbase hregionserver没有启动_hbase在服务器上启动_03


同步成功!

所有节点同步后在启动HBase集群,成功开启!

hbase在服务器上启动 hbase hregionserver没有启动_服务器_04