連載
» 2009年05月01日 00時00分 公開

OpenLDAPで始めるディレクトリサーバ構築(5):レプリケーションで冗長構成 (1/3)

ユーザー情報や組織情報などを一元的に管理するディレクトリサーバは、企業システムの中で重要な役割を果たしています。この連載ではオープンソースの「OpenLDAP」を用いて、ディレクトリサーバの構築・活用方法を解説します。(編集部)

[菊池研自,伊藤忠テクノソリューションズ株式会社]

 いよいよ連載最終回となった今回は、LDAPクライアントからの負荷を分散しディレクトリデータの冗長性を高めるレプリケーションを構築していきます。マスタサーバ‐スレーブサーバ間の経路が安全でない場合は、レプリケーション対象のディレクトリデータのすべてにアクセス可能なレプリケーションユーザーの取り扱いに注意して設定を行うとよいでしょう。

レプリケーション方式の選択

 OpenLDAPのレプリケーション機能の実装には、slurpdという専用のデーモンプログラムを利用しマスタサーバから変更情報をスレーブサーバへ送付する方式と、overlay機能で提供されるsyncprovモジュールを利用してスレーブサーバからマスタサーバを検索して変更情報を取得する方式の2つが存在します。

 slurpdは、OpenLDAP 2.4以降はsyncprovモジュールに置き換えられ提供されていないプログラムです。ただし、本連載で対象とするCentOS 5.2に含まれるOpenLDAP 2.3.27では、従来どおりこのプログラムが利用可能です。

# rpm -ql openldap-servers | grep slurpd
/usr/sbin/slurpd
/usr/share/man/man8/slurpd.8.gz

 また、もう1つのレプリケーション実装であるsyncprovモジュールも、CentOS 5.2に含まれるOpenLDAP 2.3.27で利用することができます。このモジュールの存在はmonitorデータベースを利用して確認できます。

# vi /etc/openldap/slapd.conf
……[略]……
database     monitor
access to dn.subtree="cn=Monitor"
by dn.exact="cn=monitor" read
rootdn      "cn=monitor"
rootpw      secret

# service ldap restart
# ldapsearch -x -D cn=monitor -w secret -b cn=Overlays,cn=Monitor + -LLL

……[略]……
monitoredInfo: glue
monitoredInfo: syncprov
monitoredInfo: chain

 このように、CentOS 5.2にバンドルされるopenldap-serversでは2つのレプリケーション方式を選択できます。ただし、データの不整合が起きやすいためOpenLDAP 2.4以降ではslurpdプログラムが提供されていないことや、slurpdプログラムのアーキテクチャ上、レプリケーション構築の過程で一度マスタサーバを停止し、更新が行われないデータの静止点を設ける必要があるなどの理由から、今後はsyncprovモジュールを選択する機会が多くなるでしょう。

 このことから、本記事ではsyncprovモジュールを利用したレプリケーションについて説明していきます。

レプリケーション構成概要

 それでは早速、syncprovモジュールを利用したレプリケーションを構成していきます。今回は、マスタサーバのIPアドレスを「192.168.1.10」、スレーブサーバのIPアドレスを「192.168.1.20」として、動作モードには同期的なレプリケーションを行う「refreshAndPersist」を採用します。

 また、レプリケーションの対象とするデータは「dc=my-domain,dc=com」データベース以下すべてとし、レプリケーションユーザーのDNは「cn=repl,dc=my-domain,dc=com」を利用します。レプリケーションユーザーはレプリケーションの対象となるディレクトリデータすべてにアクセス可能としますので、今回はSASL DIGEST-MD5を用いて、レプリケーションユーザーの認証情報を保護します。

図1 レプリケーション構成概要 図1 レプリケーション構成概要

マスタサーバの設定

 まずは、マスタサーバ上にレプリケーションユーザー「repl」を作成します。

[root@master]# saslpasswd2 -c -u my-domain.com repl
Password:password
Again (for verification):password
[root@master]# sasldblistusers2
repl@my-domain.com: userPassword
[root@master]# chgrp ldap /etc/sasldb2

[root@master]# vi repl.ldif
dn: cn=repl,dc=my-domain,dc=com
objectClass: Person
cn: repl
sn: repl
[root@master]# ldapadd -x -D cn=Manager,dc=my-domain,dc=com -w secret -f repl.ldif

 続いて、マスタサーバのslapd.confを編集していきます。slapd.confのグローバルセクションで、「authz-regexp」ディレクティブを用いてレプリケーションユーザーとしてスレーブサーバから検索を行うSASLデータベース上の「repl」ユーザーを、OpenLDAPで利用するDN「cn=repl,dc=my-domain,dc=com」へ変換します。そして「access to」ディレクティブを用いて、そのDNに「dc=my-domain,dc=com」ディレクトリデータベースの検索を許可します。

[root@master]# vi /etc/openldap/slapd.conf
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
……[略]……
sasl-realm    my-domain.com
sasl-host     localhost
authz-regexp
        uid=([^,]*),cn=my-domain.com,cn=DIGEST-MD5,cn=auth
        cn=$1,dc=my-domain,dc=com

……[略]……
access to dn.subtree="ou=People,dc=my-domain,dc=com" attrs=shadowLastChange
  by dn.exact="cn=repl,dc=my-domain,dc=com" read
  by self write
  by * read

access to dn.regex=".*,ou=(People|Group),dc=my-domain,dc=com$" attrs=userPassword
  by dn.exact="cn=repl,dc=my-domain,dc=com" read
  by self write
  by anonymous auth

access to dn.subtree="dc=my-domain,dc=com"
  by * read

 さらに、slapd.confの「dc=my-domain,dc=com」データベースセクションには、「overlay syncprov」「syncprov-checkpoint」「syncprov-sessionlog」を追加し、syncprovモジュールを利用する旨と、「index」ディレクティブを追加しスレーブサーバからの検索に適したインデックスを追加します。

[root@master]# vi /etc/openldap/slapd.conf
……[略]……
database        bdb
suffix          "dc=my-domain,dc=com"
rootdn          "cn=Manager,dc=my-domain,dc=com"
rootpw          secret
directory       /var/lib/ldap

overlay syncprov                                  ←syncprovモジュールを利用
syncprov-checkpoint 100 10                      ←チェックポイントのタイミング
syncprov-sessionlog 100                          ←セッションログを利用

index objectClass                     eq,pres
index ou,cn,mail,surname,givenname    eq,pres,sub
index uidNumber,gidNumber,loginShell  eq,pres
index uid,memberUid                   eq,pres,sub
index entryCSN,entryUUID        eq            ←複製処理にインデックスを利用

 slapd.confの編集後は、既存エントリのインデックスを再構築し、マスタサーバを再起動します。

[root@master]# service ldap stop

[root@master]# slapindex

[root@master]# chown -R ldap.ldap /var/lib/ldap

[root@master]# service ldap start

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。