如何对 Knox 网关后面的多个 phoenix 查询服务器进行负载平衡?

How to load balance several phoenix query servers behind Knox gateway?

我有 3 个 phoenix 查询服务器 运行 在 knox 网关后面(隐藏 kerberos 身份验证的复杂性),通过 Simba 的 odbc 驱动程序访问。我设法到达一个 phoenix 查询服务器并通过 knox 启动查询,方法是在拓扑文件中直接将 avatica 服务映射到我内部网络中一个 phoenix 查询服务器的内部 IP 地址和端口。 我想让 knox 随机访问我的 3 个 phoenix 查询服务器中的任何一个,而不仅仅是一个。您知道我是否可以使用 zookeeper 实现此目的以及我如何配置它来做到这一点?

我已经尝试做一些负载平衡,使 knox 拓扑指向 nginx 反向代理,将我的 3 PQS 设置为上游,但我遇到 401 错误,同样我的凭据是通过代理传输的

我的 odbc.ini 文件:

[phoenixovh]
Driver=/opt/hortonworks/phoenixodbc/lib/64/libphoenixodbc_sb64.so
Host=knox.<clusterid>.datalake.ovh
Port=443
AuthMech=2
UID=<user>
PWD=<password>
LogLevel=0
ConnectionSyncInterval=120
SSL=1
HttpPath=gateway/default/avatica
TransportMode=http

我的 knox 拓扑文件的一部分(适用于 1 个 PQS)(default.xml)

<service>
  <role>AVATICA</role>
   <url> internal_address__and_port_of_url_of_one_pqs</url>
</service>

我终于按照 know ha 指南 (https://cwiki.apache.org/confluence/display/KNOX/Dynamic+HA+Provider+Configuration) 成功达到了我的 3 PQS,在我的拓扑文件中添加了一个 ha provider 部分,并在服务配置中提供了 3 个 url,而不是一个:

 <provider>
    <role>ha</role>
    <name>HaProvider</name>
    <enabled>true</enabled>
    <param>
      <name>AVATICA</name>
      <value>maxFailoverAttempts=3;failoverSleep=1000;maxRetryAttempts=300;retrySleep=1000;enabled=true</value>
    </param>
  </provider>
</gateway>

...

<service>
 <role>AVATICA</role>
  <url>internal url of PQS1</url>
  <url>internal url of PQS2</url>
  <url>internal url of PQS3</url>
</service>

Knox 指南提到了这种方式以及 zookeeper 的连接字符串,但没有提供任何关于哪种解决方案更好的见解。