卫计网站建设工作计划,网站建设对电子商务的意义,c2c的代表性的电商平台,电子商务网站建设解决方案背景
Hbase是一个KV数据库#xff0c;自然和Mysql以及Redis等会涉及到复制的问题#xff0c;也有主从集群的概念#xff0c;那么本文就来看下Hbase的复制逻辑
Hbase复制实现
首先我们先在回顾下#xff0c;在Hbase实现中#xff0c;每个RegionServer上面会包含多个Regi…背景
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日志到集群上面这样自然从节点的数据就会自然和主节点的数据保持一致了