如何在Knox网关后面平衡多个phoenix查询服务器?

时间:2019-06-14 14:51:01

标签: apache-zookeeper phoenix knox-gateway apache-knox

我有3台phoenix查询服务器在knox网关(隐藏kerberos auth复杂性)后面运行,可以通过Simba的odbc驱动程序访问。通过将拓扑文件中的avatica服务直接映射到内部网络中一台phoenix查询服务器的内部IP地址和端口,我设法到达一台phoenix查询服务器并通过knox启动查询。 我想让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>

1 个答案:

答案 0 :(得分:1)

通过遵循已知的ha指南(https://cwiki.apache.org/confluence/display/KNOX/Dynamic+HA+Provider+Configuration),我终于设法达到了3个PQS,在拓扑文件中添加了ha提供者部分,并在服务配置中提供了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的连接字符串,但没有提供关于哪种解决方案更好的见解。