Hbase主备集群配置

(一)业务背景
            为了保障HBASE集群数据不丢失的情况,需要对生产线集群的数据进行实时备份到备用集群上,为此调研了HBASE相关的数据热备的方案,
            总体采用HBASE的【replication 】机制。
(二)Hbase双集群基于(master-slave)模式操作步骤
             【特别说明】
               主从HBASE集群采用不同的ZK集群保存HBASE信息;当然也可以使用相同集群但是需要区别(zookeeper.znode.parent)
             【操作步骤】
                1. 【Master集群】上修改hbase-site.xml配置文件添加如下配置项
                    <property>
                          <name>hbase.replication</name>
                          <value>true</value>
                    </property>
                      <property>
         <name>replication.source.nb.capacity</name>
         <value>25000</value>
         <description>主集群每次向从集群发送的entry最大的个数,默认值25000,可根据集群规模做出适当调整</description>
   </property>
   <property>
         <name>replication.source.size.capacity</name>
         <value>67108864</value>
         <description>
                主集群每次向从集群发送的entry的包的最大值大小,默认为64M
         </description>
    </property>
    <property>
          <name>replication.source.ratio</name>
          <value>1</value>
          <description>
                 主集群使用的从集群的RS的数据百分比,默认为0.1,需调整为1,充分利用从集群的RS
          </description>
     </property>
     <property>
           <name>replication.sleep.before.failover</name>
           <value>2000</value>
           <description>
                主集群在RS宕机多长时间后进行failover,默认为2秒,具体的sleep时间是:
                sleepBeforeFailover + (long) (new Random().nextFloat() * sleepBeforeFailover)
           </description>
      </property>
      <property>
            <name>replication.executor.workers</name>
            <value>1</value>
            <description>
                   从事replication的线程数,默认为1,如果写入量大,可以适当调大
            </description>
      </property>
                 2. 【Slave集群】上修改hbase-site.xml配置文件添加如下配置项
                       <property>
                          <name>hbase.replication</name>
                          <value>true</value>
                       </property>
                 3. 【进入Master集群】登录Shell环境执行如下命令
                       add_peer 'ID' 'CLUSTER_KEY'
                       其中ID为自己定义的数字
                       其中CLUSTER_KEY的定义为格式为 【"zk1,zk2,zk3:2182:/hbase-prod"】
4. 【进入Master集群】(创建/修改)需要热备的数据表【比如: test表】
                       4.1 创建1张表(test),1个列族(cf)
                            create 'test',{NAME => 'family_name', REPLICATION_SCOPE => '1'}
4.2 修改表(test),1个列族(cf)
                            disable 'test'
                            alter 'test', {NAME => 'cf', REPLICATION_SCOPE => '1'}
                            enable 'test'
5. 【进入Slave集群】(创建/修改)与Master集群一样的数据表(包括NameSpace都一样)【比如: test表】参考上述第4点


(三)特别提示点
  1. Hbase的replication是基于WAL日志构建的,如果Hbase集群没有开启WAL日志那么【replication】就不会生效。
  2. Hbase的replication开启时间如果晚于Hbase表的创建时间,那么已有的数据是不会复制到Slave集群上原因参考上述第1点。
                 2.1 【Master】集群数据表需要首先迁移到Slave集群上,可以参考Hbase表的快照方式(snapshot)
                 2.2  在开启【Master】,【Slave】集群表的(replication)功能
  3. 其中Hbase的replication机制是异步操作,因此可能存在数据不及时更新的情况。
  4. 由于Hbase的replication机制是基于WAL的,那么主集群在传递WAL日志到从集群的时候由于是异步操作,
      有可能会导致【master,slave】两个集群的数据不一致的情况。此时需要参考【Serial Replication】但是此模式是对Hbase
                 版本有要求的需要(2.1)版本及以上。
  5. 当两个Hbase集群配置了【master-slave】模式之后,当从集群宕机后,直到恢复后,如果【Master集群】的WAL日志
      还在则会同步到【Slave】集群的从表中,直到数据会追平。
  6. 对于【Master集群】群宕机的情况,如果从集群高可用的角度出发,那么此时希望从集群能够对生产线提供服务,就需要应用层做相关的【Master,Slave】切换功能,当【Master】集群功能上线后,需要做相关的从【Slave】集群同步数据到【Master】集群数据同步有2种方式分别如下:
      6.1 Hbase官网提供了一个补丁,此补丁是针对Hbase3.0版本的【https://issues.apache.org/jira/browse/HBASE-19064】
      6.2 生产环境停机一段时间使用Hbase的【snapshot】功能从【Slave】集群同步数据到【Master】集群。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值