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

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

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

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

 システム管理者は、より投資効果の高いサービスを提供するため、適切にチューニングを行いソフトウェアをより効率よく動作させたい、あるいは、マシンの持つハードウェアリソースをより有効に活用させたいと思うことでしょう。

 今回からは、OpenLDAPサーバのパフォーマンスチューニングについて説明していきます。ここでは、OpenLDAPサーバのデフォルトのバックエンドデータベースである、Berkeley DBを採用した構成を想定してのチューニング方法を説明していきます。

Berkeley DBのバッファキャッシュ

 まずは、データベースのチューニングで大切な役割を果たすバッファキャッシュについて説明しましょう。

 このバッファキャッシュですが、例えばMySQL(InnoDBストレージエンジン)やPostgreSQLといったオープンソースのデータベース、またはほかの商用データベースであっても、代表的なチューニングポイントになります。これは、データを中心に扱うデータベースであればこそ、ファイル上に永続化されたデータやインデックスの取得に、低速なディスクI/Oを避け、より高速なメモリ上にデータ展開しておく設定が好まれるためです。

 ライブラリとしてプログラムに組み込まれるBerkeley DBであっても、独立したプロセスとして動作するデータベースと同様に、バッファキャッシュに頻繁に扱うデータを維持しておくことが可能です。具体的には、Berkeley DBの設定ファイルであるDB_CONFIGファイルにバッファキャッシュサイズを指定することで、OpenLDAPサーバの起動時に、エントリ、インデックスといったディレクトリ情報がキャッシュされる領域が設定されます。

図1 バッファキャッシュの役割 図1 バッファキャッシュの役割

バッファキャッシュの設定

 Berkeley DBのバッファキャッシュを適切にチューニングするには、OpenLDAPサーバに含まれるDB_CONFIG.exampleを、各バックエンドデータベースのディレクトリに「DB_CONFIG」としてコピーし、set_cachesizeディレクティブにてサイズを調整するといいでしょう。

# cd /usr/local/openldap-2.4.21/var/openldap-data
# cp -p DB_CONFIG.example DB_CONFIG
# vi DB_CONFIG

 set_cachesizeディレクティブの書式は以下のとおりです。空白で区切り、3つのパラメータを指定することができます。

[書式]
set_cachesize gbytes bytes ncache

        gbytes: ギガバイト単位でのキャッシュサイズ
        bytes: バイト単位でのキャッシュサイズ
        ncache: キャッシュ領域の数量

[設定例]
set_cachesize 2 524288000 3

 gbytesとbytesを合計した値がBerkeley DBのバッファキャッシュの総量となり、また、その値をncacheで割った値が、1つの領域当たりのバッファキャッシュのサイズとなります。上記の設定例では、論理的に2.5Gbytesのバッファキャッシュが用意され、物理的に3つの領域で構成されることになります。

 実際に、set_cachesizeディレクティブに設定するベストの値は、.bdbという拡張子が付くすべてのBerkeley DBファイルの合計サイズとなります。これは、OpenLDAPが利用する可能性のあるすべてのディレクトリ情報を、Berkeley DBのバッファキャッシュに載せてしまおうという考え方です。目安となる値は、あらかじめエントリがロードされ、インデックスが作成されている状態で、次のように求めることができます。

# cd /usr/local/openldap-2.4.21/var/openldap-data
# du -ch *.bdb

 set_cachesizeディレクティブを利用しない場合、デフォルトのバッファキャッシュは、256kbytesとなります。またBerkeley DBは、500Mbytes未満に設定されたバッファプールサイズに対し、自動的に25%を追加したサイズへ変更します。

 次のコマンド例では、Berkeley DBがバッファキャッシュ領域をメモリマップした__db.003ファイルにて、set_cachesizeディレクティブに設定した値と実際に設定される値の関係を確認しています。

# cd /usr/local/openldap-2.4.21

(既存Berkeley DB環境の削除)
# kill -INT `cat var/run/slapd.pid`
# rm -rf var/openldap-data/__db.00*


(新規Berkeley DB環境の設定)
# vi var/openldap-data/DB_CONFIG
...[略]...
set_cachesize 0 268435456 1
...[略]...

(新規Berkeley DB環境の作成と確認)
# ./libexec/slapd -u ldap
# lsof var/openldap-data/__db.003

COMMAND  PID USER  FD   TYPE DEVICE      SIZE    NODE NAME
slapd   3139 ldap mem    REG    8,1 335552512 2198066 var/openldap-data/__db.003


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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