Impala负载均衡方案-HAProxy

Posted 大数据哔哔机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Impala负载均衡方案-HAProxy相关的知识,希望对你有一定的参考价值。

一、Impala服务

Impala服务分为三个角色:

Impala Catalog Server
Impala StateStore
Impala Daemon

下面逐一介绍三个角色的作用及工作机制:


① Impala Daemon

Impala Daemon是Impala的核心组件之一,它可以运行集群的每个Datanode节点上,进程名impalad。Impala Daemon 通过 impala-shell 命令行,Hue,JDBC 或者 ODBC 接受查询请求并分发任务,然后并行查询,最后将中间查询结果返回到中央协调器,由中央协调器返回最后的结果。我们可以提交查询到任何一个 impala daemon节点,然后该节点的 impala daemon 就会作为中央协调器(coordinator node)。如果每次查询都使用同一节点作为 coordinator 那么会对节点造成很大的负载,因此建议以轮询的方式提交查询任务。

Impala daemon 与statestore不断通信,监控daemon 的健康状况,并确定哪些节点可以接收新工作。当任何节点做 create,alter,drop,insert,load data操作时,Impala daemon 从 catalogd 接受广播消息,这样可以减少 REFRESH 和 INVALIDATE METADATA 的调用。


② Impala Statestore

Impala statestore 用来检测 Impala daemon 的健康状况,集群中只能有一个 statestoe,物理表现为 statestored,当 daemon 状态异常时,statestore 会通知其他 daemon 不再发送查询到此 daemon 。

Statestore 并不是必须的服务,它只监控 daemon 服务,即使 statestore 异常或未启动 Impala daemon 照样可以执行查询,只不过 daemon 异常时,无法通知其他 daemon 服务。Statestore 服务并不需要 HA,如果服务异常或者主机损坏可以直接重新添加一个 statestore 服务即可。


③ Impala Catalog Service

Catalog 服务可以把 Impala SQL 对元数据的修改广播到所有节点。物理进程是 catalogd,同statestore 一样不需要做HA,且建议与 statestore 部署到同一节点,因为转播请求需通过 statestore 进行。Catalog 服务避免了 REFRESH 和 INVALIDATE METADATA 语句的执行。当通过 Hive 创建表、加载数据时,需要在 Impala 上手动 执行 REFRESH 或 INVALIDATE METADATA 。

使用 Impala 创建表,插入数据或者其他表修改或者表数据修改的操作时,不需要执行 REFRESH 和 INVALIDATE METADATA 语句。如果是在 Hive操作则需要执行,但也仅需要在一台节点上执行。

默认,元数据的加载与缓存是异步的,这样 Impala 可以更及时的处理客户端请求。修改 catalogd 配置 load_catalog_in_background=false ,则会等待元数据加载完成再处理客户端请求。


二、负载均衡方案

通过上面三个角色的介绍,我们知道Statestore和Catalog Service是单点的,没有高可用的需求,因为这两个实例是无状态的,本身不存储任何数据,例如catalogd的数据存储在第三方数据库(例如mysql中),statestore的数据全都存储在内存中,可以通过简单的主备的方式来实现高可用,本文最后会提到。正常情况下只有master提供服务,slave只是运行状态但是不接受任何请求,当master出现问题之后再slave提升为master提供服务。

而对于impalad节点,每一个节点都可以提供jdbc和thrift等服务,并且对于连接到该impalad的查询作为coordinator节点(需要消耗一定的内存和CPU)存在,为了保证每一个节点的负载的平衡需要对于这些impalad做一下均衡,负载均衡分为四层负载均衡和七层负载均衡,前者是针对运输层的,后者是针对应用层的,区别在于前者不需要了解应用协议,只需要对传输层收到的IP数据包进行转发,而后者需要了解应用协议的,而对于impalad这种SQL服务器,就需要使用SQL协议的代理,所以七层代理对于impalad是有点不切实际的。下面以haproxy作为四层代理服务器来说明如何对impalad节点进行load balance。除了本文档提到的使用 load-balancing proxy server外,最简单的方案莫过于使用DNS做负载均衡,但是DNS的性能一般,所以这里我们按照官方的建议使用haproxy实现四层的负载均衡。


三、HAProxy搭建配置

这里我使用公司的Yum里面的包安装,各位可以自行在网上下载安装包,这里不做下载教程。


执行安装命令:yum -y install haproxy

配置开机启动:chkconfig--level23456 haproxy  on

配置haproxy.cfg:vim /etc/haproxy/haproxy.cfg

#在文件末尾追加以下内容

listen stats

   bind 0.0.0.0:8080

   stats enable

   mode http

   option httplog

   maxconn 5000

   stats refresh 30s

   stats  uri /stats

listen impalajdbc

   bind 0.0.0.0:25004

   mode tcp

   option tcplog

   balance leastconn

   server daemon域名1 daemon域名1:21050 check

   server daemon域名2 daemon域名2:21050 check

   server daemon域名3 daemon域名3:21050 check

   server daemon域名4 daemon域名4:21050 check

   server daemon域名5 daemon域名5:21050 check

 

启动服务:service haproxy restart

浏览器访问http://10.0.186.70:8080/stats查看详细信息


以上是关于Impala负载均衡方案-HAProxy的主要内容,如果未能解决你的问题,请参考以下文章

Hive/Impala--HAProxy实现Impala/HiveServer2负载均衡

如何使用Nginx实现Impala负载均衡

如何在Hue中配置Impala的负载均衡

HAProxy负载均衡

HAProxy负载均衡与最佳实践(中)

初识千万级高并发负载均衡软件HaProxy