Directory Server レプリカサーバの構築

今回はSunJava Directory Serverを使ってマルチマスター
レプリカサーバを構築します。
※手順はFedora Directory Serverでも同じはずです。

まず構築環境は以下の通り
※リソースの関係上今回は同じサーバ内で複数インスタンスを使って構築して
 いきますが基本的に別サーバであってもなんら変わりません。
 自分の環境にあわせて読み替えてください。

複製するsuffix:dc=test,dc=jp
管理サーバ:ポート390
・マスターサーバ2台
 マスターサーバ1:インスタンスsolaris102 ポート30162
 マスターサーバ2: インスタンスsolaris103 ポート21630

・コンシューマサーバ1台
 コンシューマ:インスタンスsolaris104 ポート13418

※ポート番号は特に意味はありません。通常は各サーバで389であがっているはず。

早速構築していきます。


図1.構成                            画像出展sunmicrosystems

まず図のM(Master)2台を構築していきます。

●管理コンソールの起動
# export DISPLAY=192.168.0.100:0.0
# /var/Sun/mps/startconsole
管理ツールはxで起動するのでどこかに飛ばす場合は
DISPLAY変数は変更します。

cn=directory manager
adminpassword

でログインした後は以下の手順どおりにマスターサーバを構築していきます。
コマンドラインでは現在行うことができません。

■マスターサーバ2台の設定
1.マスターサーバ1のインスタンス作成


2.インスタンスの情報を入力します。


3.了解ボタンを押すと以下のようにインスタンスが作成される


4.マスターサーバ1.のインスタンスが作成される


5.マスターサーバ2のインスタンスも同じ要領で作成する

6.コンシューマインスタンスも同じ要領で作成する


7.マスターサーバ1のインスタンスをダブルクリックし「設定タブ」をクリック
 データの中を展開していきレプリケーションまで開きます。


8.「レプリケーションを有効に…」ボタンをクリック後のdialogでマスターレプリカを選択


9.IDを割り当てる。このIDは必ずユニークにします。他のマスターサーバとも別のIDにします。


10.レプリケーソン情報を記録するchangelogdbディレクトリを指定(デフォルトでOK)


11.レプリケーション用ユーザのパスワード設定


12.最後に閉じる


13.この画面に戻ってきたらレプリカIDが設定されていることが確認できる


14.マスターサーバ2を構築していきます。2つ目のインスタンスをダブルクリックし「設定」タブを開く


15.前述と同じ要領でマスターサーバ2のIDを割り当てる。2つ目なので2を割り当てた。


16.changelogdbディレクトリの指定(デフォルトでOK)


17.最後に閉じるを押し2つ目のマスターサーバのレプリカを完了させる。


18.マスターサーバ2がID2で設定されたことが確認できる


19.マスターサーバ1のインスタンスの「設定」タブでレプリケーションアグリメントを新規に作成


20.「更新の送信先」にマスターサーバ2を選択
  「パスワード」に手順11で作成したマスターサーバ2のレプリケーションマネージャで
  指定したパスワードを入力
  ※もし選択に入っていない場合は「その他」ボタンを押して
    追加するサーバの情報を手動で入力します


21.「はい」をクリック


22.「了解」をクリック


23.新しくレプリケーションアグリメントが追加されたことを確認


24.マスターサーバ2のインスタンスでも同じ要領で新規にレプリケーションアグリメントを作成していきます


25.「更新の送信先」にマスターサーバ1のインスタンスを選択
  ※もし選択に入っていない場合は「その他」ボタンを押して
    追加するサーバの情報を手動で入力します


26.「はい」をクリック


27.「了解」をクリック


28.マスターサーバ2にマスターサーバ1がレプリケーションアグリメントとして追加されたことを確認


29.複製するデータを持っているサーバ(今回はインスタンス2)からリモートレプリカの初期化をします


30.「はい」をクリック


31.初期化をすると下図のようになります


32.同期が完了してマスターサーバ1とマスターサーバ2が同じデータを持った状態


以上でマルチマスターの2台は完了です。

次にコンシューマサーバの設定をしていきます。

■コンシューマサーバの設定

1.コンシューマインスタンスをダブルクリックし「設定」タブを開き、レプリケーションを有効にします


