天天看点

HAProxy实现Impala的负载均衡

1. 安装 HAProxy

[root@master ~]# yum -y install haproxy           

复制

2. 设置HAProxy配置

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vim /etc/haproxy/haproxy.cfg           

复制

#---------------------------------------------------------------------

# Example configuration for a possible web application. See the

# full configuration options online.

#

# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

#

#---------------------------------------------------------------------

#---------------------------------------------------------------------

# Global settings

#---------------------------------------------------------------------

global

log 127.0.0.1 local2

chroot /var/lib/haproxy

pidfile /var/run/haproxy.pid

maxconn 4000

user haproxy

group haproxy

daemon

# turn on stats unix socket

stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------

# common defaults that all the 'listen' and 'backend' sections will

# use if not designated in their block

#---------------------------------------------------------------------

defaults

mode http#mode { tcp|http|health },tcp 表示4层,http表示7层,health仅作为健康检查使用

log global

option httplog

option dontlognull

#option http-server-close

#option forwardfor except 127.0.0.0/8

#option abortonclose##连接数过大自动关闭

option redispatch#如果失效则强制转换其他服务器

retries 3#尝试3次失败则从集群摘除

timeout http-request 10s

timeout queue 1m

#timeout connect 10s

#timeout client 1m

#timeout server 1m

timeout connect 1d#连接超时时间,重要,hive查询数据能返回结果的保证

timeout client 1d#同上

timeout server 1d#同上

timeout http-keep-alive 10s

timeout check 10s#健康检查时间

maxconn 3000#最大连接数

listen status#定义管理界面

bind 0.0.0.0:1080#管理界面访问IP和端口

mode http#管理界面所使用的协议

option httplog

maxconn 5000#最大连接数

stats refresh 30s#30秒自动刷新

stats uri /stats

listen jdbchive

bind 0.0.0.0:25005#ha作为proxy所绑定的IP和端口

mode tcp#以4层方式代理,重要

option tcplog

balance source#调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分

server hiveServer1 master:10000 check

server hiveServer2 nns:10000 check

listen impalashell

bind 0.0.0.0:25003#ha作为proxy所绑定的IP和端口

mode tcp#以4层方式代理,重要

option tcplog

balance leastconn#调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分

server impalashell_dn1 dn1:21000 check

server impalashell_dn2 dn2:21000 check

server impalashell_dn3 dn3:21000 check

server impalashell_dn4 dn4:21000 check

server impalashell_dn5 dn5:21000 check

listen impalajdbc

bind 0.0.0.0:25004#ha作为proxy所绑定的IP和端口

mode tcp#以4层方式代理,重要

option tcplog

balance source#调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分

server impalajdbc_dn1 dn1:21050 check

server impalajdbc_dn2 dn2:21050 check

server impalajdbc_dn3 dn3:21050 check

server impalajdbc_dn4 dn4:21050 check

server impalajdbc_dn5 dn5:21050 check

#---------------------------------------------------------------------

# main frontend which proxys to the backends

#---------------------------------------------------------------------

frontend main *:5000

acl url_static path_beg -i /static /images /javascript /stylesheets

acl url_static path_end -i .jpg .gif .png .css .js

use_backend static if url_static

default_backend app

#---------------------------------------------------------------------

# static backend for serving up images, stylesheets and such

#---------------------------------------------------------------------

backend static

balance roundrobin

server static 127.0.0.1:4331 check

#---------------------------------------------------------------------

# round robin balancing between the various backends

#---------------------------------------------------------------------

backend app

balance roundrobin

server app1 127.0.0.1:5001 check

server app2 127.0.0.1:5002 check

server app3 127.0.0.1:5003 check

server app4 127.0.0.1:5004 check

注: Impala守护进程Beeswax端口21000映射到haproxy 25003

        Impala守护进程HiveServer2端口21050映射到haproxy 25004

3. 开启HAProxy代理服务

[root@master ~]# Service haproxy start           

复制

开启: service haproxy start

关闭: service haproxy stop

重启: service haproxy restart

开机自启动: chkconfig haproxy on

访问 http://{hostname}:1080/stats

HAProxy实现Impala的负载均衡

表示在Haproxy中已正常配置Impala服务。

以上HAProxy实现Impala的负载均衡。

4.Hue中设置Impala的负载均衡,重启相关服务

HAProxy实现Impala的负载均衡

server_host:HAProxy服务的HOSTNAME或IP

server_port:HAProxy中配置监听的Impala的端口

5. Impala shell 测试

使用多个终端同时访问,并执行SQL语句,查看是否会通过HAProxy服务自动负载到其它Impala Daemon节点。

打开第一个终端访问并执行SQL

HAProxy实现Impala的负载均衡

打开第一个终端访问并执行SQL

HAProxy实现Impala的负载均衡

通过以上测试可以看到,两个终端执行的SQL不在同一个Impala Daemon,这样就实现了Impala Daemon服务的负载均衡。

6. ImpalaJDBC测试

在此注明: 测试环境我测试连接成功了,线上环境始终连接不成功,正在找问题, 待解决后更新。

7. Kerberos 环境下 Impala 负载均衡

在此,我的Haproxy服务安装在了master节点上,所以此处填写master:25003

HAProxy实现Impala的负载均衡

8. Kerberos环境下 Impala shell 测试

使用多个终端同时访问,并执行SQL语句,查看是否会通过HAProxy服务自动负载到其它Impala Daemon节点。

在此本人用test用户进行测试,首先对test用户进行身份验证

HAProxy实现Impala的负载均衡

第一个终端:

HAProxy实现Impala的负载均衡

第二个终端:

HAProxy实现Impala的负载均衡

通过以上测试可以看到,两个终端执行的SQL不在同一个Impala Daemon,这样就实现了Impala Daemon服务的负载均衡。

问题1: 集群启用Kerberos后,应用impala-shell 进行全表查询或这count查询,报错。待查找原因。

HAProxy实现Impala的负载均衡

9. Kerberos 环境下 ImpalaJDBC测试

在此注明: 待解决后更新。