环境信息

集群

主机名称

IP地址

HDFS

HBASE

zookeeper

kerberos

A集群

demo1.xiaoke.com

192.168.98.37

namenode
journalnode
datanode

hmster
regionserver

zookeeper server

 
demo2.xiaoke.com

192.168.98.38

namenode
journalnode
datanode

hmster
regionserver

zookeeper server

 

demo3.xiaoke.com

192.168.98.39

journalnode
datanode

regionserver

zookeeper server

 

B集群

test1.xiaoke.com

192.168.98.48

namenode
journalnode
datanode

hmster
regionserver

zookeeper server

 

test2.xiaoke.com

192.168.98.47

namenode
journalnode
datanode

hmster
regionserver

zookeeper server

 

test3.xiaoke.com

192.168.98.46

journalnode
datanode

regionserver

zookeeper server

 

 

同步配置

A集群与B集群均开启replication功能

A集群增加对应的peer

add_peer '11',' test1.xiaoke.com, test2.xiaoke.com, test3.xiaoke.com:2181:/hbase-unsecure'

(11表示peer_id,若未加kerberos等安全认证,需要去ambari上查询zookeeper.znode.parent)

注意:启用了kerberos认证后zk地址一定要使用域名的方式
ps:
remove_peer '11'  #
删除peer(删除后,需要重新add + set)
add_peer '11','
test1.xiaoke.com, test2.xiaoke.com, test3.xiaoke.com:2181:/hbase-unsecure'
set_peer_tableCFs '11','student'
show_peer_tableCFs
list_peers

disable_peer '11'

enable_peer '11'

 

A集群与B集群创建一样的表student

create 'student', 'score', {SPLITS => ['2','3', '4','5','6', '7','8', '9']}

功能验证

准备批量插入数据脚本,一共200条记录

 

put 'student', '1', 'score:number', '1'

….

put 'student', '200', 'score:number', '200'

hbase跨集群主从同步功能及数据完整性验证

A集群修改表属性

disable 'student'

alter 'student', {NAME => 'score',REPLICATION_SCOPE => '1'}

enable 'student'

 

配置表同步

set_peer_tableCFs '11','student'

(多张表的话以逗号分隔,如set_peer_tableCFs '11','student,student1')

 

客户端执行往A集群插入数据

put 'student', '1', 'score:number', '1'

….

put 'student', '200', 'score:number', '200'

 

A集群状态

 

B集群状态

 

批量插入数据脚本执行完成后,在A集群执行:

hbase org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication 11 student

对比数据,如下图

 

 

结果显示,GOODROWS为200,说明AB集群同步后数据一致。

(1)当主机群同步验证停止后(disable_peer)
 


向A集群插入新数据,

 

查看B集群,无增量数据同步过来

 

在A集群enable_peer后,

查看B集群数据,数据同步了过来,但时间在10秒左右

 

(2)当主机群移除同步验证后(remove_peer)

 

 

插入数据

 

B集群无数据同步过来

 

重新添加同步验证

重新添加,设置后,一秒后,增量添加到从集群了。

 

 

(3)删除主机群上的zk里的replication的节点目录
ps: hbase复制的状态都存储在zookeeper中,默认情况下存储到 /hbase/replication,这个目录有三个子节点: peers znode、rs znode和state。peer 节点管理slave集群在zk上的配置;state节点记录replication运行的状态;rs 节点记录着本集群rs中对应的hlog同步的信息,包括check point信息。(如果人为的删除 /hbase/replication 节点,会造成复制丢失数据)

 

(3.1)只有全部删除后,才会出现了无法同步
主库的student表无法添加数据,无法查询,从库的student表可以查询,但无增量数据

 

 

 

(3.2)zk状态正常

 

 

(3.3)查看peers状态

(3.4)修复

直接删除replication这个目录,再进行hmaster的主从切换,即重启hmaster。

 

数据恢复,但从集群数据未同步过来。

 

 

删除peers,重新建peers,增量数据同步成功,但中间的目录损坏时的增量数据,无法恢复,

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