連載
» 2010年06月21日 00時00分 公開

ビシッと決めるチューニング:しっかり基本編OpenLDAPによるディレクトリサーバ運用(5)(3/3 ページ)

[菊池研自,伊藤忠テクノソリューションズ株式会社]
前のページへ 1|2|3       

インデックスの作成

 特定のキー検索が頻繁に行われることが分かっている場合、該当の属性にインデックスを作成しておくことで、OpenLDAPサーバの動作を効率化させることができます。

 次のグラフは、OpenLDAPサーバでインデックスを利用しない検索と、インデックスを利用した検索を、CPUリソースの利用状況で比較したものです。インデックスを利用しない場合、いかにユーザー空間でのCPUリソースが多く消費されているかが分かります。

図5 インデックスの有無によるリソース利用状況の違い 図5 インデックスの有無によるリソース利用状況の違い

 作成するべきインデックスが不足していないかどうかの確認には、OpenLDAPサーバが出力するログファイルが有効です。loglevelディレクティブを0などに指定していない限り、インデックスが利用されていない旨を示すメッセージが出力されます。同じ属性に対し、同じタイプのインデックスが利用されていないというメッセージが頻繁に記録されている場合は、該当するインデックスを作成するとよいでしょう。

 次のログ出力例では、uid属性に対して行われた等価検索が、インデックスを利用できなかったことが示されています。

# cd /usr/local/openldap-2.4.21
# ./bin/ldapsearch -x -b "dc=my-domain,dc=com" uid=test1000


# tail -f /var/log/ldap.log
...[略]...
May 15 17:54:23 CentOS slapd[12115]: <= bdb_equality_candidates: (uid) not indexed

 インデックスの作成は簡単です。投入前のエントリに対しては、OpenLDAPサーバの設定ファイルであるslapd.confにindexディレクティブを指定しておくことで、エントリ投入時に該当するインデックスが作成されていきます。また既存エントリに対しては、slapd.confにindexディレクティブを指定した後、slapindexコマンドを実行することでインデックスを作成することができます。

# cd /usr/local/openldap-2.4.21
# kill -INT `cat var/run/slapd.pid`
# vi etc/openldap/slapd.conf

...[略]...
database        bdb
suffix          "dc=my-domain,dc=com"
...[略]...
index   uid             eq    ←等価インデックス
...[略]...

# ./sbin/slapindex -b dc=my-domain,dc=com uid
# chown ldap.ldap var/openldap-data/uid.bdb
# ./libexec/slapd -u ldap

ディスク書き込みがもたらす影響と非同期書き込み

 ご存じのとおり、コンピュータが行う処理の中で最も時間がかかるのは、ディスクへの書き込みです。通常、アプリケーションがデータを蓄積する媒体は、メモリまたはディスクのどちらかです。しかし、想定外の停止を余儀なくされた場合でも、確実にデータの整合性を保つよう考慮されているアプリケーションでは、メモリでなくディスクが選択され、ファイルへの書き込みとディスクへの同期が一連の処理として行われます。そしてまた、この一連の処理が性能を抑制する大きな要因でもあります。

 例えばデータベースサーバでは、更新データを真っ先に更新ログに書き込みます。そして、必ずといっていいほどディスクへの同期を行っています。またメールサーバでは、メールを受け取った後、それが中継に用いられているものでも、突然の停止でメールを失うことがないように書き込みとディスクへの同期を行っています。

 この、ファイルへの書き込みとディスクへの同期が一連の流れの中で行われる処理は、同期書き込みと呼ばれます。また、ファイルへの書き込みが行われた後、逐一ディスクへの同期を行わず、別のタイミングでまとめてディスクへの同期を行う方法は、非同期書き込みと呼ばれます。

 非同期書き込みでは、マシンやアプリケーションが想定外の停止をした場合、タイミングによってはデータの損失があり得ます。しかしながらそれと引き換えに、より時間のかかるディスクへの同期処理を抑制できることから、大幅なアプリケーション性能の向上が見込める処理方法でもあります。

管理用ログファイルの非同期書き込み

 さて、一般に参照処理の多いOpenLDAPサーバですが、チューニング方法としては、OpenLDAPサーバ自体の動作状況を記録するログファイルへの書き込みを非同期とする方法が好まれています。クライアントから受け取る更新データに対して信頼性の低い非同期書き込みを行うのではありません。失われて困るとしてもその影響が管理面だけに限られる管理用ログの扱いで性能を向上させるという考え方です。

 OpenLDAPサーバでは、管理上の利点から、認証(BIND)や検索(SEARCH)といった1つ1つの動作状況を記録することが推奨されています。またこれに加え、好ましくない問題も管理用ログファイルへと記録されます。このことから、一般的なデータベースと比較して参照処理が多いOpenLDAPサーバであっても、ログの非同期書き込みは有効なチューニングポイントとなります。

 ログの非同期書き込みの設定は、sendmailやPostfixがmailファシリティへ送付するログに対して行っている設定と同じです。OpenLDAPサーバは、デフォルトでLOCAL4ファシリティにログを送付していますので、/etc/syslog.confファイルにて、LOCAL4ファシリティの出力先ファイル名の直前に“-”(マイナス記号)を加えます。設定後は、忘れずにsyslogdを再起動しておきましょう。

# vi /etc/syslog.conf
…[略]…
# Log all the mail messages in one place.
mail.*                                                -/var/log/maillog
…[略]…
local4.*                                              -/var/log/ldap.log


# service syslog restart

まとめ

 ここまで、メモリ、インデックス、ディスクI/Oといった、データベースサーバやメールサーバなどにも共通する、アプリケーションの基本的なチューニング方法を説明してきました。基本的な内容ではありますが、実は、ハードウェア、ソフトウェアをより効率的に活用できることから、性能をグンと引き出せるチューニング項目でもあります。

 次回も引き続き、パフォーマンスチューニングを説明していきます。次回は、よりOpenLDAPサーバに特化した項目に焦点を当てていく予定です。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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