Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
第37章 エントリーの一括プロビジョニングのパフォーマンスチューニング
ユーザー追加の 11章ユーザーアカウントの管理 など、通常のワークフローを使用して多数のエントリーを追加すると、時間がかかる可能性があります。本章では、プロビジョニングができるだけ早く完了するように、プロセスをチューニングする方法を説明します。
手順の一環として、以下を行います。
- Identity Management (IdM) は、LDIF ファイルからプロビジョニングされるエントリーを読み込み、それらをターゲットの IdM LDAP インスタンスにインポートします。
- 管理者は、キャッシュサイズなどの特定の属性にカスタム値を設定し、MemberOf および Schema Compatibility プラグインを無効にします。この手順には、Memberof が無効になっているのに対応するため、プロビジョニングされたエントリーで
fixup-memberof.pl
プラグインを実行することが含まれます。
この手順は、ユーザー、ユーザーグループ、ホスト、ホストグループ、sudo ルール、およびホストベースのアクセス制御 (HBAC) ルールのエントリータイプをプロビジョニングするように設計され、テストされています。
一括プロビジョニングの推奨事項および前提条件
推奨事項:
- 多数のエントリー (10,000 以上) をプロビジョニングする場合は、LDAP クライアントがエントリーがプロビジョニングされているサーバーにアクセスしたり、サーバーの情報に依存したりしないようにしてください。たとえば、サーバーのポート 389 および 636 を無効にし、LDAPI を使用して Unix ソケットで機能させることで、これを実現できます。理由 MemberOf プラグインはサーバーで無効になっているため、サーバー上のメンバーシップ情報は無効です。
- プロビジョニング中に実行する必要がないアプリケーションを停止します。理由: これは、マシン上で可能な限り多くのメモリーを確保するのに役立ちます。空きメモリーはファイルシステムキャッシュにより使用されるため、プロビジョニングのパフォーマンスが向上します。以下の手順には、IdM サービスを停止し、Directory Server (DS) インスタンスのみを再起動する手順が含まれていることに注意してください。IdM サービス、とりわけ
tomcat
は大量のメモリーを消費しますが、プロビジョニング時には使用されません。 - 1 台のサーバーのみを使用した新規の IdM デプロイメントで手順を実行します。レプリカは、プロビジョニングが完了しないと作成できません。理由 プロビジョニングのスループットは、レプリケーションよりもはるかに速くなります。サーバーが複数存在するデプロイメントでは、レプリカの情報が大幅に古くなります。
前提条件:
- プロビジョニングするエントリーを含む LDIF ファイルを生成します。たとえば、既存の IdM デプロイメントを移行する場合は、
ldapsearch
ユーティリティーを使用して全エントリーをエクスポートして LDIF ファイルを作成します。LDIF 形式の詳細は、『Red Hat Directory Server 10 管理ガイド』の LDIF ファイル形式 を参照してください。
現在の DS チューニングパラメーター値のバックアップ
- DS チューニングパラメーターの現在の値を取得します。
- データベースのキャッシュサイズとデータベースのロック
# ldapsearch -D "cn=directory manager" -w secret -b "cn=config,cn=ldbm database,cn=plugins,cn=config" nsslapd-dbcachesize nsslapd-db-locks ... nsslapd-dbcachesize: 10000000 nsslapd-db-locks: 50000 ...
- エントリーキャッシュのサイズと DN キャッシュのサイズ
# ldapsearch -D "cn=directory manager" -w secret -b "cn=userRoot,cn=ldbm database,cn=plugins,cn=config" nsslapd-cachememsize nsslapd-dncachememsize ... nsslapd-cachememsize: 10485760 nsslapd-dncachememsize: 10485760 ...
- 取得した値を書き留めておきます。プロビジョニングが終了すると、パラメーターはこの値にリセットされます。
データベース、ドメインエントリー、および DN キャッシュサイズの調整
データベースのキャッシュサイズの場合は、次のコマンドを実行します。
- 必要な値を判断します。推奨値は、通常 200MB から 500MB です。ユースケースに適した値は、システムで利用可能なメモリーによって異なります。
- 8GB 以上のメモリー → 500 MB
- 8GB - 4GB のメモリー → 200 MB
- 4GB 未満のメモリー → 100 MB
- 以下のテンプレートを使用して、決定された値を設定します。
dn: cn=config,cn=ldbm database,cn=plugins,cn=config changetype: modify replace: nsslapd-dbcachesize nsslapd-dbcachesize: db_cache_size_in_bytes
ldapmodify
ユーティリティーを使用して LDAP 属性を変更する例は、例37.1「ldapmodify
を使用した LDAP 属性の変更」 を参照してください。
例37.1 ldapmodify
を使用した LDAP 属性の変更
ldapmodify
コマンドを実行し、文を追加して属性値を変更します。以下に例を示します。# ldapmodify -D "cn=directory manager" -w secret -x dn: cn=config,cn=ldbm database,cn=plugins,cn=config changetype: modify replace: nsslapd-dbcachesize nsslapd-dbcachesize: 200000000
- Ctrl+D を押して、変更をサーバーに送信します。操作が正常に終了すると、以下のメッセージが表示されます。
modifying entry "cn=config,cn=ldbm database,cn=plugins,cn=config"
ドメインエントリーキャッシュのサイズの場合は、次のコマンドを実行します。
- 必要な値を判断します。推奨値は 100MB から 400MB です。適切な値は、使用しているシステムで利用可能なメモリーによって異なります。
- 4 GB 以上のメモリー → 400 MB
- 2GB - 4GB のメモリー → 200 MB
- 2GB 未満のメモリー → 100 MB
大規模な静的グループをプロビジョニングする場合は、全エントリー (グループとメンバー) が収まるようにエントリーキャッシュを大きくすることを推奨します。 - 以下のテンプレートを使用して、決定された値を設定します。
dn: cn=userRoot,cn=ldbm database,cn=plugins,cn=config changetype: modify replace: nsslapd-cachememsize nsslapd-cachememsize: entry_cache_size_in_bytes
ドメイン名 (DN) キャッシュサイズの場合は、次のコマンドを実行します。
- パフォーマンスを最大化するために、DN キャッシュは、プロビジョニングされたエントリーのすべての DN に適合することが推奨されます。ユースケースに適した値を見積もるには、以下のコマンドを実行します。
- ファイル内のすべての DN エントリーの数を指定します。DN エントリーは
dn:
で始まる行にあります。たとえば# grep
、sed
、およびwc
を使用する場合は、以下を実行します。# grep '^dn: ' ldif_file | sed 's/^dn: //' | wc -l 92200
- LDIF ファイル内のすべての DN エントリー文字列のサイズを決定します。
# grep '^dn: ' ldif_file | sed 's/^dn: //' | wc -c 9802460
- 平均の DN サイズを取得する: すべての DN エントリー文字列のサイズを、ファイル内のすべての DN エントリーの数で除算します。例: 9,802,460 / 92,200 ≈ 106
- 平均のメモリーサイズを取得します。平均の DN サイズの倍数 2 を指定して、結果に 32 を加算します。例: (106 * 2) + 32 = 244
- 適切な DN キャッシュサイズを取得します。平均メモリーサイズに、LDIF ファイルの DN エントリーの合計数を乗算します。例: 244 * 92,200 = 22,496,800
- 以下のテンプレートを使用して、決定された値を設定します。
dn: cn=userRoot,cn=ldbm database,cn=plugins,cn=config changetype: modify Replace: nsslapd-dncachememsize Nsslapd-dncachememsize: dn_cache_size
不要なサービスの無効化とデータベースのロックの調整
- MemberOf プラグインおよび Schema Compatibility プラグインを無効にします。
dn: cn=MemberOf Plugin,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: off
dn: cn=Schema Compatibility,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: off
Memberof を無効にすると、プロビジョニングの速度が大幅に改善されます。スキーマの互換性を無効にすると、操作時間が短縮されます。ldapmodify
ユーティリティーを使用して LDAP 属性を変更する例は、例37.1「ldapmodify
を使用した LDAP 属性の変更」 を参照してください。 - トポロジーにレプリカがインストールされていない (「一括プロビジョニングの推奨事項および前提条件」 で推奨されている) 場合は、コンテンツ同期および Retro Changelog プラグインを無効にします。
dn: cn=Content Synchronization,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: off
dn: cn=Retro Changelog Plugin,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: off
追加のプラグインを無効にすると、プロビジョニングのパフォーマンスが向上します。 - IdM サーバーを停止します。これにより、DS インスタンスも停止します。
# ipactl stop
次の手順でデータベースロックの数を設定するには、DS を停止する必要があります。後でもう一度、再起動します。 - データベースのロック数を調整します。適切な値は、プロビジョニングされたエントリーの半数になります。
- 最小値は 10,000 です。
- 最大値は 200,000 です。
DS が停止したので、/etc/dirsrv/slapd-EXAMPLE-COM/dse.ldif
ファイルを編集して値を設定する必要があります。dn: cn=config,cn=ldbm database,cn=plugins,cn=config ... nsslapd-db-locks: db_lock_number
メンバーシップを計算すると、IdM は多数のデータベースページにアクセスします。アクセスするページ数が多いほど、プロビジョニングに必要なロックが多くなります。 - DS を起動します。
# systemctl start dirsrv.target
エントリーのインポート
LDIF ファイルから IdM LDAP インスタンスに新しいエントリーをインポートするには、次のコマンドを実行します。たとえば、
ldapadd
ユーティリティーを使用する場合は、以下を実行します。
# ldapadd -D "binddn" -y password_file -f ldif_file
ldapadd
の使用方法は、ldapadd(1) の man ページを参照してください。
無効にしたサービスの再有効化と元の属性値の復元
- MemberOf の有効化
dn: cn=MemberOf Plugin,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: on
ldapmodify
ユーティリティーを使用して LDAP 属性を変更する例は、例37.1「ldapmodify
を使用した LDAP 属性の変更」 を参照してください。 - DS を再起動します。
# systemctl restart dirsrv.target
前の手順で MemberOf を有効にしたため、この時点で DS を再起動する必要があります。 (objectClass=*)
フィルターを使用してfixup-memberof.pl
スクリプトを実行し、プロビジョニングされたすべてのエントリーでmemberOf
属性を再生成して更新します。以下に例を示します。# fixup-memberof.pl -D "cn=directory manager" -j password_file -Z server_id -b "suffix" -f "(objectClass=*)" -P LDAP
エントリーのインポート時に MemberOf プラグインが無効になっていたため、fixup-memberof.pl
の実行が必要です。プロビジョニングを続行するには、スクリプトが正常に完了している必要があります。fixup-memberof.pl
の詳細は、fixup-memberof.pl(8) の man ページを参照してください。- Schema Compatibility プラグインを有効にします。
dn: cn=Schema Compatibility,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: on
- 「不要なサービスの無効化とデータベースのロックの調整」 でコンテンツ同期プラグインおよび Retro Changelog プラグインを無効にした場合は、再度有効にします。
dn: cn=Content Synchronization,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: on
dn: cn=Retro Changelog Plugin,cn=plugins,cn=config changetype: modify replace: nsslapd-pluginEnabled nsslapd-pluginEnabled: on
- 「現在の DS チューニングパラメーター値のバックアップ」 でバックアップを作成したデータベースキャッシュ、エントリーキャッシュ、および DN キャッシュサイズの元の値を復元します。
dn: cn=config,cn=ldbm database,cn=plugins,cn=config changetype: modify replace: nsslapd-dbcachesize nsslapd-dbcachesize: backup_db_cache_size dn: cn=userRoot,cn=ldbm database,cn=plugins,cn=config changetype: modify Replace: nsslapd-dncachememsize Nsslapd-dncachememsize: backup_dn_cache_size - replace: nsslapd-cachememsize nsslapd-cachememsize: backup_entry_cache_size
- DS を停止します。
# systemctl stop dirsrv.target
- 「現在の DS チューニングパラメーター値のバックアップ」 でバックアップを作成したデータベースロックの元の値を復元します。DS が停止したので、
/etc/dirsrv/slapd-EXAMPLE-COM/dse.ldif
ファイルを編集して値を設定する必要があります。dn: cn=config,cn=ldbm database,cn=plugins,cn=config ... nsslapd-db-locks: backup_db_lock_number
- IdM サーバーを起動します。
# ipactl start
これにより、DS など、すべての IdM サービスが開始します。