• HBase复制


    HBase复制是一种在不同HBase部署中复制数据的方法。它能够作为一种故障恢复的方法,并提供HBase层次的高可用性。在实际应用中,比如。能够将数据从一个面向页面的集群拷贝到一个MapReduce集群,后者能够同一时候处理新数据和历史数据。然后再自己主动将数据传回面向页面请求的集群。

    HBase复制中最主要的架构模式是“主推送”(master-push),由于每一个region server都有自己的WAL(或HLog)。所以非常easy保存如今正在复制的位置。正如众所周知的解决方式-Mysql的主/从复制,仅仅使用二进制文件来跟踪改动。一个主集群能够将数据拷贝到随意数目的从集群,每一个region server都会參与复制自己的改动。很多其它的关于主/从复制或其它类型的复制,能够參考文章《How Google Serves Data From Multiple Datacenters》。

    复制是异步进行的,意味着集群能够是地理上彼此远离的,它们之间的连接能够在某个时刻断开,在主集群上的改动不能立即在从集群上进行同步(终于一致性)。

    这里使用的复制格式从概念上和《MySQL’s statement-based replication》类似。

    和SQL语句不同,全部的WALEdits(包含来自client的Put和Delete产生的多单元格操作)都会被复制以保证原子性。

    来自每一个region server的HLog是HBase复制的基础。而且仅仅要它们须要将数据拷贝到从集群,它们就必须被保存到HDFS上。每一个region server从它须要的最老的日志開始复制。同一时候在zookeeper中保存当前恢复的位置来简化错误恢复。每一个从集群恢复的位置可能不同。但它们处理的HLog队列内容是同样的。

    參与复制的集群的规模能够不正确等。

    主集群会通过随机分配尽量均衡从集群的负载。

    从0.92版本号起,HBase还支持另外的两种模式的复制:主<->主和循环复制。

    下图展示了复制的工作流程和架构。


    集群复制架构图

    HBase复制部署

    1)编辑集群中全部机器的${HBASE_HOME}/conf/hbase-site.xml文件,添加例如以下配置:

    <property>
      <name>hbase.replication</name>
      <value>true</value>
    </property>
    改动完毕后,重新启动HBase集群。使配置生效。

    2)在HBase shell中执行例如以下命令:

    hbase(main):003:0> add_peer 'ID' 'CLUSTER_KEY'
    hbase(main):004:0> start_replication

    第一条命令是为从集群设置zookeeper集群信息,这样能够使得改动被同步到从集群上。第二条命令真正将改动过的记录公布到从集群上。为了保证工作能依照预期进行,用户必须保证已经在从集群上建立了一个同样的表的副本,表能够为空。但必须有同样的模式和表名。

    注意:hbase-0.96和hbase-0.98已经没有了start_replication命令和stop_replication命令。hbase-0.98相较hbase-0.96,新增了set_peer_tableCFs、show_peer_tableCFs命令。在设定复制时,hbase-0.98须要使用set_peer_tableCFs设置。详细的有相应的帮助命令可供參考。

    ID必须是一个短整数。CLUSTER_KEY的内容请參考下面模板:

    hbase.zookeeper.quorum:hbase.zookeeper.property.clientPort:zookeeper.znode.parent
    比方,zk.server.com:2181:/hbase

    注意:假设两个集群使用同样的zookeeper集群。你不得不使用不同的 zookeeper.znode.parent,由于它们不能写入同样的目录中。


    3)一旦你有一个对等(从)集群。你须要在你的列簇上使复制可用,要想达到这种效果,能够在HBase shell中运行例如以下命令:

    hbase(main):005:0> disable 'your_table'
    hbase(main):006:0> alter 'your_table', {NAME => 'family_name', REPLICATION_SCOPE => '1'}
    hbase(main):007:0> enable 'your_table'
    scope值为0(默认值)意味着它不会被复制。而scope值为1意味着它将被复制。

    4)执行例如以下命令能够列出全部配置的对等(从)集群:

    hbase(main):008:0> list_peers
    5)执行例如以下命令将使对等(从)集群不可用:

    hbase(main):009:0> disable_peer 'ID'
    执行完命令后,HBase将停止将向对等(从)集群发送改动,可是它将一直跟踪全部新的WALs文件。以便当从集群可用时继续复制。

    6)能够执行例如以下命令将使之前设置为不可用的对等(从)集群可用:

    hbase(main):010:0> enable_peer 'ID'
    7)执行以下的命令,能够移除一个从集群:

    hbase(main):011:0> stop_replication
    hbase(main):012:0> remove_peer 'ID'
    须要注意的是。停止复制仍会完毕全部已在队列里的改动的复制。可是之后全部的处理都被停止了。为了确认你的配置都正常工作,你能够查看不论什么一个region server的日志文件。看是否有类似以下几行的内容:

    Considering 1 rs, with ratio 0.1
    Getting 1 rs from peer cluster # 0
    Choosing peer 10.10.1.49:62020
    这个样例表示有一个region server被选择做复制。

    和复制有关的其它一些配置项:

    <property>
    	<name>replication.source.nb.capacity</name>
    	<value>5000</value>
    <description> 主集群每次像备集群发送的entry最大的个数,推荐5000.可依据集群规模做出适当调整,slave集群服务器假设较多,可适当增大,默认是25000</description>
    </property>
    
    <property>
    	<name>replication.source.size.capacity</name> 
    	<value>4194304</value> 
    	<description> 主集群每次像备集群发送的entry的包的最大值大小,不推荐过大,默认是64MB(64*1024*1024)</description>
    </property>
    
    <property>
    	<name>replication.source.ratio</name>
    	<value>1</value>
    	<description> 主集群里使用slave服务器的百分比。默认是0.1</description>
    </property>
    
    <property>
    	<name>hbase.regionserver.wal.enablecompression</name>
    	<value>false</value>
    	<description> 主集群关闭hlog的压缩</description>
    </property>
    
    <property>
    	<name> replication.sleep.before.failover</name>
    	<value>5000</value>
    	<description> 主集群在regionserver当机后几毫秒開始运行failover</description>
    </property>

    转载请注明出处:http://blog.csdn.net/iAm333

  • 相关阅读:
    Spring Boot (20) 拦截器
    Spring Boot (19) servlet、filter、listener
    Spring Boot (18) @Async异步
    Spring Boot (17) 发送邮件
    Spring Boot (16) logback和access日志
    Spring Boot (15) pom.xml设置
    Spring Boot (14) 数据源配置原理
    Spring Boot (13) druid监控
    Spring boot (12) tomcat jdbc连接池
    Spring Boot (11) mybatis 关联映射
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6724089.html
Copyright © 2020-2023  润新知