BDS - HBase数据迁移同步方案的设计与实践

概览

BDS针对开源HBase目前存在的同步迁移痛点,自主研发的一套数据迁移的平台。有关于BDS的基本介绍,可以查看《BDS-HBase数据迁移同步的利器》。本文主要介绍目前在阿里云上,BDS是如何进行HBase集群之间的数据迁移和数据的实时同步的。

架构

1559705835293_e80a7351_14bb_4338_92a2_f58234657b70

  • BDS采用分布式的架构,由BDSMaster节点生成、调度任务给各个BDSWorker节点
  • BDSWorker节点负责具体的任务执行,是无状态的,方便扩容、升级
  • Reader 和 Writer 插件化,支持跨版本,异构数据源的迁移和实时数据同步

历史数据迁移方案

对于历史存量数据的迁移,我们是通过拷贝文件的方式,将数据文件拷贝到目标集群,然后统一对文件进行Bulkload,将数据装载到目标表中
1559720655989_e5a94510_e88d_42c3_9718_814bc391e478

迁移流程:
  1. 客户提交历史数据迁移的任务
  2. BDSMaster获取原表的Region分区情况,针对每一个Region分区生成一个Task,平均下发给各个BDSWorker节点
  3. BDSWorker节点接收到Task任务之后,会迁移指定Region分区下的HFile文件,HFile的拷贝走的是字节流的拷贝,并且能够自动处理Region的Split、Merge、Compaction等操作导致HFile文件的变化,保证文件迁移过程中的不丢失
  4. BDSMaster在迁移过程中会对各个BDSWorker上执行的任务进度、详情进行监控,对于超时的任务,异常任务进行重试
  5. 所有的任务都迁移完成之后,BDSMaster会通知目标集群进行数据的装载,将数据装载到目标表中

BDSWorker 宕机的处理

BDSMaster通过ZK监听各个BDSWorker的状态,当某个BDSWorker宕机,BDSMaster会将宕机BDSWorker上正在执行的Task,重新下发给其他的BDSWorker,其他BDSWorker接收到重试的Task,会从中断的地方开始重试,防止重复迁移已经迁移完成的数据

对Region的Split、Merge、Compaction的处理

Region的Split、Merge、Compction会导致HFile文件在迁移的过程中不断的发生的变化

  • 某个文件在迁移的时候被Compaction合并了,文件就不存在了
  • 某个Region在迁移的时候发生了split,Region不存在了
  • 迁移的时候HFile是个引用文件,不包含实际的数据,只是对源文件的引用

针对HFile文件是个引用文件、HFile文件被合并了,BDSWorker会自动处理,保证数据的不丢失,针对Region的Split、Merge,BDSMaster会感知原表的变化,获取新生成的Region生成新Task,下发给BDSWorker去执行

Bulkload优化

1559724900827_cf702c27_a9c3_4e81_adfa_1fb0b53be023

数据文件拷贝完成,在对数据进行装载的时候需要对HFile排序、切分和分组,当原表和目标表的分区很不一致,就会导致大量的HFile被切分,从而影响bulkload的速度。
因此,我们在拷贝文件的时候BDS会自动对要分区的文件进行拆分,在Bulkload的时候就可以直接load各个HFile文件到对应的Region分区中。

数据本地化率的优化

1559725574141_f8fcd0f9_92e5_4078_8438_181a16f0409c

数据迁移完,RegionServer在读取文件数据的时候,可能存在大量的远程读(数据不落在本地的DN上,需要访问远端的DN),会导致读RT变高。
BDS在迁移文件的时候,会尽可能的将数据写到对应RegionServer所在的DN上。

BDS vs 开源方案

  1. 在迁移过程中,几乎不会和集群的HBase交互,只和集群的HDFS进行交互,尽可能的避免了对在线业务的影响
  2. 文件的迁移走的是文件字节流的拷贝,因此比通常API层的数据迁移通常能节省50%以上的流量
  3. 迁移不需要修改源集群目标的配置,也不需要在集群上做什么操作,不占用HBase集群的存储、计算、内存等资源
  4. 数据迁移考虑本地化率,可以保证迁移完之后目标集群有更好的读rt
  5. 迁移的文件根据目标表的分区情况自动拆分,大大提高了大表数据装载的速度
  6. 有完善的failover机制,支持异常任务重试,断点续传
  7. BDSWorker无状态,升级、扩容非常容易,便于运维
  8. 支持配置的热更新,可以设置每个BDSWorker启动的线程数以及每个线程迁移的速度

实时数据同步方案

1559793372014_29574652_3733_4fe3_ad8b_aaffb7214b87

  1. BDSMaster会不停扫描源集群HDFS上的日志
  2. 针对新生成的log会生成对应的Task,下发给各个BDSWorker
  3. BDSWorker针对每个Task,会创建TaskTunnel,TaskTunnel 包含 Reader、Queue、Writer,Reader 负责读取 log并将读取的log数据丢到queue中,writer异步消费queue中的数据发往目标集群