2.コンシューマレプリカを選択します


3.レプリケーションマネージャのパスワードの設定をします


4.「閉じる」をクリックし終了します

↓となります。


実際のコンシューマの設定は以上で終了です

5.次はマスターサーバにコンシューマサーバをレプリケーショングリメントに登録していきます
  マスターサーバ1のインスタンスで作業していく必要があるので
  マスターサーバ1のインスタンスをダブルクリックし「設定タブ」を開きます


6.更新の送信先にコンシューマサーバを指定します


7.「はい」をクリック


8.「了解」をクリック


9.コンシューマサーバがマスターサーバ1のレプリケーションアグリメントに追加されたことを確認
 そしてコンシューマ1からコンシューマサーバを初期化します。

 コンシューマサーバを選択し、「アクション」→「リモートレプリカを初期化」を選択


10.「はい」をクリック


11.初期化中


12.マスターサーバ2からも同じ要領でコンシューマをレプリケーションアグリメントに追加していきます


13.更新の送信先にコンシューマを指定します


14.「はい」をクリック


15.「了解」をクリック


以上で2台のマルチマスターサーバと1台のコンシューマサーバの構築は完了です。


■レプリカの動作確認

まずマスターサーバ1台にこのエントリを登録しておきます。

---test.ldifファイル---
# people, test.jp
dn: ou=people,dc=test,dc=jp
ou: people
objectClass: top
objectClass: organizationalunit

# TSuzuki, people, test.jp
dn: uid=TSuzuki,ou=people,dc=test,dc=jp
mail: suzuki@test.jp
uid: TSuzuki
givenName: Taro
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
sn: Suzuki
cn: Taro Suzuki

# ldapadd -x -D "cn=directory manager" -w adminpass -f test.ldif

登録したら

# ldapsearch -x -D "cn=directory manager" -w adminpass -b "cn=people,dc=test,dc=jp"
で確認しておきましょう。


■データが登録されたかどうか確認
・マスターサーバ1
# ldapsearch -x -h ldapserver -p 21630 -D "cn=directory manager" -b "ou=people,dc=test,dc=jp"

・マスターサーバ2
# ldapsearch -x -h ldapserver -p 30162 -D "cn=directory manager" -b "ou=people,dc=test,dc=jp"

・コンシューマサーバ
# ldapsearch -x -h ldapserver -p 13418 -D "cn=directory manager" -b "ou=people,dc=test,dc=jp"

すべて同じデータが引けるかどうか確認します。

当然全て同じデータで引けているはず。

■changelogdbの確認

changelogdbはbdb形式で保存されていくので
catやmoreでは見れません。
直接みたい場合は
# db_dump -p dc_test_dc_jp445194ac000000010000.db3

のようにしても見れるがかなりにくい。

実際には

# ldapmodify -x -h ldapserver -p 30162 -D "cn=directory manager" -f dump.ldif -w adminpass

---dump.ldif---
dn: cn=replica, cn="dc=test,dc=jp",cn=mapping tree,cn=config
changetype: modify
replace:nsds5Task
nsDS5Task: CL2LDIF

dump.ldifの書式は

 dn: ch=replica, cn=<suffix>,cn=mapping tree,cn=config
 changetype: modify
 replace:nsds5Task
 nsDS5Task: CL2LDIF

となる。<suffix>を自分が設定しているsuffixにしてみてください。

とすることで
34b5e983-d66c11da-8079f69c-5b8436fb.ldif
のようにldifファイルにダンプすることができる。

