问题描述
Presto协调器不具有对高可用性的内置支持。它是一个 SPOF 单点故障。 有办法解决这个问题吗?
解决方法
HA可能有多种含义。
没有用于进行中查询的HA,Presto项目也不为协调器提供HA,因为这固有地需要与部署和监视系统绑定。
您的选择包括:
- 使用Starburst进行部署,它可以提供协调器超过一年的快速故障转移
- AWS的EMR还可以为协调器提供故障转移(需要验证)
- 自己建造
当前这些解决方案是有限的,它们无法帮助正在进行或当前排队的查询失败,因此您仍然需要在客户端进行某种重试。您可以按照https://github.com/prestosql/presto/issues/455进行Presto的未来改进,以增强弹性。
,Presto Coordinator HA设置
(如果协调器出现故障,正在进行的查询将受到影响)
活动/活动
要求
-
ELB的
-
N + 1个主机名。
或
ELB上的 -
N + 1个端口。
N是presto群集的数量。
为客户端配置了不用作服务器名的elb主机名之一。 在当前设置中, presto.client.abc.com 。
Presto查询协议 https://github.com/prestodb/presto/wiki/HTTP-Protocol
这是基于游标的实现。查询将导致一个游标,而客户端将迭代该游标。每个游标迭代响应都包含一个下一个uri,以从中获取下一组结果。 查询的所有下一个uri链接都必须路由到原始查询所处理的协调器。
使用nginx服务器名称将查询绑定到协调器。 也可以使用多个端口(ELB具有多个端口而不是多个主机名)进行设置。
,自从您询问Prestodb以来,我们正在研究单个协调器的问题,以便为prestodb设计多个协调器。
给定当前的协调器设计,这是一个很难解决的问题。 https://github.com/prestodb/presto/issues/3918
正如您提到的那样,在两个协调器上使用HA代理是目前实现某种协调器HA的最佳方法。
如果您在Kubernetes中运行容器,则K8s可以检测到一个下垂的容器并自动重启协调器,从而在一定程度上为您提供HA。
尽管AWS EMR提供了多主机环境,但由于Presto不支持多个协调器,因此目前不支持它。 (不在可使用此功能的服务列表中)