HBase组件内部通讯机制分析

栏目: 数据库 · 发布时间: 5年前

内容简介:版权声明:可以任意转载,转载时请注明原文出处分析HBase集群各个组件内部通讯机制之前,我们先来简单回顾一下这些组件:1. RegionServer

版权声明:可以任意转载,转载时请注明原文出处

背景

最近线上遇到这样一个问题,在创建一个新表时,一台RegionServer突然宕机,RegionServer错误日志显示如下:

aborting region server xxx, Exception running postOpenDeployTasks … ...xxx UnknowHostException

Master错误日志如下:

region server xxx reporting a fatal error aborting xxx

最终排查发现是运维同学当晚有变更,修改了宕机RegionServer服务器的hosts文件,删除了HBase集群中其他机器的域名配置信息;我们都知道访问HBase集群需要用域名的形式,HBase各个组件内部也是通过域名的形式通讯的,修改了hosts后应该马上就会宕机才是;但实际上从修改hosts到RegionServer宕机之间有好几个小时,RegionServer一直都稳定运行,直到创建新表时才出现问题,这又怎么解释呢?

带着上述疑问,我们先一起回顾一下HBase集群的基础组件与客户端简单的流程。

集群组件简介

分析HBase集群各个组件内部通讯机制之前,我们先来简单回顾一下这些组件:

1. RegionServer

集群中的工作节点,真正干活的就是它,主要职责对外提供读写服务并管理Region,如flush、compact、split等;

2. HMaster

集群中的管理节点,负责协调RegionServer的工作,包括分配Region、负载均衡、故障恢复以及创建删除表等;

3. Zookeeper

集群中的协调器,基本上集群内部的所有操作都是HMaster通过ZooKeeper来协调RegionServer一起完成的;同时HMaster的HA、meta表的位置等也是通过Zookeeper来实现;

4. HDFS

包括NameNode与DataNode,这里为了方便统称HDFS,提供分布式存储服务,用来存储WAL与HFile文件。

客户端读写简介

HBase组件内部通讯机制分析

1. 客户端调用ZooKeeper查询meta表在哪个RegionServer;

2. 客户端去meta表所在RegionServer查询当前rowkey再哪个Region,由哪个RegionServer管理;

3. 客户端直接通过RPC请求读写数据所在RegionServer;

4. 客户端会缓存meta的查询结果,后续不需要再进行1-2步骤;

从客户端读写的过程来看,由于不涉及集群内部通讯,修改hosts文件不会影响集群对外提供读写服务,上述宕机原因还需进一步深入集群组件内部了解。

组件内部通讯机制分析

集群启动与心跳检测

HBase组件内部通讯机制分析

1. HMaster启动时,会试图去ZooKeeper注册一个临时节点并添加监听,如果注册成功,则当前HMaster成为active,如果失败则说明已经存在active HMaster,当前HMaster成为standby;active HMaster宕机后,关联的Zookeeper中的临时节点会被删除,standby HMaster监听到后会将自己提升为新的active HMaster;

2. RegionServer启动时,也会去ZooKeeper注册一个临时节点,HMaster会监控所有RegionServer的临时节点,当有节点删除时,HMaster会停止对应的RegionServer;

3. RegionServer启动时会向HMaster报告当前启动的时间、状态、hostname等信息;

4. 这里为了简单,HDFS直接用一个图表示,实际生产中,都会部署一个RegionServer与一个DataNode是在同一台机器,保持数据本地性。

从集群启动过程来看,HMaster、RegionServer、ZooKeeper之间交互总结:

1. RegionServer到ZooKeeper的长连接;

2. HMaster到ZooKeeper的长连接;

3. RegionServer会发送RPC请求到HMaster,报告启动信息。

集群管理操作

集群管理操作指Region分配、负载均衡、故障恢复等相关操作,这里通过create table语句来举例说明:

HBase组件内部通讯机制分析

1. HMaster收到create table语句,调用meta表所在RegionServer,更新新表region的meta信息;

2. HMaster将新表的Region(预分区则有多个region)分配到RegionServer上;

3. 各个RegionServer负责打开分配到自己的Region;

4. 打开Region最后一步需要调用meta表所在RegionServer更新region的meta信息,最终才能上线Region;

5. 上述过程HMaster跟RegionServer都需要通过ZooKeeper的交互来协调完成上述工作(主要是region-in-tansition节点);

6. HMaster调用HDFS创建好表对应的文件目录结构(为了简单,图中没体现)。

从集群管理操作来看,HMaster、RegionServer、ZooKeeper之间交互总结:

1. RegionServer相互之间有RPC请求;

2. HMaster到RegionServer之间有RPC请求。

结论

HBase组件内部通讯机制分析

根据上面的分析,得出HBase集群内部协作机制如下:

1. HMaster、RegionServer与ZooKeeper之间为长连接,主要作用为通过ZooKeeper来协调完成集群层面的操作与保持心跳;

2. RegionServer之间有一定的通信,主要提现为调用meta表所在的RegionServer去更新region的meta信息;

3. HMaster会下发指令到RegionServer执行,例如:shutdown、分配Region、Flush等操作;

4. RegionServer也会向HMaster汇报启动,关闭等状态信息。

到此为止,开头的疑问已经得到解答,从修改hosts到RegionServer宕机之间的几个小时,集群都只是正常的处理读写请求,并没有触发split、负载均衡等操作,所以一直正常运行;直到创建表时,由于宕机RegionServer无法连接meta表所在RegionServer完成Region的打开,最终自己停止了自己。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iOS软件开发揭密

iOS软件开发揭密

虞斌 / 电子工业出版社 / 2011-5-1 / 79.00元

本书以严密的体系性提供了iPhone和iPad软件开发从入门到专家的系统性知识,并提供来源于真实项目的可重用商业代码。书中的每个实例都是项目经验的提炼,深入浅出地讲解iPhone和iPad软件开发的核心技术要点,基本涵盖了iOS软件开发在真实商业项目中所需要的所有主题,并将实例介绍的技术深度和超值的实用性结合在一起,成为本书的特色。 随书附赠的光盘中包含了书中大量案例的完整工程源代码,可以让......一起来看看 《iOS软件开发揭密》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具