見出し画像

390.3 OpenLDAPサーバのパフォーマンスチューニング


主題390:OpenLDAP の設定
390.3 OpenLDAPサーバのパフォーマンスチューニング

LinuC300の試験範囲である主題390~397まであるうちの「主題390:OpenLDAP の設定」から「390.3 OpenLDAPサーバのパフォーマンスチューニング」についてのまとめ

  • 重要度:2

  • 説明:
    LDAPサーバのパフォーマンスを測定し、設定ディレクティブを調整できること。

  • 主要な知識範囲:
    - LDAPのパフォーマンスを測定する
    - パフォーマンスを向上させるためソフトウェアの設定を調整する
    - インデックスを理解する

  • 重要なファイル、用語、ユーティリティ:
    - インデックス
    - DB_CONFIG


LDAPのパフォーマンスを測定する

OpenLDAPの状態はcn=Monitor配下のディレクトリで確認できる。

[root@rocky9-ldap27 ~]#
[root@rocky9-ldap27 ~]# ldapsearch  -LLL -x -D "cn=Manager,dc=example,dc=co,dc=jp" -W -b "cn=Monitor" -s one
Enter LDAP Password: ********
dn: cn=Backends,cn=Monitor
objectClass: monitorContainer
cn: Backends
description: This subsystem contains information about available backends.

dn: cn=Connections,cn=Monitor
objectClass: monitorContainer
cn: Connections
description: This subsystem contains information about connections.

dn: cn=Databases,cn=Monitor
objectClass: monitorContainer
cn: Databases
description: This subsystem contains information about configured databases.

dn: cn=Listeners,cn=Monitor
objectClass: monitorContainer
cn: Listeners
description: This subsystem contains information about active listeners.

dn: cn=Log,cn=Monitor
objectClass: monitorContainer
cn: Log
description: This subsystem contains information about logging.
description: Set the "monitorLogLevel" or "monitorDebugLevel" attributes to th
 e desired levels.

dn: cn=Operations,cn=Monitor
objectClass: monitorContainer
cn: Operations
description: This subsystem contains information about performed operations.

dn: cn=Overlays,cn=Monitor
objectClass: monitorContainer
cn: Overlays
description: This subsystem contains information about available overlays.

dn: cn=SASL,cn=Monitor
objectClass: monitorContainer
cn: SASL
description: This subsystem contains information about SASL.

dn: cn=Statistics,cn=Monitor
objectClass: monitorContainer
cn: Statistics
description: This subsystem contains statistics.

dn: cn=Threads,cn=Monitor
objectClass: monitorContainer
cn: Threads
description: This subsystem contains information about threads.

dn: cn=Time,cn=Monitor
objectClass: monitorContainer
cn: Time
description: This subsystem contains information about time.

dn: cn=TLS,cn=Monitor
objectClass: monitorContainer
cn: TLS
description: This subsystem contains information about TLS.

dn: cn=Waiters,cn=Monitor
objectClass: monitorContainer
cn: Waiters
description: This subsystem contains information about read/write waiters.

[root@rocky9-ldap27 ~]#

~cn=Monitor以下の項目~

  • dn: cn=Backends,cn=Monitor
    バックエンドデータベースに関する情報

  • dn: cn=Connections,cn=Monitor
    コネクションに関する情報

  • dn: cn=Databases,cn=Monitor
    利用中のバックエンドデータベースの情報

  • dn: cn=Listeners,cn=Monitor
    ネットワークに関する情報

  • dn: cn=Log,cn=Monitor
    ログレベルに関する情報

  • dn: cn=Operations,cn=Monitor
    操作回数等の情報

  • dn: cn=Overlays,cn=Monitor
    オーバレイモジュールに関する情報

  • dn: cn=SASL,cn=Monitor
    SASLに関する情報

  • dn: cn=Statistics,cn=Monitor
    通信量などに関する情報

  • dn: cn=Threads,cn=Monitor
    スレッドに関する情報

  • dn: cn=Time,cn=Monitor
    起動時間など時間に関する情報

  • dn: cn=TLS,cn=Monitor
    TLSに関する情報

  • dn: cn=Waiters,cn=Monitor
    読み書き回数に関する情報


パフォーマンスを向上させるためソフトウェアの設定を調整する

データベースをチューニングすることでパフォーマンスを向上させることが期待できる。

