HBase系统架构
HBase是基于列式存储的分布式数据库,底层存储采用的是LSM树,是Hadoop生态下核心技术之一。它构建在HDFS之上,内置容错恢复与数据冗余,扩展性好(可横向扩展);采用列式存储,完全分布式(数据分区、故障自动恢复)。
HBase架构
HBase采用主-从(Master/Slave)架构,由以下类型节点组成:
- HMaster节点
- RegionServer节点
- ZooKeeper集群
HMaster和NameNode都支持多个热备份,使用ZooKeeper来做协调。
ZooKeeper一般由三台机器组成一个集群,内部使用PAXOS算法,可以支持同时少于半数的宕机。
HMaster节点
HMaster是HBase集群中的主控服务器。
HMaster主要用于HRegion的分配和管理,DDL(既Table的新建、删除、修改等)的实现等,既它主要有两方面的职责:
- 1) 协调HRegionServer。启动时HRegion的分配,以及负载均衡和修复时HRegion的重新分配。监控集群中所有HRegionServer的状态(通过心跳和监听ZooKeeper中的状态)。
- 2) 管理职能。创建、删除、修改Table的定义(namespace和table的增删改,column familiy的增删改等)。
默认,HMaster运行在端口16000,其HTTP Web UI使用端口16010。
HMaster没有单点故障问题,可以启动多个HMaster,通过ZooKeeper的Master Election机制保证同时只有一个HMaster出于Active状态,其他的HMaster则处于热备份状态。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。
HRegionServer
HRegionServer是HBase集群中具体对外提供服务的进程。其功能可总结如下:
- 服务于分配给它的regions(表)
- 处理客户端的读/写请求
- 将缓存刷新(flush)到HDFS
- 维护WAL预写日志(Write-Ahead logs)
- 执行compactions
- 负责处理region split(拆分region)
HRegion
HBase使用RowKey(行键)将表水平切割成多个HRegion。从HMaster的角度,每个HRegion都纪录了它的StartKey和EndKey。
RowKey是排序的,Client可以通过HMaster快速定位每个RowKey在哪个Region中。
Region由HMaster分配到相应的RegionServer中,然后由RegionServer负责Region的启动和管理、和Client的通信、负责数据的读(使用HDFS)。
每个RegionServer可以同时管理1000个左右的Region(实际少(20-200)而大(5-20G))。
ZooKeeper
ZooKeeper是HBase集群的协调者,为HBase集群提供协调服务。
它存放整个HBase集群的元数据以及集群的状态信息。
它存储HMaster的地址,并存储HBase中表的设计模式。
它实时管理着HMaster和HRegionServer的状态,并且会在它们宕机时通知给HMaster,从而HMaster可以实现HMaster之间的failover,或对宕机的HRegionServer中的HRegion的修复(将它们分配给其他的HRegionServer)。
ZooKeeper集群本身使用一致性协议(PAXOS协议)保证每个节点状态的一致性。
组件协同工作流程:
ZooKeeper协调集群所有节点的共享信息,在HMaster和HRegionServer连接到ZooKeeper后创建Ephemeral节点,并使用Heartbeat机制维持这个节点的存活状态,如果某个Ephemeral节点实效,则HMaster会收到通知,并做相应的处理。
另外,HMaster通过监听ZooKeeper中的Ephemeral节点(默认:/hbase/rs/*)来监控HRegionServer的加入和宕机。在第一个HMaster连接到ZooKeeper时会创建Ephemeral节点(默认:/hbasae/master)来表示Active的HMaster,其后加进来的HMaster则监听该Ephemeral节点,如果当前Active的HMaster宕机,则该节点消失,因而其他HMaster得到通知,而将自身转换成Active的HMaster,在变为Active的HMaster之前,它会创建在/hbase/back-masters/下创建自己的Ephemeral节点。