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

 
 Top - Linux - CentOS6 OpenLDAPのチューニング




■OpenLDAPのチューニング

LDAPサーバはデータベースの一種です。データの格納方法についてはさほど柔軟ではありませんが、それでもデータの管理方法によって性能は大きく変わります。性能を良くするためのその一つの手法としてデータベースが管理する索引 ( index ) を設定することができます。索引を設定しておくことで検索を高速化させることができますので、頻繁に検索する属性については必ず索引を設定することをお勧めします。

インデックスの設定はデータベースの管理エントリにolcDbIndexという属性で設定されていますので次のようにして参照します。


# ldapsearch -x -LLL -W -D cn=config -b olcDatabase={2}bdb,cn=config olcDbIndex
Enter LDAP Password:
dn: olcDatabase={2}bdb,cn=config
olcDbIndex: objectClass pres,eq
olcDbIndex: cn pres,eq,sub
olcDbIndex: uid pres,eq,sub
olcDbIndex: uidNumber pres,eq
olcDbIndex: gidNumber pres,eq
olcDbIndex: ou pres,eq,sub
olcDbIndex: loginShell pres,eq
olcDbIndex: mail pres,eq,sub
olcDbIndex: sn pres,eq,sub
olcDbIndex: givenName pres,eq,sub
olcDbIndex: memberUid pres,eq,sub
olcDbIndex: nisMapName pres,eq,sub
olcDbIndex: nisMapEntry pres,eq,sub


olcDbIndex属性には次のような書式で属性値が設定されています。

olcDbIndex: <attrlist> <type>


<attrlist>には索引の設定を行う属性を設定します。コンマ区切りで複数の属性を指定することができます。<type>には索引のタイプを指定します。これもコンマ区切りで複数のタイプを指定出来ます。指定できる索引タイプは以下の通りです。

タイプ  説明 
pres  存在検索 ( データの存在そのものの検索 ) に適した索引とする 
eq  等価検索 ( 文字列や数値の完全一致 ) に適した索引とする 
approx  近似検索に適した索引とする 
sub  部分文字列一致検索に適した索引とする 
none  インデックスを作成しないことを明示的に指定する。 


<type>は省略することができますが、その場合には別の標準的なタイプの指定を行なっておくことが必要です。標準的なタイプの指定は<attrlist>にdefaultを指定して記述します。

標準設定の項目では非常に多くのindexを指定していますがindexが多いとエントリを登録する速度が低下します。したがってLDAPを使って検索する対象に合わせて不要な項目は削除するようにしてください。Linuxアカウント管理を行うためだけであればobjectClass, ou, cnとユーザ、グループに関する基本的な属性のみでOKです。

逆にメールサーバなどの別のサービスからLDAPサーバを参照する場合には該当サービスのメールサーバの設定に合わせて頻繁に参照する属性に適切にindexを追加することでサーバを高速化できます。

またSYNCレプリケーションサーバではコンシューマとプロバイダの間のエントリの管理のためにentryCSN, entryUUIDの2つの属性を使用します。そのためこれらのインデックスを作成するとサーバの負荷を軽減し高速に処理を行うことができます。

以下はindex設定変更を行うためのLDIFファイルです。

# vi index.ldif

dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcDbIndex
olcDbIndex: objectClass eq,pres
olcDbIndex: ou eq,pres,sub
olcDbIndex: cn eq,pres,sub
olcDbIndex: uidNumber eq,pres
olcDbIndex: gidNumber eq,pres
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq


そして上記LDIFをLDAPに適用します。


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


■パラメータ調整

LDAPサーバの使用する内部データーベースのパラメータを適切に設定することでサーバの処理を高速化することができる場合があります。ここではデータベース関連の設定について記載します。なお、パラメータは該当データベースの設定エントリ ( olcDatabase={2}bdb,cn=config ) の属性として設定します。

・キャッシュサイズ


olcDbCacheSize: <integer>


データベースからメモリ内にキャッシュしておくエントリの数を設定します。デフォルトは1000です。登録エントリの数に合わせてこの値を変更することでディスクアクセスを減らし処理を高速化できます。

・インデックスキャッシュサイズ


olcDbIDLcacheSize: <integer>

データーベースからメモリ内にキャッシュしておくインデックスの数を設定します。デフォルトでは0になっておりメモリ内にもキャッシュされません。この値を大きくすると検索性能の向上が期待できます。


・トランザクションログの書き込み頻度

olcDbCheckpoint: <kbyte> <min>


データーベーストランザクションのチェックポイントをいつにするか指定します。チェックポイント処理ではデータベースバッファをディスクに書き込んだりログを吐き出したりする処理を行います。引数で指定した<kbyte>だけデータが変更されるか、<min>で指定した分数が経過すると処理が実行されます。この値が大きいほどディスクへの書き込みがヘリ性能が向上しますが、障害時にデータが失われる可能性が高くなります。デフォルトでは1024kbyte, 15分に設定されています。

■バークレーDBパラメータの設定 ( DB_CONFIG )

OpenLDAPではデータベースのチューニングのためバークレーDBのデータベース環境設定ファイルを設置することでバークレーDBの環境パラメータを設定することができます。slapdは起動時に設定ファイルのDirectoryで設定されているディレクトリにDB_CONFIGファイルがあるかどうかを確認し、存在すればその設定を行います。ここではそのうち有用なものを記載致します。

