XXX Directory Server でレプリケーション環境を作る

#はじめに
この投稿は RedHat Directory Server など、Netscape Directory Server を元にした LDAP 環境での設定のお話しです、OpenLDAP ではありません。


LDAP のマルチマスターレプリケーション環境が使いたいときに、どこから設定を始めればよいのか迷ったり、管理コンソールの操作に慣れていないと環境設定に手間取ってしまいます。
ここでは、単にマルチマスターレプリケーション環境を作ることだけを目的に説明を行っていきます。

#インストール

必要なパッケージのインストールに関しては割愛させていただきます。
[389 Directory Server Install Guide](http://directory.fedoraproject.org/docs/389ds/legacy/install-guide.html) や、対象プラットホームに対応したインストールガイドをご参照ください。

# 基本設定

通常、ソフトウエアパッケージをインストールしたのち、setup-ds-admin.pl により、ベースとなる LDAP インスタンスが１つ作成されます。その設定まで完了している所から説明を始めます。

レプリケーション用に２つインスタンスを作成します、ベースとなる LDAP インスタンスを利用しても良いのですが簡単に消したり作ったりできないので、レプリケーションのテスト専用として２つのインスタンスを作成します。インスタンスとしてServerAとBとでレプリケーションします。設定後の管理コンソールの表示は以下のようになります。

![create4.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/5e5fda67-3013-597d-dd0e-28f1cb940a0d.jpeg)

# 管理コンソールの起動

管理コンソールを起動するには、以下２つ必要です。
・ベースとなる LDAP インスタンスが動作していること
・LDAP 管理サーバが起動していること（多くは httpd プロセスで、デフォルトでは TCP/9830 ポートを利用）

```shell-session:RedHat7.4+389DirectoryServerの環境にて
# /usr/sbin/start-dirsrv
Starting instance "rhel74"
# /usr/sbin/start-ds-admin

簡易確認： 389 と 9830 の TCP ポートが Listen されています。
# netstat -an | grep tcp | grep -e 389 -e 9830
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:9830            0.0.0.0:*               LISTEN  

管理コンソール起動（製品名に依存して redhat-idm-console とか名前は変わります）
# /usr/bin/389-console 

```

User ID は、cn=Directory Manager、パスワードは setup-ds-admin.pl で設定したものでログインします。
※記憶によりますが User ID は、cn=Directory Manaegr,dc=example,dc=com の形式でも良かったような・・・また、単に admin ユーザでもログインできるはずです。

<img src=https://qiita-image-store.s3.amazonaws.com/0/246034/a264ec01-6013-2ee9-cf1f-6df09a1910e9.jpeg width=50%>

Server Group -> Create instance Of -> 389 Directory Server の順で選択します。

<img src=https://qiita-image-store.s3.amazonaws.com/0/246034/9720764a-493c-3ead-5d7f-e70daa5bd4bb.jpeg width=80%>

下記のウインドウが開きますので適当な名前で作成します、この場合 ServerA として TCP/10389 を指定しています。
![create2.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/29bed60d-1449-0f6d-c173-ff72ec1b8638.jpeg)
同様に ServerB tcp/20389 を作成します。
![create3.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/bd455c74-cc68-5856-355a-319f75b853ce.jpeg)


# レプリケーションの設定開始

**●Replication Manager アカウントの作成 (ServerA,B)**
レプリケーションのための通信は、サプライヤ -> コンシューマーの方向で接続されますが、この接続に利用するアカウントをコンシューマ側で作成しておく必要あがあります。そのアカウントとして "replication manager" を作成します。
※以下を多分コピペで OK なはず・・・

```shell
# ldapmodify -p 10389 -h localhost -D "cn=Directory Manager" -w パスワード
dn: cn=replication manager,cn=config
changetype: add
objectclass: top
objectclass: person
cn: Replication Manager
sn: Manager
userPassword: パスワード
#  CTRL +  D で終了。
ポート番号を変えて、同じ内容を ServerB にも設定します。
# ldapmodify -p 20389 -h localhost -D "cn=Directory Manager" -w パスワード
... 略 ...
```

**●changelog を有効にする (ServerA,B)**

なるべく考えなくて良いように番号を振ってみました。①をダブルクリックし、あとは順に設定します。
同じように、ServerB についても設定を行います。
![replication1.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/baa55320-5c4b-5748-33e5-88aef6f85d94.jpeg)

**●UserRootのデータベースのレプリカを有効にする (ServerA,B)**
⑤はユニークな番号なら良いので、TCP ポート番号と同じにしました。ServerA は 10389, ServerB は 20389。
⑥欄は、レプリケーションの設定開始の一番最初で作成したアカウントを指定します。"Add" ボタンを押すことで Current Supplier DNs のリストへ加わります。
![replication2.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/27545bbb-cac7-a7d1-2795-066ea86fd2ba.jpeg)

**レプリケーションアグリーメントの作成 (ServerA,B)**

![agreement1.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/294961d4-2154-eee6-9251-34bb9741e84e.jpeg)

新しい画面が開くので順に設定を行います。
![agreement3.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/3c765d8f-8852-d556-3f92-372fda091a1e.jpeg)
さらに続きます。
![agreement5.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/5fd24886-5469-768d-6e39-dc0ce0142c33.jpeg)

initialize consumer を選びます、つまりServerA の内容で ServerB をイニシャライズしますので ServerB のユーザーデータはなくなります。
レプリケーションする対象データベースは userRoot で、config じゃありませんから今まで設定したものが初期化されるわけではありません。

![agreement7.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/32e3a13e-87d2-54a0-08cf-42d6064df82e.jpeg)

成功すると以下のダイアログが表示されます。
![agreement8.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/c593395c-3403-5c35-306c-6f2d76545076.jpeg)

#動作確認
ServerA でユーザを作成し、それが Server B へもレプリケーションされているか確認してみます。
![check2.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/e14fc116-28f7-0442-a75e-97a73516cdd0.jpeg)

ServerB側で、View -> Refresh All としたのちに確認すると、正しく Server B へもレプリケーションされています。
![check3.jpg](https://qiita-image-store.s3.amazonaws.com/0/246034/6befef6d-9c6c-5627-d0dc-fb90c2dc6e03.jpeg)

**うまくいかない時は**
・Statusタブ -> Replication Status のエラーの有無などを確認してみてください。
・それぞれのサーバの errors ファイルにエラーが記録されていないかも確認ポイントです。
　389 Directory Server の場合 /var/log/dirsrv/slapd-サーバ名/errors です。

以上です、何かのお役に立ちましたら幸いです。