使用presto-gateway在多个presto集群间调度任务

1.    概述

Presto是一个Facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。客户在使用Presto的时候发现单个集群不能满足业务需求,而建立多个Presto集群之后,如何在集群间调度任务就成为一个问题。在Presto中,一个Query执行周期内需要客户端和服务端进行多次的HTTP请求,在多集群模式下,如何保证同一个Query的请求都分发到同一个集群呢?

通过测试,使用AWSALB作为分发会导致前后HTTP请求被转发到不同的集群,从而无法得到查询结果。使用AWS NLB可以正常的执行查询,但是单个客户端的请求在短时间会集中转发给一个集群,无法分散。

幸好,Lyft为解决这个问题而开发了presto-gateway这个工具,并将它开源出来。(https://github.com/lyft/presto-gateway

2.   Presto-gateway介绍

Presto-gateway是在多个Presto集群前的一个有状态Load-balancer,Proxy和Router,它提供了透明的访问方法。如下图:(内容来自于https://eng.lyft.com/presto-infrastructure-at-lyft-b10adb9db01)


Presto-gateway通过追踪查询ID来保证后续请求转到原来的集群上。


3.    准备工作

Presto-gateway使用MySQL来记录后端Presto集群和查询历史,所以我们需要先准备一台MySQL服务器,自建或者托管的RDS均可。

创建一个数据库prestogateway:

CREATE DATABASE prestogateway

根据https://github.com/lyft/presto-gateway/blob/master/gateway-ha/src/main/resources/gateway-ha-persistence.sql文件内容创建表。

4.    编译presto-gateway

准备一台服务器,编译环境需要JDK1.8和Maven,在Amazon Linux 2上,JDK已经默认安装了,Maven可以通过  sudo yum install maven来完成安装。

先用gitclone代码:

        git clone https://github.com/lyft/presto-gateway.git

用Maven编译:

        cd presto-gateway

mvn clean install


5.    运行presto-gateway

先更改gateway-ha目录下配置文件 gateway-ha-config.yml,行10到14部分,修改MySQL地址和用户名密码:

dataStore:

  jdbcUrl:jdbc:mysql://:3306/prestogateway

  user:

  password:

  driver:com.mysql.cj.jdbc.Driver


然后就可以启动pesto-gateway服务了:

cd gateway-ha/target/

java -jar gateway-ha-1.8.8-SNAPSHOT-jar-with-dependencies.jarserver ../gateway-ha-config.yml

如果需要长期运行,可以通过 nohup &方式来执行。

6.   增加和修改presto集群

可以通过两种方式来将Presto集群添加进来,如果名字相同,则可以更新现有信息。

1.通过CURL命令:

curl -X POST

http://localhost:8080/entity?entityType=GATEWAY_BACKEND \

 -d '{ "name": "presto1",

        "proxyTo":"http://172.31.201.65:8889",

        "active": true,

        "routingGroup":"adhoc"

    }'


2.通过Web UI:

http://<server-ip>:8090/entity



7.    查询presto集群

同样可以通过CURL命令和Web UI两种方法来查询:

        curl -X GET http://localhost:8080/entity/GATEWAY_BACKEND


[

    {

       "active": true,

       "externalUrl": "http://172.31.201.65:8889",

       "name": "presto1",

       "proxyTo": "http://172.31.201.65:8889",

       "routingGroup": "adhoc"

    },

    {

       "active": true,

       "externalUrl": "http://172.31.201.117:8889",

       "name": "presto2",

       "proxyTo": "http://172.31.201.117:8889",

       "routingGroup": "adhoc"

    },

]


或者访问: http://:8090/viewgateway


8.   删除presto集群

在删除presto集群前,可以先将它deactivate,这样新的查询就不会转到该集群,能够更优雅的将集群移除。

curl -X POST http://localhost:8080/gateway/backend/deactivate/presto2

通过WebUI更新该集群的active属性为false也能完成同样目的。

再通过以下命令完成删除:

curl -X POST -d "presto2"

http://localhost:8080/gateway/backend/modify/delete

删除操作无法在WebUI上完成。


9.    查询历史

在添加Presto集群之后,客户端就可以通过:8080来提交查询请求,就像连接原来的Presto一样。提交查询之后,就可以在Web UI上看到历史:http://:8080/

从底部的统计可以看到查询平均分发到两个集群上。


10.        健康检查

Presto-gateway每分钟会检查后端Presto集群是否健康,如果发现不正常,它会自动发送邮件通知,相关设置在配置文件 gateway-ha-config.yml中,如下:

notifier:

  smtpHost: localhost

  smtpPort: 587

  sender:presto-gw-monitor-noreply@lyft.com

  recipients:

    - prestodev@yourorg.com

11.        路由规则引擎

Presto-gateway提供了用户可以自定义路由规则的功能来重定向请求到不同集群,这个规则可以通过修改配置文件来设置。

routingRules:

  rulesEngineEnabled: true

  rulesConfigPath:"src/test/resources/rules/routing_rules.yml" # replace with path toyour rules config file


12.        附录

参考链接:

https://github.com/lyft/presto-gateway

https://medium.com/pinterest-engineering/presto-at-pinterest-a8bda7515e52

https://eng.lyft.com/presto-infrastructure-at-lyft-b10adb9db01

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容