查看文档,分析了一下 hbase replication的原理,简单记录一下:
http://hbase.apache.org/book.html#cluster_replication
hbase 的复制方式是 master-push 方式,即主集群推的方式,主要是因为每个rs都有自己的WAL。 一个master集群可以复制给多个从集群
复制是异步的,运行集群分布在不同的地方,这也意味着从集群和主集群的数据不是完全一致的。他的目标就是最终一致性
复制的格式与mysql的机遇状态的复制类似,不同于mysql的状态复制,整个WAL的修改(包括insert delete 和cell的修改)都会安装顺序的复制到从集群中。
WAL必须保存在hdfs直到所有的从集群复制完成
每个regionserver会记录最后复制的位置,然后每次复制都从最后复制的位置开始。rs会维持一个replication的队列,每个slave的的position都会单独维护
WAL 操作的生命周期:
1、客户端插入或删除
2、rs将操作以可以回放的格式写入wal
3、如果影响的cell正是replication的范围之内的cell,将操作放入replication的队列
4、如果slave rs 无法工作,master会重新选择新的rs作为replication的slave rs,并重新发送buffer中的数据
5、同时,wal 会被压缩并且存储到zookeeper的队列中,server rs通过移动操作日志的路径到一个中心的日志路径将操作日志归档。然后将path更新到内存中replication 线程的队列中
6、如果slave集群最终恢复正常,master会将中断复制这些log按照正常复制过程复制
replication内部原理:
hbase复制的状态都存储在zookeeper中,默认情况下,存储到 /hbase/replication。这个目录有两个子节点: peers znode 和 RS znode
如果 人为的删除 /hbase/replication 节点,会造成复制丢失数据
peers znode:
存储在 zookeeper中 /hbase/replication/peers 目录下,这