Во-первых, вы хотите, чтобы добавить свойство системы в WildFly-х standalone.xml
указать местоположение файла конфигурации Kerberos:
...
</extensions>
<system-properties>
<property name="java.security.krb5.conf" value="/path/to/krb5.conf"/>
</system-properties>
...
Я не буду вдаваться в формате krb5.conf
файл здесь, поскольку он зависит от вашей собственной реализации Kerberos. Важно то, что он содержит область по умолчанию и местоположение сети KDC. В Linux вы обычно можете найти его на /etc/krb5.conf
или /etc/security/krb5.conf
. Если вы используете WildFly в Windows, убедитесь, что вы используете перемотки в вашем пути, например. "C:/Source/krb5.conf"
Во-вторых, добавьте два новых домена безопасности до standalone.xml
- один называется «Клиент», который используется ZooKeeper, а другой называется «host», который используется WildFly. Не спрашивайте меня, почему (это вызвало у меня столько боли), но имя домена безопасности «Клиент» должно соответствовать, которое соответствует файлу конфигурации клиента JAAS Zookeeper на сервере. Если вы настроили Ambari, «Клиент» - это имя по умолчанию. Также обратите внимание, что вы не можете просто обеспечить jaas.config
файл как свойство системы, вы должны определить его здесь:
<security-domain name="Client" cache-type="default">
<login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required">
<module-option name="useTicketCache" value="true"/>
<module-option name="debug" value="true"/>
</login-module>
</security-domain>
<security-domain name="host" cache-type="default">
<login-module code="org.jboss.security.negotiation.KerberosLoginModule" flag="required" module="org.jboss.security.negotiation">
<module-option name="useTicketCache" value="true"/>
<module-option name="debug" value="true"/>
<module-option name="refreshKrb5Config" value="true"/>
<module-option name="addGSSCredential" value="true"/>
</login-module>
</security-domain>
Варианты модулей будет варьироваться в зависимости от реализации. Я получаю свои билеты из кэша кеша Java по умолчанию, который определен в файле java.security
вашей JRE, но вы можете поставить keytab здесь, если хотите. Обратите внимание, что установка storeKey
на true
нарушила мою реализацию. Проверьте документацию по Java для всех параметров. Обратите внимание, что в каждом домене безопасности используется другой модуль входа: это не случайно - Phoenix не знает, как использовать версию org.jboss...
.
Теперь вам необходимо предоставить WildFly классом org.apache.phoenix.jdbc.PhoenixDriver
в phoenix-<version>-client.jar
. Создайте следующее дерево каталогов в каталоге WildFly:
/modules/system/layers/base/org/apache/phoenix/main/
В каталоге main
вставьте феникс - Client.jar который вы можете найти на сервере (например,/usr/hdp/<version>/phoenix/client/bin
) и создать файл module.xml
:
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.apache.phoenix">
<resources>
<resource-root path="phoenix-<version>-client.jar">
<filter>
<exclude-set>
<path name="javax" />
<path name="org/xml" />
<path name="org/w3c/dom" />
<path name="org/w3c/sax" />
<path name="javax/xml/parsers" />
<path name="com/sun/org/apache/xerces/internal/jaxp" />
<path name="org/apache/xerces/jaxp" />
<path name="com/sun/jersey/core/impl/provider/xml" />
</exclude-set>
</filter>
</resource-root>
<resource-root path=".">
</resource-root>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="sun.jdk"/>
<module name="org.apache.log4j"/>
<module name="javax.transaction.api"/>
<module name="org.apache.commons.logging"/>
</dependencies>
</module>
Также нужно вставить hbase-site.xml
и core-site.xml
с сервера в каталог main
. Они обычно расположены в /usr/hdp/<version>/hbase/conf
и /usr/hdp/<version>/hadoop/conf
. Если вы не добавите их, вы получите много бесполезных ZooKeeper getMaster
ошибок! Если вы хотите, чтобы драйвер регистрировался в том же месте, что и WildFly, вам также следует создать файл log4j.xml
в каталоге main
. Вы можете найти пример в другом месте в Интернете. Элемент <resource-root path="."></resource-root>
- это то, что добавляет эти xml-файлы в путь к классам при развертывании WildFly.
Наконец, добавьте новый источник данных и драйвер в разделе <subsystem xmlns="urn:jboss:domain:datasources:2.0">
. Вы можете сделать это с помощью интерфейса командной строки или путем непосредственного редактирования standalone.xml
, я сделал последнее:
<datasource jndi-name="java:jboss/datasources/PhoenixDS" pool-name="PhoenixDS" enabled="true" use-java-context="true">
<connection-url>jdbc:phoenix:first.quorumserver.fqdn,second.quorumserver.fqdn:2181/hbase-secure</connection-url>
<connection-property name="phoenix.connection.autoCommit">true</connection-property>
<driver>phoenix</driver>
<validation>
<check-valid-connection-sql>SELECT 1 FROM SYSTEM.CATALOG LIMIT 1</check-valid-connection-sql>
</validation>
<security>
<security-domain>host</security-domain>
</security>
</datasource>
<drivers>
<driver name="phoenix" module="org.apache.phoenix">
<xa-datasource-class>org.apache.phoenix.jdbc.PhoenixDriver</xa-datasource-class>
</driver>
</drivers>
Очень важно, чтобы заменить first.quorumserver.fqdn,second.quorumserver.fqdn
с правильным Zookeeper кворума строкой для вашей среды. Вы можете найти это в hbase-site.xml
в каталоге конфигурации HBase: hbase.zookeeper.quorum
. Вам не нужно добавлять информацию Kerberos в строку URL-адреса соединения!
Т.Л., д-р
- Убедитесь, что
hbase-site.xml
core-site.xml
и находятся в вашем пути к классам.
- Убедитесь, что у вас есть
<security-domain>
с именем, которое ZooKeeper ожидает (возможно, «Клиент»), которое использует com.sun.security.auth.module.Krb5LoginModule
.
- URL-адрес подключения Phoenix должен содержать весь кворум ZooKeeper. Вы не можете пропустить один сервер! Убедитесь, что оно соответствует значению в
hbase-site.xml
.
Ссылки:
Позвольте мне знать, как можно вручную запустить сервер запросов и клиент (тонкий и толстый клиент) на безопасном кластере - HTTPS : //stackoverflow.com/questions/46444676/apache-phoenix-how-can-start-the-query-server-and-thin-client-on-kerberos-clus –