- Authors
- Name
Background
Kerberosが適用された2つのHadoopクラスタのREALMが異なる場合、理論的には2つのクラスタ間のデータ移動は不可能です。しかし、Cross Realm Trustを設定すれば、クラスタ間のデータを照会したり自由に移動することも可能になります。
Prerequisite
Kerberosが既に適用されたAとBという2つのクラスタがあると仮定します。Aクラスタは UBUNTU.YJ.COM というRealmに属しており、Bクラスタは CENTOS.YJ.COM というRealmに属しています。また、各クラスタはZookeeper、HDFS、HBase、YARNコンポーネントを持っています。
Steps
1. krbtgtの作成
Cross Realmでは、krbtgtという名前のPrincipalが非常に重要です。
UBUNTU.YJ.COM KDCに以下の2つのprincipalを登録します。
krbtgt/UBUNTU.YJ.COM@CENTOS.YJ.COM krbtgt/CENTOS.YJ.COM@UBUNTU.YJ.COM
同様に、CENTOS.YJ.COM KDCに以下の2つのprincipalを登録します。
krbtgt/UBUNTU.YJ.COM@CENTOS.YJ.COM krbtgt/CENTOS.YJ.COM@UBUNTU.YJ.COM
上記4つのprincipalのencryption type、password、kvnoはすべて同一でなければなりません。
2. /etc/krb5.conf、/etc/hostsの更新
UBUNTU.YJ.COM realmに属するサーバーの/etc/krb5.confには、CENTOS.YJ.COM関連の設定を以下のように追加する必要があります。
[libdefaults]
default_realm = UBUNTU.YJ.COM
[realms]
UBUNTU.YJ.COM = {
kdc = kdc01.hadoop.example.com:88
admin_server = kdc01.hadoop.example.com:749
default_domain = ubuntu.yj.com
}
CENTOS.YJ.COM = {
kdc = kdc01.example.com:88
admin_server = kdc01.example.com:749
default_domain = centos.yj.com
}
[domain_realm]
.ubuntu.yj.com = UBUNTU.YJ.COM
ubuntu.yj.com = UBUNTU.YJ.COM
.centos.yj.com = CENTOS.YJ.COM
centos.yj.com = CENTOS.YJ.COM
CENTOS.YJ.COM realmに属するサーバーの/etc/krb5.confには、UBUNTU.YJ.COM関連の設定を以下のように追加する必要があります。
[libdefaults]
default_realm = CENTOS.YJ.COM
[realms]
CENTOS.YJ.COM = {
kdc = kdc01.example.com:88
admin_server = kdc01.example.com:749
default_domain = centos.yj.com
}
UBUNTU.YJ.COM = {
kdc = kdc01.hadoop.example.com:88
admin_server = kdc01.hadoop.example.com:749
default_domain = ubuntu.yj.com
}
[domain_realm]
.centos.yj.com = CENTOS.YJ.COM
centos.yj.com = CENTOS.YJ.COM
.ubuntu.yj.com = UBUNTU.YJ.COM
ubuntu.yj.com = UBUNTU.YJ.COM
また、/etc/hostsに相手方クラスタサーバーの情報を追加します。
3. kvnoテスト
Aクラスタでkeytabで認証を受け、Bクラスタのサーバーにkvnoでアクセスできるかテストします。
kinit -kt <A keytab> <A principal>
kvno <B principal>
Bクラスタでkeytabで認証を受け、Aクラスタのサーバーにkvnoでアクセスできるかテストします。
kvnoの値が整数として正常に出力されれば、cross realmの構成が正常に完了したことになります。
4. auth to local Ruleの追加
/etc/krb5.confが変更されると、関連するすべてのコンポーネント(HBase、HDFS、YARN)を再起動する必要があります。この時、Aクラスタのcore-site.xmlに以下のconfigを追加する必要があります。
<property>
<name>hadoop.security.auth_to_local</name>
<value>RULE: [1:$1@$0](.*@\QCENTOS.YJ.COM\E$)s/@\QCENTOS.YJ.COM\E$//
RULE: [2:$1@$0](.*@\QCENTOS.YJ.COM\E$)s/@\QCENTOS.YJ.COM$//
DEFAULT</value>
</property>
Bクラスタには以下を追加します。
<property>
<name>hadoop.security.auth_to_local</name>
<value>RULE: [1:$1@$0](.*@\QUBUNTU.YJ.COM\E$)s/@\QUBUNTU.YJ.COM\E$//
RULE: [2:$1@$0](.*@\QUBUNTU.YJ.COM\E$)s/@\QUBUNTU.YJ.COM$//
DEFAULT</value>
</property>
auth_to_localの文法についてはこちらを参照してください。
5. テスト
再起動が完了したら、AクラスタからBクラスタへ、またはBクラスタからAクラスタへのexport snapshot、replication設定、verify replicationなどのmigration作業を進めることができます。