MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

コアテクノロジー部

ミラクル・リナックスのOS開発やサポートを担う、技術部の精鋭陣が交代で担当します。

ミラクル関連リンク

採用情報

サイト検索

2008年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

« LX-2010にMIRACLE LINUX V4.0をインストール | メイン | PRINしかも京ポン?でLinux »

OpenLDAPのindex

こんにちは。秋からミラクルに引っ越してきましたanaitoです。

今日は、OpenLDAPのチューニングについて書きたいと思います。まずは基本的なところからということでindexについて設定して行きたいと思います。(そもそもそんなに迷うほど設定項目は多く無いのですけどね)

OpenLDAPも最近ではMTA連携だったりSamba連携だったりと情報が溢れており導入ハードルも下がっているのではないでしょうか?しかし、自宅サーバにありがちな人の設定をコピ&ペーストではいざという時に困ったりするのでキチンと理解しつつindexを設定出来るように順に説明して行きたいと思います。

まずはログをファイルに出力するようにしましょう。標準出力に出してもいいのですが出力も多いのでファイルの方が追いやすいでしょう。
OpenLDAPはdefaultはファシリティlocal4を使いますので/etc/syslog.confに以下を追加します。

local4.* /var/log/ldap.log

※一応丁寧にファイルを作成して再起動

# touch /var/log/ldap.log; chown ldap:ldap /var/log/ldap.log
# service syslog restart

次にslapdのloglevelを設定します。/etc/openldap/slapd.confにloglevelディレクティブを追加します。デフォルトは256ですが「検索フィルタ処理」の32も出力させたいので

loglevel    288

とします。余談ですがパフォーマンスを考えた場合、最終的にはloglevel 0(ゼロ)とした方が良いですね。ログが出力されないので一番速いです。注意としてはコメントアウトはダメです。defaultの256が生きてしまいます。例えファイル出力しなくても負荷がありますので必ず明示的に指定して下さい。(あくまでパフォーマンス第一に考えた場合です。ログがなければ当然困ることもありますよん)

# service ldap restart

あとは自分が使いたいサービスを動かしてみてログからindex対象を拾います。

例えば

# ldapsearch -x -b "dc=example,dc=com"

あたりだと以下のようなログが出力されます。(※バックエンドDBによって違いがあります)

slapd[2416]: conn=0 op=1 SRCH base="dc=example,dc=com" scope=2 deref=0 filter="(objectClass=*)"
slapd[2416]:  AND
slapd[2416]:  DN SUBTREE
slapd[2416]:  OR
slapd[2416]:  EQUALITY
slapd[2416]:  PRESENT
slapd[2416]: => test_filter
slapd[2416]:     PRESENT
slapd[2416]: <= test_filter 6
- snip -
slapd[2416]: conn=0 op=1 SEARCH RESULT tag=101 err=0 nentries=18 text=

K&Rやった人にはなつかしいポーランド記法です。
そうするとアスタリスクを用いたフィルタはPRESENT(存在)で検索している事が分かります。その前のEQUALITYは暗黙的に(ObjectClass=NULL)のfilterが入っているため出力されています。(この辺りまでログ出力させるにはloglevel -1でどうぞ)つまり

(dc=example,dc=comのサブツリー検索) AND { (ObjectClass=NULL) OR (ObjectClass=*)}

ということで導き出されるindexは

index objectClass   pres,eq

ということになります。

次はauthconfigコマンドでユーザ認証にldapを追加するとsuなんかした時にこんなのが出てきます。

slapd[2416]: conn=2 op=1 SRCH base="dc=example,dc=com" scope=2 deref=0 filter="(&(objectClass=posixAccount)(uid=root))"
slapd[2416]:  AND
slapd[2416]:  DN SUBTREE
slapd[2416]:  OR
slapd[2416]:  EQUALITY
slapd[2416]:  AND
slapd[2416]:  EQUALITY
slapd[2416]:  EQUALITY
slapd[2416]: conn=2 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=

この場合、ORの後のEQUALITYは前回と同様でプラスその後ろということで

index objectClass, uid    eq

となります。

さらに、ThunderbirdのLDAPアドレス帳を使った場合を見てみましょう。

slapd[2344]: conn=5 op=1 SRCH base="ou=users,dc=example,dc=com" scope=2 deref=0 filter="(|(mail=*test*)(cn=*test*)(givenName=*test*)(sn=*test*))"
slapd[2344]:      AND
slapd[2344]:      DN SUBTREE
slapd[2344]:      OR
slapd[2344]:      EQUALITY
slapd[2344]:      OR
slapd[2344]:      SUBSTRINGS
slapd[2344]:      SUBSTRINGS
slapd[2344]:      SUBSTRINGS
slapd[2344]:      SUBSTRINGS
slapd[2344]: => test_filter
slapd[2344]:     OR
slapd[2344]: => test_filter_or
slapd[2344]: => test_filter
slapd[2344]:     SUBSTRINGS
slapd[2344]: begin test_substrings_filter
slapd[2344]: end test_substrings_filter 1
slapd[2344]: <= test_filter 5
slapd[2344]: => test_filter
- snip -
slapd[2344]: conn=5 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=

メールアドレスをtestで検索した場合4つの属性でSUBSTRINGS(部分文字列)検索をしていることがわかります。

この場合のindexは

index   mail, cn, givenName, surname    sub
index   objectClass                           eq

ということになります。

主立った3パターンを試してみましたが如何でしょうか?イメージ出来ましたでしょうか?

最後に・・・
パフォーマンスを考えれば使わないindexは張らない方が良いでしょう。indexは参照には有効ですが更新には足かせとなります。特にSUBSTRINGSはindexが大きくなりますので気をつけて下さい。あとは

index objectClass    eq

は指定した方が良いでしょうね。次はチューニング結果を試すためのツールなんかを紹介出来ればいいと思っています。

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/6603723

このページへのトラックバック一覧 OpenLDAPのindex:

コメント

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.