当前位置: 首页 > news >正文

Hbase异步复制和同步复制解析

背景

Hbase是一个KV数据库,自然和Mysql以及Redis等会涉及到复制的问题,也有主从集群的概念,那么本文就来看下Hbase的复制逻辑

Hbase复制实现

首先我们先在回顾下,在Hbase实现中,每个RegionServer上面会包含多个Region,操作日志Hlog文件是RegionServer级别的,也就是这个RegionServer上的所有Region共享的,我们后面会看到Hbase这种操作日志没有设置成Region级别带来的复制的复杂度实现

异步复制

我们一开始理解的Hbase异步复制就是类似Mysql等一样,就是异步把二进制操作日志发送到从节点就可以了。
就是图中上半部分所示的一样,但是事实上,Hbase中实现异步复制比图中上半部分所示的要复杂的多,为什么呢?

因为其中涉及到Region可以在不同的RegionServer中进行迁移,当Region从RegionServer0迁移到RegionServer1时,之前Hlog0上面的操作日志和迁移后Hlog1上面的操作日志会同时发送给从节点,此时有好几个RegionServer会同时发送日志给从节点,这里就导致了消息的顺序错乱的问题,由于消息的顺序错乱包含insert和del之间的顺序错乱,从而也会导致数据的一致性问题.
那么Hbase这里是如何解决这个问题的呢?答案是Hbase会为每个Region在zookeeper中保存一个当前Region已经推送到的Position的值,假设记作:lastSequenceId,这个是Region级别的,不同RegionServer在判断是否发送这个Region的Hlog给从节点的时候就首先需要判断:这台RegionSever上的Hlog的这个Region的偏移Position是否大于lastSequenceId,如果是就发送,如果不是,就休眠循环等待即可,这样每个时刻只会有一个RegionServer把Hlog信息发送给从节点,自然从节点就不会有顺序问题了.
不过这里还需要解决另一个问题:Region在从RegionServer0迁移到RegionServer1之后,他在RegionServer1的Hlog中的偏移positon要比他在RegionServer1的Hlog中的位置要大,所以Hbase在Region发生迁移的时候会生成一个Barrier的东西,目的就是这个,可以参考上图中的下半部分

其实从上面可以看出如果我们保持操作日志时是按照Region级别生成日志文件的话,Region迁移导致的这些问题就可以迎刃而解,这样Hbase的异步复制就和Mysql等异步复制一不一样了,仅仅从复制的角度考虑的话,这样实现是更好的一种方案
异步复制最大的问题就是主从没法完全保持数据的一致性,当主节点宕机时,从节点的数据一般是有延迟的,那么如果想要主节点宕机后,从节点接管时数据是一致的,hbase如何实现的呢?答案是可以使用同步复制方案

Hbase的同步复制

hbase实现同步复制的原理并不复杂,无非是在写操作写入HLog日志后同步写一份数据到从节点的RemoteWAL日志中,如下图所示:
在这里插入图片描述
当从节点接管读写操作时,他会首先应用RemoteWAL日志到集群上面,这样自然从节点的数据就会自然和主节点的数据保持一致了

http://www.lryc.cn/news/44534.html

相关文章:

  • TIKTOK海外直播公会如何申
  • 6.springcloud微服务架构搭建 之 《springboot集成Gateway》
  • [N1CTF 2018]eating_cms_
  • 《Spring系列》第13章 Aop切面(二) 代理创建
  • 算法-贪心
  • 【数据结构与算法】树(Tree)【详解】
  • OSPF------LSA 详解
  • js加解密入门
  • vue+Echarts导入自定义地图
  • dp-组合总和 Ⅳ
  • 46-堆
  • Mysql高可用高性能存储应用系列3 - mysqld_multi配置主从集群
  • 天干地支(Java)
  • 码住,虹科工业树莓派应用小tips
  • 美国新规-带绳窗帘亚马逊ANSI/WCMA A100.1-20测试标准详解
  • 【华为OD机试 2023最新 】 模拟商场优惠打折(C++)
  • 前端直接生成GIF动态图实践
  • 2023年Java岗面试八股文及答案整理(金三银四最新版)
  • centos8上安装redis
  • 新六级阅读通关特训
  • 【AI绘画】如何使用Google Colab安装Stable Diffusion
  • C++:STL架构图
  • [Ubuntu][网络][教程]端口转发以及端口管理
  • @Scheduled 定时任务不执行
  • 我是怎样被卷的(二)
  • Linux- 浅谈ELF目标文件格式
  • C++ MVC模式
  • IntelliJ IDEA2021安装教程
  • day16—选择题
  • LLVM 的中间代码(IR) 基本语法