问题描述
由于Haproxy使用source调度算法,某个用户提交了大量的任务,导致其中一台HiveServer2负载很高,其他用户负载到该HiveServer2任务无法提交
使用source调度算法,是防止Hue查询得到过期结果等错误
解决方案
- 目前公司在生产上的实践就是安装四个HiveServer2,其中两个HiveServer2专门作为beeline用户提交任务,Haproxy负载算法为roundrobin,还有两个HiveServer2专供Hue来查询,用于验数等操作
问题解决
配置说明
将master和node2作为beeline专用的HiveServer2,Haproxy调度算法为roundrobin
将node1和node3作为Hue专用,Haproxy调度算法为source
Haproxy配置
修改配置文件,需要注意的是下面监听的端口需要改为Haproxy所在主机没有被占用的端口,在最下面增加hive_server_hue ``` vim /etc/haproxy/haproxy.cfg
listen hive_server_hue bind 0.0.0.0:10005 mode tcp option tcplog balance source server hive_server_03 node1:10000 check server hive_server_04 node3:10000 check
![image.png](https://cdn.nlark.com/yuque/0/2020/png/2463114/1600928603149-b0c8ad4b-f217-403c-8b3b-087d64e3db92.png#align=left&display=inline&height=777&margin=%5Bobject%20Object%5D&name=image.png&originHeight=777&originWidth=1514&size=58891&status=done&style=none&width=1514)
2. 如果配置了Keepalived,还需要将配置文件同步至另一台Haproxy,并重启Haproxy
```shell
systemctl restart haproxy
CM增加Role
- 通过CM进入Hive -> 配置 -> RoleGroup
- 点击Create Role Group
- 选择如下
配置Hive
- CM进入hive -> 配置,搜索load
- 点击编辑单个值
- for_hue中填入load:10005
配置Hue
Cm进入Hue -> 配置,搜索hue_safety_valve.ini,填入
[beeswax] hive_server_host=load hive_server_port=10005
测试
进入Haproxy监控页面
- 进入Hue WebUI查询数据,Haproxy中显示被负载到hive_server_hue组的一个HiveServer2
使用beeline连接,Haproxy显示被负载到hive_server组的一个HiveServer2中
beeline -u "jdbc:hive2://load:10001/;principal=hive/load@FAYSON.COM"
关闭一个供Hue使用的HiveServer2,在提交查询,在Haproxy中显示关闭的HiveServer2变为不可用,将连接负载到可用的HivServer2中