HBase进行HA配置的原因
HBase通过WAL来保障数据不丢失。HBase在写数据前会先写HLog,HLog中记录的是所有数据的变动, HBase的高可用也是通过HLog实现的。
HBase 是一个没有单点故障的分布式系统,计算层和存储层都有各自的保障了服务的可用性。
HBase 容错:
- HMaster 容错
HMaster 可以配置HA,利用 Zookeeper 重新选择新的 HMaster,并且 HMaster 宕机的情况,数据仍然可以读取,但是无法进行负载均衡和 Region 切分等操作 - HRegionServer 容错
RegionServer 如果出现宕机,HMaster 会通过 Zookeeper 监听到,重新分配 RegionServer 上的 Region,同时将宕机RegionServer 的 WAL 进行分割,有新的 RegionServer 读取恢复数据。RegionServer 上的 Region 迁移的代价并不大,一般都在毫秒级别完成,所以对应用造成的影响也很有限。 - Zookeeper 容错
作为协调者的 Zookeper 本身就是就是一个可靠的分布式服务,一般会配置3到5个实例。 - HDFS 容错
底层存储依赖于 HDFS,数据对 HDFS 透明,设置有多副本冗余。HDFS 本身是稳定可靠的分布式存储系统。
对于这样的系统,是否有进行高可用的配置是否有这个必要?通过配置HBase的高可用可以解决:
-
不可逆DDL问题
HBase的高可用不支持DDL操作,在Master上的DDL操作,不会影响到Slave上的数据,所以即使在Master上进行了DDL操作,Slave上的数据依然没有变化 -
离线MapReduce影响线上业务问题
高可用的最大好处是可以进行读写分离,离线MapReduce可以直接跑在Slave上,Master继续对外提供写服务,这样就不会影响到线上的业务。HBase的高可用复制是异步进行的,在Slave上进行MapReduce分析,数据可能会有稍微延迟。 -
意外情况
对于像核心交换机故障、断电等意外情况,Slave跨机架或者跨机房部署都能解决该种情况。
基于以上原因,如果是核心服务,对于可用性要求非常高,可以搭建HBase的高可用来保障服务较高的可用性,在HBase的Master出现异常时,只需简单把流量切换到Slave上,即可完成故障转移,保证服务正常运行。
原理
HBase高可用保证在出现异常时,快速进行故障转移。HBase Replication 功能实现可以集群间的相互复制。提供集群级别的备份,可以用来支持异地容灾、线下数据分析等场景。HBase Replication 的复制方式是 master-push 方式,即主集群推的方式。因为每个RegionServer 都拥有WAL, 很容易记录正在复制的位置。一个集群可以异步复制给多个从集群,这也意味着从集群和主集群的数据不是完全一致的,而是最终一致的。

HBase Replication
HBase的replication是以Column Family为单位的,每个Column Family都可以设置是否进行replication。上图中,一个Master对应3个Slave,Master上每个RegionServer都有一份HLog,在开启Replication的情况下,每个RegionServer都会开启一个线程用于读取该RegionServer上的HLog,并且发送到各个Slave,Zookeeper用于保存当前已经发送的HLog的位置。Master与Slave之间采用异步通信的方式,保障Master上的性能不会受到Slave的影响。用Zookeeper保存已经发送HLog的位置,主要考虑在Slave复制过程中如果出现问题后重新建立复制,可以找到上次复制的位置。

HBase Replication步骤:
- HBase Client向Master写入数据
- 对应RegionServer写完HLog后返回Client请求
- 同时replication线程轮询HLog发现有新的数据,发送给Slave
- Slave处理完数据后返回给Master
- Master收到Slave的返回信息,在Zookeeper中标记已经发送到Slave的HLog位置
注:在进行replication时,Master与Slave的配置并不一定相同,比如Master上可以有3台RegionServer,Slave上并不一定是3台,Slave上的RegionServer数量可以不一样,数据如何分布这个HBase内部会处理。
Replication 支持场景:
- 主节点同名表同步到各从节点
- 主节点不同表同步到不同集群相应表
- 多个主节点表同步到一个从集群相应表
复制模式种类
HBase支持主从、主主两种复制模式,即Master-Slave、Master-Master复制。
-
Master-Slave
所有在Master集群上写入的数据都会被同步到Slave上。 -
Master-Master
在Master-Master复制中,两个Master地位相同,都可以进行读取和写入。在做Master-Master高可用时需要确保两边写入的表都是不同的,以防止数据不一致问题。
异常情况
HBase复制是通过RegionServer开启复制线程进行HLog的发送,当其中某个RegionServer出现异常时,HBase如何处理的?需要区别两种不同的情况,即Master上RegionServer异常和Slave上RegionServer异常。
-
Slave上RegionServer异常
Slave上出现某个RegionServer异常,该RegionServer直接会被标记为异常状态,后续所有的更新都不会被发送到该台RegionServer,Slave会重新选取一台RegionServer来接收这部分数据。 -
Master上RegionServer异常
Master上某台RegionServer异常,其他RegionServer会对该台RegionServer在ZooKeeper中的信息尝试加锁操作。这个操作是互斥的,同一时间只有一台RegionServer能获取到锁,然后会把HLog信息拷贝到自己的目录下,这样就完成了异常RegionServer的HLog信息的转移,通过新的RegionServer把HLog的信息发送到Slave。

配置HBase HA
HBase 默认此特性是关闭的,需要所有参与集群进行设定并重启集群:
<property>
<name>hbase.replication</name>
<value>true</value>
</property>
Master-Slave模式的高可用:
- 选取一套系统作为Master,另外一套作为Slave
- 在Master上通过add_peer 命令添加复制关系,如下
add_peer ‘1’, “db-xxx.photo.163.org:2181:/hbase”
- 在Master上新建表t,该表拥有一个列簇名为cf,并且该列簇开启replication,如下:
create ‘t’, {NAME=>’cf’, REPLICATION_SCOPE=>’1’} //上面REPLICATION_SCOPE的值需要跟步骤2中的对应
- 在slave建立相同的表(HBase不支持DDL的复制),在master-slave模式中,slave不需要开启复制,如下:
create ‘t’, {NAME=>’cf’ }
Master-Master模式的高可用
配置的时候与Master-Slave模式不同的是,在Master上添加完复制关系后,需要在另外一台Master也添加复制关系,而且两边的cluster_id必须相同,并且在另外一台Master上建表的时候,需要加上列簇的REPLICATION_SCOPE=>’1’配置。
本文详细介绍了HBase进行高可用(HA)配置的原因、原理、复制模式和异常处理。HBase HA通过HLog保障数据不丢失,支持主从和主主复制模式,能有效应对HMaster和HRegionServer的容错。配置HA可以解决不可逆DDL问题、离线MapReduce影响线上业务以及意外情况,确保核心服务的高可用性。
990

被折叠的 条评论
为什么被折叠?