支持跨版本、异构数据源的实时数据同步

1559727336781_6e81bd92_03c2_4efb_882c_5e3e0d65c1bd

TaskTunnel中的Reader和Writer我们采用的是插件化的方式,针对不同的源端和目标端,我们使用对应版本的Reader和Writer,BDS不仅支持跨版本HBase的同步,甚至支持异构数据源的数据同步

抗热点

1559728376271_4a5807fc_d29d_4e8f_9700_60498fdea63f

对于原生的HBase Replication来说,写热点的RegionServer会生成更多的日志,同步压力也会更大,往往会导致这台RegionServer的数据同步不过来。遇到热点的问题,你可以用一些运维的方式去解决。比如从热点服务器移走Region,降低吞吐与负载,但热点并不保证是恒定的,可能会跳跃在各个服务器。

1559729055208_b98ac6dc_d58b_4307_817c_e48485fbb165

对于BDS,由BDSMaster统一获取源集群的日志,然后平均分配给各个BDSWorker,因此每个BDSWorker处理的日志数量基本是相同的。即使源集群RegionServer存在写热点,但热点RegionServer的日志也能被平摊到各个BDSWorker去执行,从而避免因热点导致的同步延迟。

同步积压

HBase Replication

1559735922544_541c571e_a959_4b6c_bcbe_c6194a08faf1

对于HBase Replication来说,同步逻辑是集成在RegionServer中的,因此数据的同步和RegionServer本身的读写相互影响,又因为HBase服务于客户端的线程数,要远远大于Replication的线程数。面对高负载的写场景数据复制基本很难消化庞大的写吞吐,就会导致同步积压。面对数据的同步积压,通过开大线程数量不一定能解决问题,因为RegionServer此时的负载可能已经很高了。也不太容易通过横向扩展节点来解决同步积压的问题,因为扩展节点我需要扩展RegionServer节点以及DataNode节点,只能在业务低峰期的时候慢慢的消费。

BDS

1559736850960_a13055b3_b1d4_46bb_8f04_32d5aad4abf2

对于BDS来说,BDS采用读写异步的方式,可以通过以下几种方式来解决同步积压的问题

  • 增加BDSWorker节点,来提高整个迁移服务的吞吐
  • 动态配置每个BDSWorker处理日志的线程数,来提升单个节点日志处理的并发度
  • 动态配置每个TaskTunnel的Writer数量,从而提升单个日志的处理吞吐

同步监控

1559737406379_90d54d3d_db1c_40c2_831e_2a796bbaebdf

对于同步的监控,我们定义

同步延迟 = 数据被同步到目标集群的时间t2 - 数据被写入到源集群的时间t1
        ≈ 读延迟 + 读耗时 + 在队列等待耗时 + 写耗时

读延迟:表示数据被写入HDFS上的HLog到我们从读取的HDFS上读到这条数据的时间间隔
读耗时:从文件中读取一批数据的耗时
队列等待时间:数据被读出来添加到队列中的等待时间
写耗时:数据被写入到目标集群的耗时

我们需要监控这几项指标,就能比较方便的定位同步过程中的问题
当写耗时增大,我们可以定位目标集群可能存在了一些问题或者网络存在问题
当队列等待的耗时较大,说明写入速度赶不上读取的速度,我们可以通过适当增加写线程数量,来提高写速度
读耗时变大,我们就能定位读取HLog存在一些问题,可能是网络延迟变大
读延迟不断变大,我们就可以定位BDS同步吞吐不够,同步不过来了,需要添加节点,调整同步并发

BDS vs HBase Replication

  • 功能性

    • 支持跨版本的同步
    • 支持双向同步、环状同步
  • 稳定性

    • 抗热点,同步的任务平均分配到各个BDSWorker节点
    • 对业务影响更小

      • 独立于HBase,不受RegionServer读写影响
      • 同步过程基本不会访问源HBase集群,只读取源HDFS上的日志
      • 可以控制同步的线程数和节点的并发数
    • 更加完善的failover机制
  • 易运维

    • BDSWorker stateless,便于扩展、系统升级
    • 完善的监控、报警机制

      • 监控同步时延,上下游流量,读写耗时等指标
      • 任务失败,延迟过大报警
  • 性能

    • 可以通过扩展节点数量来提升迁移同步的速度
    • 支持动态配置线程数
    • 读写异步

总结

BDS已经在阿里云上线了,方便云上的客户在自建HBase、EMR HBase、Apsara HBase之间进行数据的迁移和实时数据同步。
在云上已经服务40多个客户,帮助客户实现集群之间的无缝迁移,集群的升配,主备容灾,数据迁移同步规模达到400多T(单副本)。
云上有迁移需求的客户,可以查看《BDS服务介绍》,或者联系侧田

猜你喜欢

转载自yq.aliyun.com/articles/704977
0条评论
添加一条新回复