set_cachesize <gbytes> <bytes> <ncache>


set_cachesizeではバークレーDBの内部キャッシュサイズを設定します。キャッシュの大きさは<gbytes>と<byte>の合計値です。またキャッシュは<ncache>で指定した数に分割して管理されます。現在の設定状態は次のようにdb_statコマンドで調べることができます。

# cd /var/lib/ldap
# db_stat -m

320MB 1KB 752B  Total cache size
1       Number of caches
1       Maximum number of caches
320MB 8KB       Pool individual cache size
0       Maximum memory-mapped file size
0       Maximum open file descriptors
0       Maximum sequential buffer writes
0       Sleep after writing maximum sequential buffers
0       Requested pages mapped into the process' address space
334     Requested pages found in the cache (95%)
14      Requested pages not found in the cache
0       Pages created in the cache
14      Pages read into the cache
8       Pages written from the cache to the backing file
0       Clean pages forced from the cache
0       Dirty pages forced from the cache
0       Dirty pages written by trickle-sync thread
14      Current total page count
14      Current clean page count
0       Current dirty page count
32771   Number of hash buckets used for page location
362     Total number of times hash chains searched for a page
1       The longest hash chain searched for a page
334     Total number of hash chain entries checked for page
0       The number of hash bucket locks that required waiting (0%)
0       The maximum number of times any hash bucket lock was waited for (0%)
0       The number of region locks that required waiting (0%)
0       The number of buffers frozen
0       The number of buffers thawed
0       The number of frozen buffers freed
49      The number of page allocations
0       The number of hash buckets examined during allocations
0       The maximum number of hash buckets examined for an allocation
0       The number of pages examined during allocations
0       The max number of pages examined for an allocation
0       Threads waited on page I/O
Pool File: dn2id.bdb
4096    Page size
0       Requested pages mapped into the process' address space
51      Requested pages found in the cache (96%)
2       Requested pages not found in the cache
0       Pages created in the cache
2       Pages read into the cache
1       Pages written from the cache to the backing file
Pool File: cn.bdb
4096    Page size
0       Requested pages mapped into the process' address space
35      Requested pages found in the cache (94%)
2       Requested pages not found in the cache
0       Pages created in the cache
2       Pages read into the cache
1       Pages written from the cache to the backing file
Pool File: entryUUID.bdb
4096    Page size
0       Requested pages mapped into the process' address space
14      Requested pages found in the cache (87%)
2       Requested pages not found in the cache
0       Pages created in the cache
2       Pages read into the cache
1       Pages written from the cache to the backing file
Pool File: id2entry.bdb
16384   Page size
0       Requested pages mapped into the process' address space
52      Requested pages found in the cache (96%)
2       Requested pages not found in the cache
0       Pages created in the cache
2       Pages read into the cache
2       Pages written from the cache to the backing file
Pool File: ou.bdb
4096    Page size
0       Requested pages mapped into the process' address space
108     Requested pages found in the cache (98%)
2       Requested pages not found in the cache
0       Pages created in the cache
2       Pages read into the cache
1       Pages written from the cache to the backing file
Pool File: entryCSN.bdb
4096    Page size
0       Requested pages mapped into the process' address space
17      Requested pages found in the cache (89%)
2       Requested pages not found in the cache
0       Pages created in the cache
2       Pages read into the cache
1       Pages written from the cache to the backing file
Pool File: objectClass.bdb
4096    Page size
0       Requested pages mapped into the process' address space
57      Requested pages found in the cache (96%)
2       Requested pages not found in the cache
0       Pages created in the cache
2       Pages read into the cache
1       Pages written from the cache to the backing file


334から始める行がキャッシュのヒット率を表示しています。この値が低い場合にはチューニングが必要です。現在のキャッシュサイズは最初の行に表示されています。バークレーDBはキャッシュを分割して管理することができますがそのキャッシュの分割数は2行目に出力されています。キャッシュは連続した領域でとるほうが利用効率は良いですが分割して割り当てるとより大きなメモリを確保できる可能性があります。

set_lg_bsize <bytes>


メモリ内に保持するトランザクションのログの大きさを指定します。LDAPサーバで更新処理を頻繁に行う場合はトランザクションログを大きくすることで高速化を図ることができます。現在のトランザクションの状態は同様にdb_statで調べれます。

# cd /var/lib/ldap
# db_stat -t

1/107017        File/offset for last checkpoint LSN
Sun May 26 19:39:07 2013        Checkpoint timestamp
0x8000002f      Last transaction ID allocated
48      Maximum number of active transactions configured
2       Active transactions
5       Maximum active transactions
47      Number of transactions begun
9       Number of transactions aborted
36      Number of transactions committed
0       Snapshot transactions
0       Maximum snapshot transactions
0       Number of transactions restored
32KB    Transaction region size
0       The number of region locks that required waiting (0%)
Active transactions:
        80000024: running; pid/thread 2327/3078284992; begin LSN: file/offset 0/0
        80000025: running; pid/thread 2327/3078284992; begin LSN: file/offset 0/0




 

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