我尝试配置具有多个kms的hadoop。我配置了kms客户端部分,如:
<property>
<name>dfs.encryption.key.provider.uri</name>
<value>kms://http@test1;test2:16000/kms</value>
</property>
<property>
<name>hadoop.security.key.provider.path</name>
<value>kms://http@test1;test2:16000/kms</value>
</property>
服务器部分如
<property>
<name>hadoop.kms.key.provider.uri</name>
<value>jceks://file@/usr/kms/kms.keystore</value>
<description>URI of the backing KeyProvider for the KMS.</description>
</property>
但似乎密钥不会存储在两个kms服务器上。例如,当我使用如下命令时:
hadoop key list
我会得到不同的结果,这是不对的。应该是这样的情况:无论何时或在哪个服务器上运行命令,它都会给我所有已创建的密钥。 如何配置kms服务器使其正常工作?
由于
答案 0 :(得分:0)
https://issues.apache.org/jira/browse/HADOOP-11862
从上面的链接我们可以得到一些线索。现在KMS似乎没有很好地设计用于故障转移。必须有一个主KMS,并且可以有几个备用KMS。如果主KMS发生故障,则所有加密的数据都不能被解密。在最糟糕的情况下,如果主KMS发生故障并且无法恢复,我们甚至无法复制密钥库。在这种情况下,我们将丢失数据。最好的情况是,当其他备份KMS关闭时,所有其他KMS都可以正常工作。
答案 1 :(得分:0)
首先检查您的密钥是否同步。以下命令的输出应在kms服务器上产生相同的结果。
md5sum /var/lib/kms-keytrustee/keytrustee/.keytrustee/secring.gpg
如果输出不同,则Cloudera文档建议备份目录并联系其客户支持。
以下内容可以同步密钥受托者密钥位置的密钥,但请注意,您可能会丢失密钥并使加密数据不可读。所以要谨慎。
rsync -zav /var/lib/kms-keytrustee/keytrustee/.keytrustee \
root@the_other_kms:/var/lib/kms-keytrustee/keytrustee/.keytrustee.