---ダンプした34b5e983-d66c11da-8079f69c-5b8436fb.ldifファイル---
changetype: add
replgen: 445194ac000000010000
csn: 445571f3000000010000
nsuniqueid: d9793681-d8b911da-8079f69c-5b8436fb
parentuniqueid: 41394282-d66a11da-8079f69c-5b8436fb
dn: ou=people,cn=Directory Administrators, dc=test,dc=jp
change:: YWRkOiBvdQpvdTogcGVvcGxlCi0KYWRkOiBvYmplY3RDbGFzcwpvYmplY3RDbGFzczog
dG9wCm9iamVjdENsYXNzOiBvcmdhbml6YXRpb25hbHVuaXQKLQphZGQ6IGNyZWF0b3JzTmFtZQpj
cmVhdG9yc05hbWU6IGNuPWRpcmVjdG9yeSBtYW5hZ2VyCi0KYWRkOiBtb2RpZmllcnNOYW1lCm1v
ZGlmaWVyc05hbWU6IGNuPWRpcmVjdG9yeSBtYW5hZ2VyCi0KYWRkOiBjcmVhdGVUaW1lc3RhbXAK
Y3JlYXRlVGltZXN0YW1wOiAyMDA2MDUwMTAyMjY1OVoKLQphZGQ6IG1vZGlmeVRpbWVzdGFtcApt
b2RpZnlUaW1lc3RhbXA6IDIwMDYwNTAxMDIyNjU5WgotCmFkZDogbnNVbmlxdWVJZApuc1VuaXF1
ZUlkOiBkOTc5MzY4MS1kOGI5MTFkYS04MDc5ZjY5Yy01Yjg0MzZmYgotCmFkZDogcGFyZW50aWQK
cGFyZW50aWQ6IDIKLQphZGQ6IGVudHJ5aWQKZW50cnlpZDogNAotCmFkZDogZW50cnlkbgplbnRy
eWRuOiBvdT1wZW9wbGUsY249ZGlyZWN0b3J5IGFkbWluaXN0cmF0b3JzLGRjPXRlc3QsZGM9anAK
LQo=

changetype: delete
replgen: 445194ac000000010000
csn: 4455722a000000010000
nsuniqueid: d9793681-d8b911da-8079f69c-5b8436fb
dn: ou=people,cn=directory administrators,dc=test,dc=jp
parentuniqueid: 41394282-d66a11da-8079f69c-5b8436fb

changetype: add
replgen: 445194ac000000010000
csn: 44557235000000010000
nsuniqueid: fd3c7c82-d8b911da-8079f69c-5b8436fb
parentuniqueid: 41394281-d66a11da-8079f69c-5b8436fb
dn: ou=people,dc=test,dc=jp
change:: YWRkOiBvdQpvdTogcGVvcGxlCi0KYWRkOiBvYmplY3RDbGFzcwpvYmplY3RDbGFzczog
dG9wCm9iamVjdENsYXNzOiBvcmdhbml6YXRpb25hbHVuaXQKLQphZGQ6IGNyZWF0b3JzTmFtZQpj
cmVhdG9yc05hbWU6IGNuPWRpcmVjdG9yeSBtYW5hZ2VyCi0KYWRkOiBtb2RpZmllcnNOYW1lCm1v
ZGlmaWVyc05hbWU6IGNuPWRpcmVjdG9yeSBtYW5hZ2VyCi0KYWRkOiBjcmVhdGVUaW1lc3RhbXAK
Y3JlYXRlVGltZXN0YW1wOiAyMDA2MDUwMTAyMjgwNVoKLQphZGQ6IG1vZGlmeVRpbWVzdGFtcApt
b2RpZnlUaW1lc3RhbXA6IDIwMDYwNTAxMDIyODA1WgotCmFkZDogbnNVbmlxdWVJZApuc1VuaXF1
ZUlkOiBmZDNjN2M4Mi1kOGI5MTFkYS04MDc5ZjY5Yy01Yjg0MzZmYgotCmFkZDogcGFyZW50aWQK
cGFyZW50aWQ6IDEKLQphZGQ6IGVudHJ5aWQKZW50cnlpZDogNQotCmFkZDogZW50cnlkbgplbnRy
eWRuOiBvdT1wZW9wbGUsZGM9dGVzdCxkYz1qcAotCg==

    ・
    ・
    ・
    ・

のようになる。
このログファイルを元にマスターからコンシューマにデータを更新する。
change内容はbase64でエンコードされてるだけなんでデコードすれば見れます。

・エン/デコードしてくれるサイト
http://www.akiyan.com/cc_base64_encode_and_decode

・エン/デコードするソフト
http://www.vector.co.jp/soft/win95/util/se139646.html

・MIME::Base64などperlのモジュールを使う
http://perldoc.jp/docs/modules/MIME-Base64-2.12/Base64.pod