`
wx1569578408
  • 浏览: 71500 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

hbase 学习(十三)集群间备份原理

 
阅读更多

集群建备份,它是master/slaves结构式的备份,由master推送,这样更容易跟踪现在备份到哪里了,况且region server是都有自己的WAL 和HLog日志,它就像mysql的主从备份结构一样,只有一个日志来跟踪。一个master集群可以向多个slave集群推送,收到推送的集群会覆盖它本地的edits日志。

  这个备份操作是异步的,这意味着,有时候他们的连接可能是断开的,master的变化不会马上反应到slave当中。备份个格式在设计上是和mysql的statement-based replication是一样的,全部的WALEdits(多种来自Delete和Put的Cell单元)为了保持原子性,会一次性提交。

  HLogs是region server备份的基础,当他们要进行备份时必须保存在hdfs上,每个region server从它需要的最老的日志开始进行备份,并且把当前的指针保存在zookeeper当中来简化错误恢复,这个位置对于每一个slave 集群是不同的,但是对于同一个队列的HLogs是相同的。

  下面这个是设计的结构图

clipboard[6]

 

  下面我们了解一下master和一个slave节点的整个过程。

(1)当客户端通过api发送Put、Delete或者ICV到region server,这些KeyValue被转换成WALEdit,这个过程会被replication检测到,每一个设置了replication的列族,会把scope添加到edit的日志,然后追加到WAL中,并被应用到MemStore中。

(2)在另一个线程当中,edit被从log当中读取来,并且只有可以备份的KeyValues(列族为scoped为GLOBAL的,并且不是catalog,catalog指的是.META. 和 -ROOT-)

(3-1)这个edit然后被打上master群集的UUID,当buffer写满的时候或者读完文件,buffer会发到slave集群的随机的一个region server同步的,收到他们的region server把edit分开,一个表一个buffer,当所有的edits被读完之后,每一个buffer会通过HTable来flush,edits里面的master集群的UUID被应用到了备份节点,以此可以进行循环备份。

(4-1)回到master的region server上,当前WAL的位移offset已经被注册到了zookeeper上面。

(3-2)这里面,如果slave的region server没有响应,master的region server会停止等待,并且重试,如果目标的region server还是不可用,它会重新选择别的slave的region server去发送那些buffer。

同时WALs会被回滚,并且保存一个队列在zookeeper当中,那些被region server存档的Logs会更新他们在复制线程中的内存中的queue的地址。

(4-2)当目标集群可用了,master的region server会复制积压的日志。

  下面是一些具体的操作:

假设zookeeper当中的节点是/hbase/replication , 它会有三个子节点

/hbase/replication/state/hbase/replication/peers/hbase/replication/rs

 

The State znode

  state节点是记录是否可以进行备份的,它里面记录这个一个boolean值,true或者false,它是由hbase.replication决定的,同事它会在ReplicationZookeeper当中缓存,它还会因为在shell中执行了stop_replication而改变

/hbase/replication/state [VALUE: true]

 

The Peers znode

  这个节点下面记录着所有需要备份的集群和他们当前的备份状态,如下:

/hbase/replication/peers                    /1 [Value: zk1.host.com,zk2.host.com,zk3.host.com:2181:/hbase]                    /2 [Value: zk5.host.com,zk6.host.com,zk7.host.com:2181:/hbase]

 

  peer的id是自己在add_peer时候,自己提供的,后面的value是slave集群所使用的zookeeper集群,最后是所在的znode的父节点。

  在每一个peer节点的下面还有一个表示状态的节点

 /hbase/replication/peers                    /1/peer-state [Value: ENABLED]                    /2/peer-state [Value: DISABLED]

 

The RS znode

  rs的节点下面包括了复制的region server以及需求复制的HLog的队列,看图就知道啦!

  第一层节点记录着region server的机器名,端口号以及start code

/hbase/replication/rs                    /hostname.example.org,6020,1234
                    /hostname2.example.org,6020,2856

 

  下一层是需求复制的HLog的队列

/hbase/replication/rs                    /hostname.example.org,6020,1234
                        /1
                        /2

 

  队列里面需要复制的HLog,值是已经被复制的最新的位置position

/hbase/replication/rs                    /hostname.example.org,6020,1234
                        /1
                            23522342.23422 [VALUE: 254]                            12340993.22342 [VALUE: 0]

 

  过程是上述的过程,下面展开讲一下具体的细节。

1)选择哪个region server去复制

当master节点准备好备份之后,它首先要通过slave集群的zookeeper,然后查看他们的rs的节点下面有多少可用的rs,然后随机选择他们中的一部分,默认是10%,如果有150个机器的话,会选择15个机器去发送。这个时候是有一个watcher在监视着slave集群的rs下面的变化,如果节点发生了变化,它会通知master节点的region server重发。

2)错误恢复,直接来个实际的例子

一个有3个region server集群正在和一个peer id为2的集群进行备份,每个region server下面都有一个队列

队列中的每个znode都是hdfs上的真实的文件名,“地址,端口.时间戳”

复制代码

/hbase/replication/rs/                      1.1.1.1,60020,123456780/                          2/                              1.1.1.1,60020.1234  (Contains a position)                              1.1.1.1,60020.1265
                      1.1.1.2,60020,123456790/                          2/                              1.1.1.2,60020.1214  (Contains a position)                              1.1.1.2,60020.1248
                              1.1.1.2,60020.1312
                      1.1.1.3,60020,    123456630/                          2/                              1.1.1.3,60020.1280  (Contains a position)

复制代码

 

  现在让1.1.1.2的zookeeper丢失session,观察者会创建一个lock,这个时候1.1.1.3完成了,它会把1.1.1.2的给接手过来,在自己的znode下面创建一个新的znode,并且加上dead的server的名称,就像下面这样子,原来的1.1.1.2的下面多了一层lock,1.1.1.3下面多了一个,和它原始的状态也不一样,前面多了个2。

复制代码

/hbase/replication/rs/                      1.1.1.1,60020,123456780/                          2/                              1.1.1.1,60020.1234  (Contains a position)                              1.1.1.1,60020.1265
                      1.1.1.2,60020,123456790/
                          lock                          2/                              1.1.1.2,60020.1214  (Contains a position)                              1.1.1.2,60020.1248
                              1.1.1.2,60020.1312
                      1.1.1.3,60020,123456630/                          2/                              1.1.1.3,60020.1280  (Contains a position)                          2-1.1.1.2,60020,123456790/                              1.1.1.2,60020.1214  (Contains a position)                              1.1.1.2,60020.1248
                              1.1.1.2,60020.1312

复制代码

 

  然后1.1.1.3又自己倒腾了一会儿,假设它也挂了,最后的形态会是这样

  1.1.1.1把1.1.1.3的未完成事业给接过了过来,所以我们看到1.1.1.1下面有个三手货和几个二手货。。。

复制代码

/hbase/replication/rs/                      1.1.1.1,60020,123456780/                          2/                              1.1.1.1,60020.1378  (Contains a position)                          2-1.1.1.3,60020,123456630/                              1.1.1.3,60020.1325  (Contains a position)                              1.1.1.3,60020.1401

                          2-1.1.1.2,60020,123456790-1.1.1.3,60020,123456630/                              1.1.1.2,60020.1312  (Contains a position)                      1.1.1.3,60020,123456630/
                          lock                          2/                              1.1.1.3,60020.1325  (Contains a position)                              1.1.1.3,60020.1401

                          2-1.1.1.2,60020,123456790/                              1.1.1.2,60020.1312  (Contains a position)

复制代码

 

  原理说完了,从下面说说进行这个备份操作是哪些要求吧

(1)hbase的大的版本要一致

0.90.1 可以向0.90.0推送但是0.90.1不可以向0.89.20100725推送

(2)独立部署的zookeeper集群

(3)集群间的备份的表名和列族都要一致

(4)多个slave集群的话,要0.92以上版本

(5)集群间可以互相访问

(6)集群间的zookeeper.znode.parent不能相同

 

  要使用这个集群建备份的功能需要先进行以下的设置

1、修改hbase-site.xml文件

<property>
    <name>hbase.replication</name>
    <value>true</value></property>

 

2、add_peer

输入这个命令,查看它的具体用法,然后添加

3、修改表的REPLICATION_SCOPE

disable 'your_table'alter 'your_table', {NAME => 'family_name', REPLICATION_SCOPE => '1'}
enable 'your_table'

 

4、list_peers 查看一下状态

5、备份完成之后如何进行数据校验,VerifyReplication就是专门来处理这个校验的。我们需要提供peer的id还有表名,verifyrep是它的简称,要用hadoop jar来运行

集群之间备份的网址,说明他们是怎么工作的  

http://hbase.apache.org/replication.html


转载于:https://my.oschina.net/u/923508/blog/413940

分享到:
评论

相关推荐

    Hbase与zookeeper笔记备份.rar

    《Hbase与Zookeeper深度解析》 在大数据领域,Hbase和Zookeeper是两个至关重要的组件,它们在分布式系统中的作用不...通过学习尚硅谷的视频教程,我们可以深入理解这两个技术的工作原理,提升在大数据领域的实践能力。

    HBase配置文件与HBase doc文档

    通过深入学习这些文档和配置文件,开发者可以更好地理解HBase的工作原理,从而有效地部署、管理和优化HBase集群,满足大规模数据处理的需求。同时,了解这些内容也是开发基于HBase的应用程序或服务的基础。

    HBase 应用平台 Replication 功能

    - **容灾恢复**:通过在不同地理位置设置备份集群,当主要集群出现故障时,可以快速切换到备份集群,保证服务不间断。 - **数据分发**:在一个中心集群上进行数据处理,然后将结果分发到各个边缘节点,提高数据...

    hdfs,hbase命令原理介绍

    ### HBase 命令原理介绍 #### HBase 概述 HBase 是一个分布式、宽列存储的 NoSQL 数据库,基于 Google Bigtable 的设计理念构建而成。HBase 提供了高可靠性、高性能、面向列的数据存储功能,特别适用于非结构化和半...

    藏经阁-阿里云HBase备份恢复的原理以及实践-15.pdf

    - **当前方案**:使用HBase集群作为对账功能模块,通过定时获取数据进行对账,提高了处理大量数据的效率。 5. **总结与展望** - **扩展性**:HBase具备良好的水平扩展能力,可以根据需求动态添加资源。 - **...

    HBase@不睡觉书副本.rar

    接着,书中详细介绍了HBase的架构,包括Master节点、RegionServer、Zookeeper等关键组件,以及它们在HBase集群中的作用和相互关系。 在理论知识的基础上,书中逐步引导读者进行HBase的安装、配置和基本操作,包括...

    Hbase+Spring boot实战分布式文件存储

    2-1 HBase简介及其在大数据生态圈的位置 2-2 HBase数据存储模型及与关系型数据库的区别 2-3 Hadoop伪分布式集群安装 2-4 HBase伪分布式集群安装 2-5 HBase基础架构 2-6 HBase阶段小结 第3章 HBase原理与实战 介绍...

    ZooKeeper 原理及其在 Hadoop 和 HBase 中的应用

    ### ZooKeeper原理及其在Hadoop和HBase中的应用 #### ZooKeeper概述 ZooKeeper是一个由雅虎开发的开源分布式协调服务系统,旨在为分布式应用提供一致性和可靠性支持。它是Google Chubby系统的开源版本,主要功能...

    Hbase1.x可视化客户端工具

    这些工具通常包括但不限于创建、修改和删除表,查看和编辑行键、列族、时间戳等元数据,执行扫描操作以及实时监控HBase集群的状态。它们还可能具备导入导出数据、执行SQL-like查询、性能调优分析等功能,极大地提升...

    hbase 示例

    1. **安装与配置**:首先,你需要设置HBase环境,包括下载HBase,配置HBase的环境变量,以及启动HBase集群。对于Twitbase,可能还需要额外的配置步骤,例如创建特定的表结构来模拟Twitter的数据模型。 2. **数据...

    \"HBase_介绍和HBase云存储\"分享总结

    4. **弹性伸缩**:根据业务需求,可以动态调整HBase集群规模,以应对流量波动。 5. **集成其他云服务**:HBase可以与云上的大数据分析工具(如Hadoop、Spark)无缝集成,提升数据分析效率。 在“HBase云存储.ppt”...

    HBase实现批量存取

    本项目实现了在Eclipse环境下对HBase的批量存取操作,这对于理解HBase的工作原理以及如何在实际应用中使用HBase具有重要的参考价值。 首先,我们需要了解HBase的基本概念。HBase是建立在Hadoop文件系统(HDFS)之上...

    大数据【经典书籍】:HBase不睡觉书 带目录(高清)【608页】.zip

    这部分内容对于大型HBase集群的运维人员来说尤为实用。 最后,书中可能还会涵盖一些高级主题,如HBase的最新特性和发展趋势,如Coprocessors、Phoenix SQL支持、实时流处理以及HBase与其他大数据技术的集成。 通过...

    HBase官网文档解读.pdf

    HBase提供了多种工具和命令来监控系统状态和排查故障,如hbtop命令提供了类似Linux top命令的HBase集群性能视图,同时官方文档还提供了针对不同问题的故障排查和调试指导。 通过以上知识点的分析,我们可以发现...

    HBase权威指南 带目录 中文版-高清版PDF

    读者将了解到如何规划和调整HBase集群以适应不同的工作负载,并掌握监控和调优的方法。 在操作和使用HBase方面,书中涵盖了客户端API的使用,如Java API和HBase Shell,以及数据的增删改查操作。此外,还讲解了过滤...

    Hbase中文文档和官方英文文档PDF.7z

    3. **Admin Guide**:涵盖集群管理和运维,包括配置、监控、备份与恢复等。 4. **Developer Guide**:针对开发者,介绍API使用、客户端开发和编程注意事项。 5. **Operations**:详细阐述日常运维任务,如扩缩容、...

    hbase2.x-hbck2 jar包及测试命令

    HBase是Apache Hadoop生态系统中的一个分布式、高性能的NoSQL数据库。在HBase 2.x版本中,HBCK2...同时,由于HBCK2是Java编写的,所以对Java编程和HBase内部工作原理的理解也能帮助你更好地理解和调试可能出现的问题。

    Hadoop、HBase、Zookeeper安装部署

    4. **启动HBase**:启动Master和RegionServer,确保HBase集群运行。 5. **验证HBase**:创建表,插入数据,进行查询以验证安装。 **Zookeeper的安装部署**: 1. **下载Zookeeper**:获取最新稳定版。 2. **配置...

Global site tag (gtag.js) - Google Analytics