本文章主要描述Region Server宕机后, 集群的处理过程,以及测试结果.
Region Server宕机后,做了一下几步,
1.ZK发现并确认RS宕机, 在RS列表中删除宕机的节点,
2.Split日志文件HLog,将每一个日志文件分配给对应的Region
3.将Region分配给其他活着的Region Server
4.Region Server根据日志文件,RS发现HLog可用,将log持久化到HFile中
在HBase0.92版本以后,为了提高RS的性能,RS接受到log文件后,会新启动一个线程,单独处理Hlog文件,而不影响RS上原有的Region正常工作.
在这里由一点疑问,一张表对应多个Region,每个Region运行在不同的RegionServer上,那么当其中一个Region所在的RS宕机后,是否影响其他Region工作呢,对整个集群是否由影响,在这里,做了如下的测试.
在Hbase上建立一个user表, create 'user','info',很简单的表,默认user只有一个Region,为它指定5个Region,分别运行在RS1,2,3,4,5上.
STARTKEY => '', ENDKEY => '-2016043150' rs1
STARTKEY => '-2016043150', ENDKEY => '-303030913' rs2
STARTKEY => '-303030913', ENDKEY => '-554557441' rs3
STARTKEY => '-554557441', ENDKEY => '2101159052' rs4
STARTKEY => '2101159052', ENDKEY => '' rs5
启动两个线程thread4,thread5, 向rs4和rs5上分别插入大量数据,当数据量足够大时,停掉rs4,这时可以在控制上看到,thread5可以正常插入数据,thread4不工作,大概10秒之后,thread4重新工作,这时查看.META.表,可以看到rowkey在STARTKEY => '-554557441', ENDKEY => '2101159052'的region已经被分配到其他的RS上.
由此可以看出,当RS宕机后,只对该RS内的Region有影响,不会对整个集群造成影响.