OpenDJ とは Sun Microsystems が OSS として開発していた OpenDS という LDAP サーバーを Oracle が買収後に「OSS やーめたっ」と発表したために ForgeRock が fork して開発を継続している Java 製の LDAP サーバーです。ForgeRock は OpenSSO についても OpenAM として開発を行なっています。 Sun が開発を行なっていたためか、日本語ローカライズがしっかりされています。LANG=ja_JP.UTF8 で作業すればほとんど日本語で表示されます。 OpenDJ は Multi-Master Replication の構成を組むことが可能です。 そして、LDAP エントリを操作するための GUI もついています。 ApacheDS も Multi-Master Replication 対応で Eclipse plugin の エントリ操作ツールApache Directory Studio が提供されてて便利ですね。
※2013-04-05追記 Apache Directory Studio は Eclipse プラグインじゃなくて単体アプリになってました。これだけでも使えます、便利です。Active Directory につないだりもできます。
Multi-Master なんていう甘い言葉は危険なかおリもしますが、LDAP はもともと更新頻度の低いデータベースなので危険度は低いのではないかと。実際には、ホットスタンバイとして使ってるわけですけど。 それでは、OpenDJ のセットアップを。
Install
まずは1台目のセットアップ (192.168.0.12) 最新版の OpenDJ-2.5.0-Xpress1.zip をダウンロードし、任意の場所で展開します。 そこで setup コマンドを実行すれば GUI のインストーラーが起動しますが、サーバーだとコマンドラインですね。--cli
をつけましょう。--no-prompt
を付けなければ指定しなかった項目は入力を求められます。
$ ./setup \
--cli \
--baseDN dc=example,dc=com \
--sampleData 10 \
--ldapPort 1389 \
--adminConnectorPort 4444 \
--rootUserDN cn=Directory\ Manager \
--rootUserPassword password \
--ldapsPort 1636 \
--generateSelfSignedCertificate \
--hostName ldap.example.com \
--no-prompt \
--noPropertiesFile
これで example.com ドメインの LDAP サーバーが構築できました。--sampleData 10
の指定により10個のサンプルユーザーデータが作成されています。root で実行しないので1000番台の port となっています。自己署名の SSL 付き。 bin/control-panel
で接続してみるとこんな感じ。
次に2台目のセットアップ (192.168.0.11)
$ ./setup \
--cli \
--baseDN dc=example,dc=com \
--ldapPort 1389 \
--adminConnectorPort 4444 \
--rootUserDN cn=Directory\ Manager \
--rootUserPassword password \
--ldapsPort 1636 \
--generateSelfSignedCertificate \
--hostName ldap.example.com \
--no-prompt \
--noPropertiesFile
今度はサンプルデータはなしでセットアップして、Replication で同期されることを確認します。
Replication Setup
1台目(192.168.0.12)と2台目(192.168.0.11)で Replication 構成を組むためのコマンドです。
$ bin/dsreplication \
enable \
--adminUID admin \
--adminPassword password \
--baseDN dc=example,dc=com \
--host1 192.168.0.12 \
--port1 4444 \
--bindDN1 "cn=Directory Manager" \
--bindPassword1 password \
--replicationPort1 8989 \
--host2 192.168.0.11 \
--port2 4444 \
--bindDN2 "cn=Directory Manager" \
--bindPassword2 password \
--replicationPort2 8989 \
--trustAll \
--no-prompt
これで 8989 ポートを使って Replication する設定が行われました。が、この状態ではまだデータは同期されていません。それぞれに control-panel で接続してみるとわかります。
Replication Initialize
1台目のデータを2台目にコピーすることでデータを初期化します。 --hostSource
と --hostDestination
を反対にしてしまわないように注意。
$ bin/dsreplication \
initialize \
--baseDN "dc=example,dc=com" \
--adminUID admin \
--adminPassword password \
--baseDN dc=example,dc=com \
--hostSource 192.168.0.12 \
--portSource 4444 \
--hostDestination 192.168.0.11 \
--portDestination 4444 \
--trustAll \
--no-prompt
これでおしまい。とっても簡単。それぞれ status
コマンドで確認してみましょう。
$ bin/dsreplication status \
--adminUID admin \
--adminPassword password \
--trustAll \
--hostname 192.168.0.12 \
--port 4444
$ bin/dsreplication status \
--adminUID admin \
--adminPassword password \
--trustAll \
--hostname 192.168.0.12 \
--port 4444
かれこれ2年ほどトラブルフリーで動作してます。バージョンはちょいと古いですが。 1台停止中にもう1台で更新されたデータは復帰後に自動で反映されます。
Replication をやめる
サーバーが壊れてしまって切り離したい場合とかで Replication をやめるためにはそれぞれのサーバーに接続して disable にします。
$ bin/dsreplication \
disable \
--disableAll \
--port 4444 \
--hostname 192.168.0.12 \
--bindDN "cn=Directory Manager" \
--adminPassword password \
--trustAll \
--no-prompt
$ bin/dsreplication \
disable \
--disableAll \
--port 4444 \
--hostname 192.168.0.11 \
--bindDN "cn=Directory Manager" \
--adminPassword password \
--trustAll \
--no-prompt
いじょー。 データのバックアップとかリストアとかの手順はまたそのうち。
つづきを書きました。