内容简介:版权声明:可以任意转载,转载时请注明原文出处分析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文件。
客户端读写简介
1. 客户端调用ZooKeeper查询meta表在哪个RegionServer;
2. 客户端去meta表所在RegionServer查询当前rowkey再哪个Region,由哪个RegionServer管理;
3. 客户端直接通过RPC请求读写数据所在RegionServer;
4. 客户端会缓存meta的查询结果,后续不需要再进行1-2步骤;
从客户端读写的过程来看,由于不涉及集群内部通讯,修改hosts文件不会影响集群对外提供读写服务,上述宕机原因还需进一步深入集群组件内部了解。
组件内部通讯机制分析
集群启动与心跳检测
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语句来举例说明:
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集群内部协作机制如下:
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的打开,最终自己停止了自己。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 蚂蚁金服分布式链路组件 SOFATracer 埋点机制解析
- 蚂蚁金服分布式链路组件 SOFATracer 埋点机制解析
- avue 1.2.1 发布,扩展 crud 组件和路由加入缓存机制
- 蚂蚁金服分布式链路跟踪组件 SOFATracer 数据上报机制和源码分析 | 剖析
- Google继Project Treble后的大动作:Android Q系统组件更新机制APEX
- Martian-cloud 4.0,跟注册中心拜拜了,基于传染机制的分布式组件诞生
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
拆掉互联网那堵墙
庄良基 / 经济日报出版社 / 2014-6 / 25.80
都在说道互联网、说道电子商务、说道移动APP、说道微信、说道互联网金融......我们该如何认识互联网?中小微企业该如何借力互联网?互联网很神秘吗?很高深莫测吗? 其实互联网并没有什么神秘的,也没有什么高深莫测的!互联网无非是人类发明的工具而已,既然是工具,我们就一定可以驾驭和使用它。既然可以双重使用,就理当让所有有人都容易掌握并轻松驾驭。 互联网离我们很远吗?互联网界的成功故事都是那......一起来看看 《拆掉互联网那堵墙》 这本书的介绍吧!