- 基于kylin-3.0
背景
- 对于 kylin平台进行job engine HA和Query 的负载均衡;
- kylin平台共三台机器,例如:41:job,42:query,43:all
HA配置
- 修改kylin.properties
# 任务引擎高可用
kylin.job.scheduler.default=2
kylin.job.lock=org.apache.kylin.storage.hbase.util.ZookeeperJobLock
#
- 需要修改kylin集群所有节点的配置
- 测试环境
- 43 :
kylin.server.mode=all
- 41 :
kylin.server.mode=job
- 43 :
HA测试环境测试
- 测试project:learn_kylin
-
执行 refresh,可以看到 bulid engine为41,详见下图;
41-机器build
- 混沌测试,对41机器进行stop操作;
- 再次执行refresh操作;可以看到build engine为43,详见下图:
Query负载均衡
- 部署nginx-1.16.1 (部署过程略)
- nginx负载均衡:
nginx支持以下负载均衡机制(或方法):
循环 - 对应用程序服务器的请求以循环方式分发,
最少连接 - 下一个请求被分配给活动连接数最少的服务器,
ip-hash - 哈希函数用于确定下一个请求(基于客户端的IP地址)应该选择哪个服务器。
- 针对于kylin query的负载均衡,采用会话持久性 即ip-hash的方式,理由如下:
- 避免用户频繁登陆kylin web,手动输入密码;
- 使用ip-hash,将客户端的IP地址用作散列键,以确定应该为客户端的请求选择服务器组中的哪个服务器。此方法可确保来自同一客户端的请求将始终定向到同一服务器,除非此服务器不可用。
- 在域名解析的机器上配置比较好;
- 测试环境:
- 43 :
kylin.server.mode=all
- 42 :
kylin.server.mode=query
- 43 :
- nginx 配置文件:
- 43:/data1/nginx_flume/server/nginx
- nginx_kylin.conf
- url:http://172.18.10.43:7077/kylin/login (配置过负载均衡的url,在nginx中已经将监听端口修改成了7077,所以这里的访问端口也是7077,需要注意一下)
- 正式环境需要根据域名进行配置;
user root;
worker_processes 4;
error_log "/data1/nginx_flume/server/nginx/logs/error.log" notice;
pid "/data1/nginx_flume/server/nginx/logs/nginx.pid";
events {
use epoll;
worker_connections 204800;
}
http {
include mime.types;
server_tokens off;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
# 配置 request_body 大小 1m
client_max_body_size 1M;
# 配置request_body 大小 1024k
client_body_buffer_size 1024k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
fastcgi_connect_timeout 5;
fastcgi_send_timeout 10;
fastcgi_read_timeout 10;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_intercept_errors on;
keepalive_timeout 0;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
proxy_connect_timeout 15s;
proxy_read_timeout 24s;
proxy_send_timeout 10s;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_set_header Host $http_host;
uninitialized_variable_warn off;
upstream kylin_request {
ip_hash;
server 172.18.10.43:7070; # query或者all节点
server 172.18.10.42:7070; # query或者all节点
}
server {
listen 7077;
server_name 172.18.10.43;
location ~ ^/kylin/(.*)$ {
proxy_pass http://kylin_request;
}
}
}
- 登陆测试(未配置域名解析下):
-
查看kylin的log日志,43机器如下:
43机器日志
-
将43 kylin实例stop,仍进行请求,查看42机器日志;
42机器日志
review意见
- 有使用 AWS 服务的同学可以使用ELB进行负载均衡,因为kylin的负载均衡是HTTP层面的;
- nginx层的负载均衡方式有很多种,可以尝试其他的链接方式进行;适合自己业务的就是最好的;
网友评论