UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS6 OpenLDAPのレプリケーション




■LDAPサーバ間でのデータ同期 ( SYNCレプリケーション )

OpenLDAPは複数のLDAPサーバの間でデータの同期をとる機能をサポートしています。この機能を使うとLDAPサーバを使うとLDAPサーバが突然停止してしまったときに他のLDAPサーバで処理を継続したり、大規模なシステムで1台のLDAPサーバに処理が集中することを防ぐことができます。この機能をSYNCレプリケーションと呼びます。

SYNCレプリケーションでは必要に応じてその時点の最新データをLDAP Content Synchronizationというプロトコルを利用して複製します。SYNCレプリケーションではデータを保持しているサーバをプロバイダ、複製を受けるサーバをコンシューマと呼びます。


■SYNCレプリケーションのタイプ

SYNCレプリケーションではrefreshOnlyとrefreshAndPersistの2つのレプリケーションのタイプがあります。どちらのレプリケーションタイプでもプロバイダとコンシューマは互いにsid、ridという識別番号を持ちます。またコンシューマの状態を示すcookieと呼ばれる値をプロバイダとコンシューマが持っています。この3つの値を使ってレプリケーションの状態が管理されます。

refreshOnlyではコンシューマは定期的にプロバイダへポーリングを行います。プロバイダは同期処理が完了すると次の同期処理のためのcookieをコンシューマに渡し、コンシューマが次の同期処理を行うまでの間の変更の履歴をこのcookieに基づいたセッションログとして管理します。コンシューマから次のポーリングではこのcookieの値に基づき前の同期からの変更データが転送されます。セッションログに更新データが保管しきれなかった場合やセッションログに保管されていないデータの更新が必要になった場合には全てのデータが転送されます。

refreshAndPersistでは基本的な同期処理の方法はrefreshOnlyと同様ですが同期処理が完了してもコンシューマとプロバイダとの接続は切断されません。コンシューマ側の同期処理と同期処理の間にプロバイダがコンシューマの状態を更新スべきと判断するとプロバイダからコンシューマに更新情報メッセージが送信される場合があります。もしプロバイダとコンシューマの間に接続が切断されるとコンシューマは次の同期処理のタイミングで再接続します。


■レプリケーションの設定 ( プロバイダ )

プロバイダではSYNCレプリケーションを管理するモジュールsyncprovを読み込む必要があります。モジュールの読み込みを行うにはcn=module,cn=configというエントリを作成し読み込むモジュールを定義する必要があります。以下はそのLDIF例です。

# vi syncprov-module.ldif

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/openldap
olcModuleLoad: syncprov.la


このLDIFファイルをldapaddコマンドで適用します。

# ldapadd -x -W -D cn=config -f syncprov-module.ldif
Enter LDAP Password:
adding new entry "cn=module,cn=config"


レプリケーションを行うデータベースに対してプロバイダの設定を行います。該当のデータベースの設定エントリの配下にプロバイダ設定用のエントリを追加します。次はユーザ管理用データーベースにプロバイダの設定を行うためにエントリを作成するLDIFファイルの例です。

# vi syncprov.ldif

dn: olcOverlay=syncprov,olcDatabase={2}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100


olcOverlayConfigはデータベースに対してSYNCプロバイダのオーバレイを有効にすることを意味します。olcSpSessionLogはSYNCプロバイダのオーバレイ設定パラメータで属性値はセッションログの最大保存数です。同様にldapaddコマンドでこのエントリを作成するとSYNCプロバイダとしての設定が完了します。


# ldapadd -x -W -D cn=config -f syncprov.ldif
Enter LDAP Password:
adding new entry "olcOverlay=syncprov,olcDatabase={2}bdb,cn=config"


■レプリケーションの設定 ( コンシューマ )

コンシューマ側では通常のLDAPサーバとしての設定を行った上でプロバイダへの接続方法、同期方法、複製するデータに関する設定を行う必要があります。以下はそのLDIFファイルです。

# vi syncrepl.ldif

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcSyncRepl
# 識別番号を指定する
olcSyncRepl: rid=001
  # プロバイダへの接続情報を定義
  provider=ldap://192.168.12.20: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=unix-power,dc=net"
  filter=(|(objectClass=organization)(objectClass=organizationalRole)
           (objectClass=organizationalUnit)(objectClass=posixAccount))
  scope=sub
  # リトライ間隔、リトライ回数、リトライ回数経過後の再リトライ開始までの時間、
  # 再リトライの回数
  retry="60 10 300 3"


上記LDIFファイルを適用することでコンシューマ側の設定変更も完了です。

# ldapmodify -x -W -D cn=config -f syncrepol.ldif
Enter LDAP Password:
modifying entry "olcDatabase={2}bdb,cn=config"



■OpenLDAPのバックアップ


上記のレプリケーションを設定し冗長化を行ったと言えどバックアップは取得しておきたいところです。

OpenLDAPのデータファイルは/var/lib/ldapです。また、設定ファイルは/etc/openldap/slap.d/cn=configです。OSレベルでこの領域をバックアップしても良いのですがOpenLDAPでバックアップコマンドが提供されているのでこちらを使用します。ただし、この方法はOpenLDAPのデータの実体のみのバックアップなので/etc/openldap/slap.d/cn=configは別途バックアップしておく必要があります。実際のバックアップコマンドは下記のようになります。


# slapcat -l backup.ldif


/root/backup.ldifには以下のような内容で作成されています。


# more backup.ldif

dn: dc=unix-power,dc=net
objectClass: dcObject
objectClass: organization
o: VIRTUAL CORPORATION
dc: unix-power
structuralObjectClass: organization
entryUUID: 9c06f28a-e5f5-1031-9b33-a71948dce7c2
creatorsName: cn=Manager,dc=unix-power,dc=net
createTimestamp: 20121229112118Z
entryCSN: 20121229112118.127129Z#000000#000#000000
modifiersName: cn=Manager,dc=unix-power,dc=net
modifyTimestamp: 20121229112118Z
<省略>


バックアップは正常にとれているものの、このコマンドを実行した際にはThe first database does not allow slapcat; using the first available one (2)というwarning?らしきものが吐かれます。これが動作に影響があるのかないのかは調査中です。



■OpenLDAPのリストア


OpenLDAPをリストアします。リストアの動作確認のため現状のデータを丸ごと削除します。


# rm -rf /var/lib/ldap/*


リストアを行うにはslapdを停止した上でslapaddコマンドを実施します。DB_CONFIGは全く編集していない状態なのでデフォルトのものをそのままコピーしています。


# /etc/rc.d/init.d/slapd stop
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# slapadd -l /root/backup.ldif

The first database does not allow slapadd; using the first available one (2)
_#################### 100.00% eta   none elapsed            none fast!
Closing DB...

# chown -R ldap.ldap /var/lib/ldap/*
# /etc/rc.d/init.d/slapd start


これで正常にリストアが完了しました。




 

 関連記事
 OpenLDAPのTLS対応設定
 OpenLDAPのスキーマ管理
 OpenLDAPのレプリケーション設定
 OpenLDAPのチューニング
 OpenLDAPにLinuxアカウントを統合
 OpenLDAPのインストールと基本設定
 Apache Directory Studioの導入
 ActiveDirectory+Linuxで統合アカウント
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.