Skip to content
Published on

Cross Realm Trust HBase設定方法

Authors
  • Name
    Twitter

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関連の設定を以下のように追加する必要があります。

krb5.conf
[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関連の設定を以下のように追加する必要があります。

krb5.conf
[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を追加する必要があります。

core-site.xml
<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クラスタには以下を追加します。

core-site.xml
<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作業を進めることができます。

Reference