첫째, 당신은 Kerberos 구성 파일의 위치를 지정 제이보스의 standalone.xml
에 시스템 속성을 추가 할 수 있습니다 파일은 Kerberos 구현에 따라 달라 지므로 여기에 파일을 작성하십시오. 중요한 것은 KDC의 기본 영역과 네트워크 위치가 포함되어 있다는 것입니다. 리눅스에서는 일반적으로 /etc/krb5.conf
또는 /etc/security/krb5.conf
에서 찾을 수 있습니다. Windows에서 WildFly를 실행하는 경우 경로에 슬래시를 사용해야합니다 (예 : "C:/Source/krb5.conf"
둘째, 두 개의 새로운 보안 도메인을 standalone.xml
에 추가하십시오. 하나는 ZooKeeper가 사용하는 "클라이언트"이고 다른 하나는 WildFly에서 사용하는 "호스트"라고하는 도메인입니다. 왜 (이 나를 괴롭혔는지)) "클라이언트"보안 도메인의 이름은 이어야합니다.은 서버의 사육사의 JAAS 클라이언트 구성 파일에 정의 된 것과 일치해야합니다. 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>
모듈 옵션은 구현에 따라 달라질 수 있습니다. JRE의 java.security
파일에 정의되어있는 기본 Java 티켓 캐시에서 내 티켓을 가져오고 있지만 원하는 경우 여기에 키탭을 제공 할 수 있습니다. storeKey
을 true
으로 설정하면 구현이 잘못되었습니다. 모든 옵션에 대해서는 Java 설명서를 확인하십시오. 각 보안 도메인은 다른 로그인 모듈을 사용합니다. 이는 우발적이지 않습니다. Phoenix는 org.jboss...
버전을 사용하는 방법을 모릅니다.
이제 org.apache.phoenix.jdbc.PhoenixDriver
클래스의 WildFly에 phoenix-<version>-client.jar
을 제공해야합니다. 제이보스 디렉토리에 다음 디렉토리 트리를 만듭니다의 main
디렉토리에서
/modules/system/layers/base/org/apache/phoenix/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>
는 또한 main
디렉토리 서버에서 hbase-site.xml
및 core-site.xml
붙여 넣기 할 필요가있다. 이들은 일반적으로 /usr/hdp/<version>/hbase/conf
및 /usr/hdp/<version>/hadoop/conf
에 있습니다. 추가하지 않으면 ZooKeeper getMaster
오류가 발생합니다. 드라이버를 WildFly와 같은 위치에 기록하려면 main
디렉토리에 log4j.xml
파일을 만들어야합니다. 웹의 다른 곳에서 예제를 찾을 수 있습니다. <resource-root path="."></resource-root>
엘리먼트는 WildFly가 전개 할 때 클래스 경로에 XML 파일을 추가하는 요소입니다.
마지막으로 <subsystem xmlns="urn:jboss:domain:datasources:2.0">
섹션에 새 데이터 소스 및 드라이버를 추가하십시오. 당신은 CLI하여이 작업을 수행 할 수 있습니다 직접 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
을 교체하는 것이 중요합니다. HBase 구성 디렉토리의 hbase-site.xml
에서 찾으실 수 있습니다 : hbase.zookeeper.quorum
. 연결 URL 문자열에 Kerberos 정보를 추가 할 필요가 없습니다!
TL; DR
- 확인
hbase-site.xml
및 core-site.xml
이 클래스 경로에 있는지 확인하십시오.
com.sun.security.auth.module.Krb5LoginModule
을 사용하는 ZooKeeper가 예상하는 이름 (아마도 "클라이언트")을 가진 <security-domain>
이 있는지 확인하십시오.
- Phoenix 연결 URL 은 전체 ZooKeeper 쿼럼이 포함 된이어야합니다. 하나의 서버를 놓칠 수 없습니다! 값이
hbase-site.xml
과 일치하는지 확인하십시오.
참고 :
수동으로 보안 클러스터에 쿼리 서버와 클라이언트 (얇은 두께 클라이언트) 시작할 수 있습니다 방법 알려주세요 - HTTPS를 : //stackoverflow.com/questions/46444676/apache-phoenix-how-can-start-the-query-server-and-thin-client-on-kerberos-clus –