Apache HBase平衡器架构
推荐超级课程:
目录
介绍
Apache HBase是一个开源的非关系型分布式数据库,它模仿了Google的Bigtable,并且是用Java编写的。它是Apache软件基金会Apache Hadoop项目的一部分,并且运行在HDFS之上,为Hadoop提供类似Bigtable的能力。
在分布式数据库上下文中,负载平衡器是一个软件组件,它确保负载在节点之间均匀分布,以按照配置确保资源利用率。在下面的图表中,您可以看到在平衡之前表的区域(分片)分布不均,而在平衡之后则均匀分布。这种平衡后的设置确保了每个regionserver接收到的请求数量是相等的,因为托管的区域(分片)数量是相同的。
根据数据库的架构,负载平衡器的功能可能会有所不同,例如,它可能只是一个位于数据前面的无状态层,将流量路由到作为负载平衡器的服务器节点,或者每个数据库服务器进程本身可以作为导航器,进而充当负载平衡器。在本文中,我们将根据Apache HBase的架构来讨论负载平衡器。
Apache HBase自带了一些预打包的负载平衡器,例如FavoredStochasticBalancer,SimpleLoadBalancer,StochasticLoadbalancer,RSGroupBasedLoadBalancer等。这些生产级别的负载平衡器都使用StochasticLoadbalancer作为底层实现,并根据各自的负载平衡器重写了一些功能。在本文中,我们将讨论HBase平衡器的一般架构,特别是StochasticLoadbalancer。
Apache HBase背景
HBase术语
让我们熟悉一些在阅读过程中可能会经常出现的HBase术语。
表(Tables):HBase表以键值对的形式组织数据行。行按字典顺序排序,最低顺序的行首先出现在表中。每个表被划分为一个或多个区域。
区域(Region):每个表被划分为一系列不相交的连续子集,称为区域。区域是表的基本可用性和分布元素。每个区域都有表中行的按字典顺序排序的子集。
RegionServer:是一个进程,它将区域托管在内存中,服务于客户端rpc调用,其数据通过datanodes存储在hdfs中。
Hmaster:是HBase中的主节点,它协调regionserver执行某些集群范围内的活动,如区域分配、平衡等。
HBase架构
HMaster是HBase的一个中心组件,负责确保HBase集群处于健康状态,其职责包括:
- 将区域分配到regionserver
- 跟踪regionserver的健康状况
- 平衡regionserver的资源利用率
- 清理工作,以避免集群中临时数据的堆积RegionServer负责处理客户端API调用,如puts、gets、updates、deletes等。在任意时刻,每个RegionServer托管一组明确的区域,并且只负责这些托管区域的CRUD操作。根据集群动态变化的需要,如添加新的RegionServer、移除现有的RegionServer等,这些托管的区域可能会发生变化。
负载平衡器:Apache HBase是一个自动分片、自动平衡的水平可扩展键值存储。负载平衡器负责保持集群健康并在不断变化的环境中优化资源利用。
自动分片 — 每个表被划分为称为区域(分片)的不相交连续子集。如果区域(分片)增长足够大,它可以被分裂为两个区域,如果两个相邻的区域收缩足够小(由于TTL过期或数据删除),可以合并为一个区域。这种动态设置的特性需要一个平衡器来确保集群能够适应集群的变化动态。
自动平衡 — 具有水平可扩展能力,添加或移除RegionServer应该自动处理,每个RegionServer都得到适当利用。这可以通过将区域自动移动到新的RegionServer并从移除的RegionServer中移出来实现。这里就是平衡器发挥作用的地方。