内部通信安全
在文件中进行SSL/TLS配置。使用相同的属性对工作(worker)节点和协调(coordinator)节点上的SSL/TLS进行配置。集群中每个节点都需要进行配置。未配置SSL/TLS或配置错误的节点将无法与集群中的其他节点进行通信。
为openLooKeng内部通信启用SSL/TLS功能,执行以下步骤:
禁用HTTP端点。
配置集群使用集群节点的FQDN(全量域名)进行通信。可通过以下两种方式实现:
如果DNS服务配置正常,可以让节点使用从系统配置获得的主机名(
hostname --fqdn
)向协调节点介绍自己。-
node.internal-address=<node fqdn>
生成Java 密钥库文件。每个openLooKeng节点必须能够连接到同一集群中的任何其他节点。可以使用每台主机的完全限定主机名为每个节点创建唯一的证书,创建包含所有主机的所有公钥的密钥库,并为客户端指定密钥库(见下面的步骤8)。在大多数情况下,在证书中使用通配符会更简单,如下所示。
建议keysize不小于2048
为openLooKeng集群分发Java密钥库文件。
启用HTTPS端点。
http-server.https.enabled=true
http-server.https.port=<https port>
将discovery URI修改为HTTPS地址。
配置内部通信需要使用HTTPS协议。
配置内部通信使用Java密钥库文件。
internal-communication.https.keystore.path=<keystore path>
internal-communication.https.keystore.key=<keystore password>
注意
用于内部Kerberos认证的服务名和keytab文件来自于服务器Kerberos认证属性,这些属性分别在Kerberos</security/server>
, http.server.authentication.krb5.service-name
和 http.server.authentication.krb5.keytab
文档中设置。在worker节点上也必须完成Kerberos设置。用于内部通信的Kerberos主体是通过http.server.authentication.krb5.service-name
后面追加主机名(运行openLooKeng服务的节点的)和默认域(Kerberos配置)来构建的。
启用加密会影响性能。性能下降可能因环境、查询数和并发度而异。
对于不需要在openLooKeng节点之间传输太多数据的查询(例如SELECT count(*) FROM table
),对性能影响可以忽略。
但是,对于需要在节点之间传输大量数据的CPU密集型查询(例如需要重分区的分布式联接、聚合和窗口函数),性能影响可能相当大。 根据网络流量和CPU利用率的不同,可能会有10%到100%以上的减速。
在某些情况下,改变随机数的来源可显著提高性能。
TLS加密默认使用系统设备作为熵源。这种设备吞吐量有限,在具有高网络带宽(例如InfiniBand)的环境中,可能会成为瓶颈。在这种情况下,建议尝试将随机数生成器算法切换为SHA1PRNG
。方法是在协调节点和所有worker节点通过config.properties
中的http-server.https.secure-random-algorithm
属性进行设置。
-Djava.security.egd=file:/dev/urandom