Presto协调员不支持高级可用性

问题描述

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群集的数量。

enter image description here

为客户端配置了不用作服务器名的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不支持多个协调器,因此目前不支持它。 (不在可使用此功能的服务列表中)