| 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台にこのエントリを登録しておきます。
| # 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
| 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ファイルにダンプすることができる。
| 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