集群 |
主机名称 |
IP地址 |
HDFS |
HBASE |
zookeeper |
kerberos |
A集群 |
demo1.xiaoke.com | 192.168.98.37 |
namenode |
hmster |
zookeeper server |
|
demo2.xiaoke.com | 192.168.98.38 |
namenode |
hmster |
zookeeper server |
|
|
demo3.xiaoke.com | 192.168.98.39 |
journalnode |
regionserver |
zookeeper server |
|
|
B集群 |
test1.xiaoke.com | 192.168.98.48 |
namenode |
hmster |
zookeeper server |
|
test2.xiaoke.com | 192.168.98.47 |
namenode |
hmster |
zookeeper server |
|
|
test3.xiaoke.com | 192.168.98.46 |
journalnode |
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'
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)
查看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,增量数据同步成功,但中间的目录损坏时的增量数据,无法恢复,