環境
LDAP マスター (プロバイダ)
centos 6.4
openldap-2.4.23-32
LDAP スレーブ (コンシューマ)
centos 6.4
openldap-2.4.23-32
※プロバイダ、コンシューマはopenldap用語
LDAPレプリケーションの目的
LDAPが多くのシステムと連携し、重要なデータを扱うようになるとサーバが停止した場合の影響がお起きる。
LDAPサーバが停止してしまうと連携先のサーバへアクセスできなくなってしまうため、データの複製機能が実装されている。
レプリケーション機能の概要
opneldapは同期レプリケーションと呼ばれる複製方式をサポートしている。
LDAP contant Synchronization Protocol を使って、必要に応じて最新情報を複製する。全データを複製する処理と差分だけを複製する処理の両方をサポートしている。
データ更新方式
■refreshOnly
コンシューマは定期的にプロバイダに問い合わせを行いマス。必要があれば、データの複製が行われます。
■refreshAndPersistent
コンシューマはプロバイダと接続を維持使用とします。プロバイダが更新の必要性を判断し、必要に応じてコンシューマにデータを複製します。
※上記どちらも接続はコンシューマからプロバイダに対して行う。
コンシューマとプロバイダで管理しているデータに大きなずれが生じた場合には、すべてのデータが転送されます。
プロバイダの設定
cn=module,cn=configというエントリを作成し読み込むモジュールを定義する
# vi syncprov-module.ldif
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib/openldap olcModuleLoad: syncprov.la
# ldapadd -x -W -D cn=config -f syncprov-module.ldif
Enter LDAP Password: adding new entry "cn=module,cn=config"
データベースの設定エントリの配下にプロバイダ設定用のエントリを追加
# vi syncprov.ldif
dn: olcOverlay=syncprov,olcDatabase={2}bdb,cn=config objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpSessionLog: 100
# ldapadd -x -W -D cn=config -f syncprov.ldif
Enter LDAP Password: adding new entry "olcOverlay=syncprov,olcDatabase={2}bdb,cn=config"
コンシューマの設定
コンシューマ側では通常のLDAPサーバとしての設定を行った上でプロバイダへの接続方法、同期方法、複製するデータに関する設定を行う
dn: olcDatabase={2}bdb,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 # プロバイダへの接続情報 provider=ldap://192.168.122.80:389/ bindmethod=simple binddn="cn=Manager,dc=unix-power,dc=net" credentials=password # レプリケーションタイプ type=refreshAndPersist # レプリケーション間隔を指定。下記では5分。 interval=00:00:05:00 # LDAP検索に関する設定。scope=subでサブツリーを含める。 searchbase="dc=example,dc=com" scope=sub # リトライ間隔、リトライ回数、リトライ回数経過後の再リトライ開始までの時間、再リトライの回数 retry="60 10 300 3"
# ldapmodify -x -W -D cn=config -f syncrepl.ldif
Enter LDAP Password: modifying entry "olcDatabase={2}bdb,cn=config"
同期確認
プロバイダ側でデータを登録する。
vi test.ldif
dn: cn=test3,ou=system,dc=example,dc=com cn: test3 description: test3 objectclass: person objectclass: top sn: test3 userpassword: test3
# ldapadd -x -W -D cn=Manager,dc=example,dc=com -f test.ldif
Enter LDAP Password:
adding new entry "cn=test3,ou=system,dc=example,dc=com"
登録確認
# ldapsearch -x -LLL -D "cn=Manager,dc=example,dc=com" -W
・・・・ dn: cn=test3,ou=system,dc=example,dc=com cn: test3 description: test3 objectClass: person objectClass: top sn: test3 userPassword:: dGVzdDM=
コンシューマでデータ確認
# ldapsearch -x -LLL -D "cn=Manager,dc=example,dc=com" -W
・・・・ dn: cn=test3,ou=system,dc=example,dc=com cn: test3 description: test3 objectClass: person objectClass: top sn: test3 userPassword:: dGVzdDM=