~データベースの種類~

  • MDB/LMDB:OpenLDAP2.4~
    MDB(Memory-Mapped Database)
    LMDB(Lightning Memory-Mapped Database)
    階層型の高性能トランザクション データベース バックエンド。
    インデックス作成をサポート
    キャッシュを使用しない
    チューニングの必要がない

  • BDB(Berkeley DB):~OpenLDAP2.4
    高パフォーマンスのトランザクション データベース バックエンド
    チューニングにはDB_CONFIGを使用する。

  • HDB(Hierarchical DataBase):~OpenLDAP2.4
    BDBの改良版
    階層型の高性能トランザクション バックエンド
    チューニングにはDB_CONFIGを使用する。

  • LDBM(lightweight DBM):~OpenLDAP2.3
    格納するデータベースにはBerkeleyDBまたはGnuDBMを使う。

  • SHELL:~OpenLDAP2.4
    シェル スクリプト介して様々なバックエンドデータベースを使えるようにするためのインターフェース

  • PASSWD:
    /etc/passwdファイルへの読み取り専用でアクセスするためのインターフェース

~チューニング~
~OpenLDAP2.4:BDBやHDBの場合はDB_CONFIGで設定する。
OpenLDAP2.4~:MDBはチューニングが不要。

  • バッファキャッシュ
    set_cachesize gbytes bytes ncache

  • ログバッファ
    set_lg_bsize
    set_lg_dir
    set_flags

[root@centos7-ldap28 ldap]#
[root@centos7-ldap28 ldap]# slapd -V
@(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
        mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd

[root@centos7-ldap28 ldap]#
[root@centos7-ldap28 ldap]# cat /usr/share/openldap-servers/DB_CONFIG.example
# $OpenLDAP$
# Example DB_CONFIG file for use with slapd(8) BDB/HDB databases.
#
# See the Oracle Berkeley DB documentation
#   <http://www.oracle.com/technology/documentation/berkeley-db/db/ref/env/db_config.html>
# for detail description of DB_CONFIG syntax and semantics.
#
# Hints can also be found in the OpenLDAP Software FAQ
#       <http://www.openldap.org/faq/index.cgi?file=2>
# in particular:
#   <http://www.openldap.org/faq/index.cgi?file=1075>

# Note: most DB_CONFIG settings will take effect only upon rebuilding
# the DB environment.

# one 0.25 GB cache
set_cachesize 0 268435456 1

# Data Directory
#set_data_dir db

# Transaction Log settings
set_lg_regionmax 262144
set_lg_bsize 2097152
#set_lg_dir logs

# Note: special DB_CONFIG flags are no longer needed for "quick"
# slapadd(8) or slapindex(8) access (see their -q option).
[root@centos7-ldap28 ldap]#

(参考文献)


インデックスを理解する

LDAPデータベース内のエントリーを検索する際に、毎回すべてのデータを読み込んで検索をすると効率が悪くなるのでインデックスを作成し検索の効率化を図る必要がある。
これはOpenLDAP特有のものではなく、データベース特有のものでありOpenLDAPのバックエンドでBDB/HDBを使っている場合は考慮する必要がある。

~インデックス設定~

  • 近似インデックス:approx
    検索値に近い値のエントリを検索するために使われる。

  • 等価インデックス:eq
    検索値に完全一致するエントリを検索するために使われる。

  • 存在インデックス:pres
    ある属性を持つエントリを検索するために使われる。

  • 部分インデックス:sub
    検索値に部分一致するエントリを検索するために使われる。

slapd.confの場合
index {<attrlist> | default} [pres,eq,approx,sub,none]

slapd-confの場合
olcDbIndex: {<attrlist> | default} [pres,eq,approx,sub,none]

~キャッシュ設定~
slapd.confで設定

  • エントリキャッシュ
    cachesize:既定値は1000

  • インデックスキャッシュ
    idlcachesize:BDBの場合はcachesizeと同等、HDBの場合はcachesizeの3倍

~確認~

loglevelで32の検索処理デバッグを含めるとログで確認できる。
ログはsyslog/rsyslogに対してファシリティlocal4で出力される。

~コマンド~

  • slapindex
    インデックスを再作成する

[root@centos7-ldap28 ldap]#
[root@centos7-ldap28 ldap]# systemctl stop slapd
[root@centos7-ldap28 ldap]#
[root@centos7-ldap28 ldap]# slapindex -b "dc=example,dc=co,dc=jp" uid
[root@centos7-ldap28 ldap]#
[root@centos7-ldap28 ldap]# systemctl start slapd
[root@centos7-ldap28 ldap]#

(参考文献)


参考文献


この記事が気に入ったらサポートをしてみませんか?