首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HBase 容错机制详述

上篇主要内容是关于HBase整体的架构设计和数据模型的概述,本篇将重点介绍HBase的容错机制,容错是分布式系统中很关键的一点,关系到系统的高可用性,如果没有做好很好的容错机制,那么一旦出现问题,对于大数据系统将是灾难性的。

其实当了解到了HBase整体的架构思路之后,就可以想象到其中都包含哪些部分的容错,比如其中很重要并且显而易见的一点就是关于数据的存储容错,HBase架构设计原理文中提及到Memstore的机制,HBase在写入数据时是把数据写入到memstore中,然后就返回了,那么可以思考到如果写入到memstore之后,memstore没有push到region怎么办?那数据岂不是就丢失了么?

上篇也提及到ResgionServer,我们知道master会有多个RegionServer,如果⼀一个RegionServer挂掉或者中断链接了,那么HBase该如何处理?

如果Master节点挂了,那么整个的HBase的集群不就不可⽤用了吗?对于Master这种情况HBase是如何处理的?

对于上面的这些情况,其实都是属于异常容错机制⾥里⾯面所要考虑的。

一 . WAL容错

hbase 是基于 LSM 树的存储系统,它使用日志文件和内存存储来的存储架构将随机写转换成顺序写,以此保证稳定的数据插入速率。而这里说的日志文件即是wal文件,用于在服务器崩溃后回滚还没持久化的数据。

WAL 即 Write Ahead Log (预先写日志),它的作用就是将数据通过日志的方式写到可靠的存储(HDFS)

如图展示了WAL如何与HBase进行结合,HLog所处在位置是同一个Region服务器(可以说在每一个RegionServer节点上)都有一个HLog被Region共享,操作流程如下:

首先客户端启动一个操作来修改数据,每一个修改都封装到 KeyValue 对象实例中,并通过RPC调用发送到含有匹配 Region 的HRegionServer 。一旦 KeyValue 到达,它们就会被发送管理相应行的 HRegion 实例。数据被写到 WAL,然后被放入到实际拥有记录的存储文件的 MemStore 中。同时还会检查 MemStore 是否满了,如果满了就会被刷写到磁盘中去。

1.WAL 实现-HLog类

HLog类是WAL的实现类(源码级的后续编写),大概实现流程如下:当HRegion实例化时,HLog实例会被当作一个参数传入到HRegion的构造器中,当一个region接收到一个更新操作时,可以直接将数据保存到一个共享的WAL实例中去

2.WAL实现 - HKey类

WAL内部存储实际是hadoop的SequenceFile ,这种文件格式是通过Key/Value的存储格式,对于WAL而言,Value就是从Client发送过来的值,Key就是一个HLogKey的实例表示,KeyValue包括row,Column Family,qualifyier和timestamp还有一个“key type”,另外还有一个写入时间,表示修改是什么时候被写⼊入到日志的时间戳,最后这个类存储了多个集群之间进行复制所需要的clusterID

3.HLogRoller

4.HLog的失效机制

刚才提到当数据落盘之后,该Log会被置为失效状态,然后将文件删除掉,那么如何确认该文件是落盘完成,原理上来说数据从Memstore中落盘对应的log就可以删除了,一个文件的所有数据失效,只需要看该文件中最大的sequenceid对应的数据是否已经落盘即可,HBase每次执⾏行flush的时候纪录对应的最大sequenceID,如果前者小于后者,则认为该文件已经失效,然后将文件移动到OldWALs文件夹中。

5.HLog Delete

二 . Master 容错

在HBase中, Master角色的主要工作就是监控所有的RegionServer实例,分配Region,HDFS垃圾回收等,HBase中是多Master模式的,当某一个master的状态不可用之后,Zookeeper会重新选举一个Master来,在Master失效的时候,是不影响读操作的,因为读操作时不经过Master这一层的。读的时候直接从ZK中获取位置信息,然后链接到某个RegionServer服务进⾏行读数据,如图2所示。

三.RegionServer 容错

RegionServer会定期的往ZK中发送心跳,如果间隔一段时间ZK没有收到心跳,则Master将会该RegionServer上⾯面的Region分配到其他的RegionServer上,通过HLog也将由Master分割并发送给RegionServer

加入技术讨论群

为了方便大家相互交流学习,社区创建微信/QQ群,社区群人数已经2500+,欢迎大家加下面助手微信,拉大家进群,自由交流。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171228G0M5Z600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券