7.4 オフラインのバルクロードユーティリティ

ldif2dibユーティリティでは、eDirectoryサーバがオフラインになったときに、LDIFファイルからNetIQ eDirectoryデータベース(DIB)へのデータのバルクロードを実行できます。eDirectoryは、LinuxとWindowsの両方のプラットフォーム上でこのユーティリティをサポートします。これはオフラインユーティリティであり、他のオンラインツールより高速でバルクロードを実行できます。このユーティリティは、LDIFファイルからDIBにエントリをインポートするときに、既存のディレクトリを使用し、データベースを新規作成しません。

LDIFファイルのエントリを大規模なユーザデータベースに取り込む必要があるときには、ldif2dibユーティリティが必要です。iceやldapmodifyなどのオンラインツールはオンラインでのバルクロード時にスキーマチェックやプロトコル変換やアクセス制御チェックなどのオーバーヘッド処理を伴うため、ldif2dibより処理が遅くなります。ldif2dibは、ユーザの大きなデータベースを構築し、初期のダウンタイムが問題とならないときは、高速な動作可能時間を実現します。

7.4.1 eDirectoryのパフォーマンスの改善

eDirectoryには、バルクロードのパフォーマンスを向上するための新しいオプションが追加されました。NetIQインポート/エクスポート変換(ICE)ユーティリティを使用したバルクロードのパフォーマンスを向上するために調整できるパラメータは、以下のとおりです。

各オペレーティングシステムの調整可能パラメータも参照してください。

eDirectoryキャッシュの設定

バルクロードのパフォーマンスを最適にするには、eDirectoryキャッシュの割り当てで、ブロックキャッシュにより高い割り当て率を設定します。詳細については、『NetIQ eDirectoryチューニングガイド』の「eDirectoryサブシステムのチューニング」を参照してください。

LBURPトランザクションサイズの設定

LBURPトランザクションサイズによって、1つのトランザクションにおいてICEからLDAPサーバに送信されるレコード数が設定されます。十分なメモリがあり、この値を大きくしてもI/O競合が発生しない場合、この値を大きくすることでバルクロードのパフォーマンスを向上できます。デフォルトのLBURPトランザクションサイズは25です。この値はLDIFファイルが少ない(操作数が100,000より少ない)場合には適切ですが、レコード数が多い場合には不適切です。LBURPトランザクションサイズは、1~350の範囲で設定できます。

トランザクションサイズの変更

トランザクションサイズを変更するには、/etc/opt/novell/eDirectory/conf/nds.confファイルでn4u.ldap.lburp.transizeパラメータの値を変更します。理想的なシナリオでは、トランザクションサイズが大きいほど、パフォーマンスはより高くなります。ただし、次の理由のため、トランザクションサイズには必要以上に大きな値を設定しないようにします。

  • トランザクションサイズが大きいほど、サーバはトランザクションを処理するためにより多くのメモリを割り当てる必要があります。システムが少ないメモリで稼働している場合、スワッピングのために処理が遅くなることがあります。

  • LDIFファイルにエラーがなく、eDirectoryにある既存のエントリがコメント化されていることが必要です。トランザクションに1つでもエラーがあると(追加しようとしたオブジェクトがすでにディレクトリに存在するという場合も含めて)、eDirectoryはLBURPトランザクション設定を無視し、操作ごとにコミットを実行してデータの整合性を確認します。

    詳細については、『NetIQ eDirectoryトラブルシューティングガイド』の「LDIFファイルのデバッグ」を参照してください。

  • LBURPの最適化は、リーフオブジェクトに対してのみ有効です。トランザクションにコンテナオブジェクトとそのサブオーディネートオブジェクトが含まれている場合、eDirectoryはこれをエラーと見なします。これを回避するには、最初に別のLDIFファイルを使用してコンテナオブジェクトをロードするか、前方向参照の使用を有効にします。

    詳細については、『NetIQ eDirectoryトラブルシューティングガイド』の「前方向参照を有効化する」を参照してください。

ICEの非同期要求の数を増やす

この数値は、LDAPサーバから返される結果を待たずに、ICEクライアントからLDAPサーバに非同期に送信できるエントリの数を示します。非同期要求の数は、10~200の範囲内で設定できます。デフォルト値は「100」です。最小値(10)よりも小さい値はデフォルトに戻されます。小さなLDIFファイルには最小値が適切です。理想的なシナリオでは、ウィンドウサイズが大きいほど、パフォーマンスはより高くなります。ただし、ウィンドウサイズが大きくなるほど、クライアントがLDIFファイルのエントリを処理するために割り当てるメモリの量が多くなるため、ウィンドウサイズを必要以上に大きく設定しないでください。システムが少ないメモリで稼働している場合、スワッピングのために処理が遅くなることがあります。ICE内の非同期要求の数を変更するには、ICEコマンドラインオプションまたはiManagerを使用します。

ICEコマンドラインオプションを使用する場合

非同期要求の数は、ICEコマンドラインオプション–Zを使って指定できます。これは、LDAPターゲットハンドラの一部として使用できます。

ICEクライアントによって送信される非同期要求の数を50に設定するには、次のコマンドを入力します。

ice -SLDIF -f LDIF_file -a -c -DLDAP -d cn_of_admin -Z50 -w password

iManagerのICEウィザードを使用する場合

ICEクライアントによって送信される非同期要求の数をiManagerで設定する方法は次のとおりです。

  1. 役割およびタスク]をクリックします。

  2. eDirectoryの保守]>[インポート/エクスポート変換ウィザード]の順にクリックします。

  3. 「データをファイルからインポートする」と「LDAPサーバ間でデータを移行する」の両方のタスクで、LDAPターゲットハンドラ画面で[LBURPウィンドウサイズ]フィールドに値を入力します。

  4. 次へ]をクリックします。

    詳細については、ウィザードのヘルプを参照してください。

LDAP書き込みスレッド数の増加

LDAPサーバで複数の書込みスレッドを使えるようになりました。同時処理によって発生するエラーを避けるために前方参照を有効にするには、次のようにICEコマンドラインオプション–Fを使用します。

ice -SLDIF -f LDIF_file -a -c -DLDAP -d cn_of_admin -w password  -F

ICEのスキーマ検証を無効にする

ICEクライアントのスキーマ検証を無効にするには、次のようにICEコマンドラインオプション–Cと–nを使用します。

ice -C -n -SLDIF -f LDIF_file -a -c -DLDAP -d cn_of_admin -w password

バックリンカ

バックリンカは、特に参照整合性をチェックするバックグラウンドプロセスであり、eDirectoryサーバが起動してから50分後に実行されます。その後は13時間後に実行されます。バルクロードの処理中にバックリンカが実行されないように注意してください。ロードされるオブジェクトの数やオブジェクトがロードされる回数によっては、バックリンカが実行されると、バルクロードの処理速度が低下することがあります。

ACLテンプレートを無効にする

バルクロードのパフォーマンスを向上させるために、ACL(アクセス制御リスト)テンプレートを無効にすることができます。これによりいくつかのACLが見つからなくなりますが、必要なACLをLDIFファイルに追加するか、それらのACLを後から適用することで、この問題は解決できます。

  1. 次のコマンドを実行します。

    ldapsearch -D cn_of_admin -w password -b cn=schema -s base objectclasses=inetorgperson 

    このコマンドの出力は次のようになります。

    dn: cn=schema
    objectClasses: ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' SUP
     organizationalPerson STRUCTURAL MAY ( groupMembership $ ndsHomeDirectory
     $ loginAllowedTi meMap $ loginDisabled $ loginExpirationTime $
     loginGraceLimit $ loginGraceRem aining $ loginIntruderAddress $
     loginIntruderAttempts $ loginIntruderResetTim e $
     loginMaximumSimultaneous $ loginScript $ loginTime $
     networkAddressRestri ction $ networkAddress $ passwordsUsed $
     passwordAllowChange $ passwordExpirationInterval $
     passwordExpirationTime $passwordMinimumLength $ passwordRequired $
     passwordUniqueRequired $ printJobConfiguration $ privateKey $ Profile $ 
     publicKey $ securityEquals $ accountBalance $ allowUnlimitedCredit $
     minimum AccountBalance $ messageServer $ Language $ UID $
     lockedByIntruder $ serverHolds $ lastLoginTime $ typeCreatorMap $
     higherPrivileges $ printerControl $ securityFlags $ profileMembership $
     Timezone $ sASServiceDN $ sASSecretStore $ sASSecretStoreKey $
     sASSecretStoreData $ sASPKIStoreKeys $ userCertificate
     $nDSPKIUserCertificateInfo $ nDSPKIKeystore $ rADIUSActiveConnections $
     rADIUS AttributeLists $ rADIUSConcurrentLimit $ rADIUSConnectionHistory
     $ rADIUSDefa ultProfile $ rADIUSDialAccessGroup $ rADIUSEnableDialAccess
     $ rADIUSPassword $ rADIUSServiceList $ audio $ businessCategory $
     carLicense $ departmentNumbe r $ employeeNumber $ employeeType $
     givenName $ homePhone $ homePostalAddress  $ initials $ jpegPhoto $
     labeledUri $ mail $ manager $ mobile $ pager $ ldap Photo $
     preferredLanguage $ roomNumber $ secretary $ uid $ userSMIMECertifica te
     $ x500UniqueIdentifier $ displayName $ userPKCS12 ) X-NDS_NAME 'User' X
    -NDS_NOT_CONTAINER '1' X-NDS_NONREMOVABLE '1' X-NDS_ACL_TEMPLATES ( '2#subtree#[Self]#[All Attributes Rights]' '6#entry#[Self]#loginScript' '1#subtree#[Root Template]#[Entry Rights]' '2#entry#[Public]#messageServer' '2#entry#[Root Template]#groupMembership' '6#entry#[Self]#printJobConfiguration' '2#entry#[Root  Template]#networkAddress') )
  2. この出力から、太字で示されている情報を削除します。

  3. 変更を加えた出力をLDIFファイルとして保存します。

  4. 新しく保存したLDIFファイルに次の情報を追加します。

    dn: cn=schema
    changetype: modify
    delete: objectclasses
    objectclasses: ( 2.16.840.1.113730.3.2.2 )-add:objectclasses

    これにより、新しいLDIFは次のようになります。

    dn: cn=schema
    changetype: modify
    delete: objectclasses
    objectclasses: ( 2.16.840.1.113730.3.2.2) 
    -
    add:objectclasses
    objectClasses: ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' SUP
     organization alPerson STRUCTURAL MAY ( groupMembership $ ndsHomeDirectory
     $ loginAllowedTimeMap $ loginDisabled $ loginExpirationTime $
     loginGraceLimit $ loginGraceRem aining $ loginIntruderAddress $
     loginIntruderAttempts $ loginIntruderResetTime $
     loginMaximumSimultaneous $ loginScript $ loginTime $
     networkAddressRestri ction $ networkAddress $ passwordsUsed $
     passwordAllowChange $ passwordExpirationInterval $
     passwordExpirationTime $ passwordMinimumLength $ passwordRequired
     $passwordUniqueRequired $ printJobConfiguration $ privateKey $ Profile $ 
     publicKey $ securityEquals $ accountBalance $ allowUnlimitedCredit $
     minimum AccountBalance $ messageServer $ Language $ UID $
     lockedByIntruder $ serverHolds $ lastLoginTime $ typeCreatorMap $
     higherPrivileges $ printerControl $ securityFlags $ profileMembership $
     Timezone $ sASServiceDN $ sASSecretStore $ sASSecretStoreKey $
     sASSecretStoreData $ sASPKIStoreKeys $ userCertificate $
     nDSPKIUserCertificateInfo $ nDSPKIKeystore $ rADIUSActiveConnections $
     rADIUSAttributeLists $ rADIUSConcurrentLimit $ rADIUSConnectionHistory $
     rADIUSDefa ultProfile $ rADIUSDialAccessGroup $ rADIUSEnableDialAccess
     $rADIUSPassword $ rADIUSServiceList $ audio $ businessCategory $
     carLicense
     $ departmentNumbe r $ employeeNumber $ employeeType $ givenName $
     homePhone $ homePostalAddress  $ initials $ jpegPhoto $ labeledUri $ mail
     $ manager $ mobile $ pager $ ldap Photo $ preferredLanguage $ roomNumber
     $ secretary $ uid $ userSMIMECertifica te $ x500UniqueIdentifier $
     displayName $ userPKCS12 ) X-NDS_NAME 'User' X-ND S_NOT_CONTAINER '1' X
    -NDS_NONREMOVABLE '1')
  5. 次のコマンドを入力します。

    ldapmodify -D cn_of_admin -w password -f LDIF_file_name

    ACLでの作業の詳細については、『NetIQ eDirectoryチューニングガイド』を参照してください。

インラインキャッシュを有効/無効にする

サーバのインラインキャッシュ変更を有効または無効にできます。インラインキャッシュ変更は、アウトバウンド同期が無効になっている場合のみ、無効にできます。[アウトバウンド同期]を有効にすると、[インラインキャッシュ変更]も有効になります。[インラインキャッシュ変更]を無効にすると、このレプリカの変更キャッシュに無効のマークが付けられ、[エージェント環境設定]>[パーティション]で無効のフラグが付けられます。インラインキャッシュ変更を有効にすると、変更キャッシュの再構築時に、無効な変更キャッシュのフラグが削除されます。

LBURPのタイムアウト周期を拡大する

デフォルトでは、クライアントのタイムアウト周期は20分(1200秒)です。ただし、バルクロードの処理の際、LBURPトランザクションサイズが250であり、非常に大きな値を持つ多数の属性が対象であり、しかも、サーバで同時LBURP処理が有効になっている場合、サーバはICEクライアントによって送信されるデータを処理するために使用中になり、クライアントへの応答は規定の時間内に行われません。この場合、ICEクライアントはタイムアウトになります。

このため、タイムアウト周期を拡大することをお勧めします。拡大するには、より大きい値(秒単位)を指定して環境変数LBURP_TIMEOUTをエクスポートします。たとえば、1200秒を指定してLBURP_TIMEOUT変数をエクスポートするには、「export ICE_LBURP_TIMEOUT=1200」と入力します。

7.4.2 バルクロードにldif2dibを使用する

コマンドラインインタフェースで、インポートするデータが含まれているLDIFファイルと、データをインポートする必要のあるデータベースファイルのパスを指定できます。ldif2dibを使用してデータのバルクロードを実行するには、次の操作を行います。

  1. DIBのバックアップを作成します。

    バックアップと復元のプロセスの詳細については、セクション 15.0, NetIQ eDirectoryのバックアップと復元を参照してください。

  2. eDirectoryサーバを停止します。

  3. LDIFファイルからのバルクロードを開始するには、コマンドプロンプトで次のコマンドを入力します。

    ldif2dib <LDIF File Name> [Options]

    各要素の内容は次のとおりです。

    • LDIF File Name: バルクロードを実行するLDIFファイルの名前を指定します。

    • Options: これらはオプションです。このユーティリティを調整するために使用できる各種パラメータを指定します。ldif2dibユーティリティでサポートされるオプションは以下のとおりです。

    たとえば、バッチモード、キャッシュサイズ、およびブロックキャッシュパーセンテージオプションを指定するためのオプションを設定するには、次のコマンドを入力します。

    ldif2dib 1MillionUsers.ldif -b/novell/log/logfile.txt -c314572800 -p90

    ヒント:バルクロード処理を一時的に停止するには、sキーまたはSキーを押します。バルクロード処理を停止するには、エスケープ(Esc)キーを使用します。

7.4.3 複数のインスタンス

ldif2dibを使用して、LDIFファイルからeDirectory (DIB)の特定のインスタンスへのエントリのバルクロードを実行するには、-nオプションでnds.dbファイルの場所を指定します。-nオプションでnds.dbファイルの場所を指定しなかったときに、システムでeDirectoryのインスタンスが1つだけ構成されている場合は、ldif2dibがそのデータベースファイルの場所を自動的に検出します。ただし、インスタンスが複数ある場合は、ldif2dibを実行するとメニューが表示されて構成済みのすべてのインスタンスがリストされ、バルクロードを実行するインスタンスを選択できます。

eDirectoryの複数のインスタンスの詳細については、『NetIQ eDirectoryインストールガイド』の「ndsconfigの使用によるeDirectory 9.2の複数インスタンスの設定」を参照してください。

7.4.4 ldif2dibを調整する

このセクションでは、ldif2dibを調整するために使用できるパラメータについて説明します。

キャッシュを調整する

データベースキャッシュの設定は、eDirectoryのパフォーマンスに影響する重要な設定の1つです。設定値が小さすぎると、より頻繁にディスクから情報を取得する必要があるため、eDirectoryの処理が低速になります。設定値が大きすぎると、他のプロセスの実行に十分なメモリを使用できないため、システム全体が低速になります。キャッシュの詳細については、『NetIQ eDirectoryチューニングガイド』の「FLAIMキャッシュ設定の変更」を参照してください。

キャッシュサイズを大きくすると、一般的に、バルクロードのパフォーマンスは向上します。ただし、キャッシュサイズを、LDIFファイルサイズの3.8倍を超える値に設定しても、パフォーマンスはそれ以上向上しません。

トランザクションサイズ

トランザクションサイズとは、チャンクサイズをトランザクションごとのオブジェクト数で定義したものです。トランザクションサイズが大きい場合は少数の大規模チャンクが結果を書き込み、サイズが小さい場合は多数の小規模チャンクが結果を書き込みます。

トランザクションサイズが大きくなると、バルクロードのパフォーマンスが向上します。トランザクションサイズがゼロの場合は特別なケースで、トランザクションごとのオブジェクト数が無制限になります。トランザクションサイズがゼロの場合は、バルクロードの終了時にコミットが実行されるため、パフォーマンスが高くなります。ただし、LDIFファイルが非常に大規模である場合(オブジェクト数が100万個以上の場合)は、トランザクションサイズを0に設定することはお勧めしません。LDIFファイルが非常に大規模である場合は、トランザクションサイズを最大で4000程に設定できます。

索引

インデックスを使用すると、検索のパフォーマンスは向上しますが、オブジェクトをDIBにロードするたびにインデックスを更新する必要があるため、バルクロードが低速になります。これは、下位文字列インデックスの場合は特に顕著です。そのため、多数のオブジェクトのバルクロードを実行するときには、インデックスを一時停止すると、バルクロードが高速化します。eDirectoryサーバが起動すると、インデックスが自動的に再開されます。-xオプションを使用すると、インデックスを無効にしてからldif2dibを使用してエントリをロードします。

ブロックキャッシュの比率

属性の下位文字列インデックスが有効になっている場合は、ブロックキャッシュの比率を50%に設定することをお勧めします。属性の下位文字列インデックスが無効になっている場合は、ブロックキャッシュの比率を90%に設定できます。

チェックポイント間隔

チェックポイント間隔は、チェックポイントバックグラウンドスレッドが開始されるまでデータベースが待機する時間です。このスレッドが開始されると、オンディスクバージョンのデータベースとインメモリ(キャッシュに保存された)データベースの整合性が保たれます。このチェックポイントスレッドは、ダーティキャッシュをディスクにフラッシュし、その後ロールフォワードログをクリーンアップします。チェックポイントスレッドの実行中にはバルクロードは一時的に停止するため、チェックポイント間隔の値を大きくして、バルクロードを高速にすることをお勧めします。

7.4.5 制限

このセクションでは、ldif2dibユーティリティの制限について説明します。

スキーマ

  • LDIFファイルには、エントリが属するすべてのオブジェクトクラスを記述する必要があります。エントリは、継承のために複数のオブジェクトクラスに属すことができます。たとえば、inetOrgPersonタイプのエントリの構文は、LDIFファイルでは次のようになります。

    objectclass: inetorgperson
    objectclass: organizationalPerson
    objectclass: person
    objectclass: top
  • 現在、以下の構文はサポートされていません。

ACLテンプレート

オブジェクトクラスのACLテンプレートで指定されているACLは、ldif2dibを使用してバルクロードされたオブジェクトには自動的には追加されません。

オプション

Linux上で-bオプションを使用すると、バルクロードの完了後に、統計を表示する画面が表示されなくなります。ただし参照用に、最終統計がログファイルに書き込まれます。

簡易パスワードLDIF

Windowsでは、簡易パスワードを持つLDIFをアップロードするときに、SystemおよびAdministratorフォルダに格納されているNICIキーが同期されていない場合は、ldif2dibが失敗することがあります。この問題に対処するには、次のように、nici/systemフォルダに存在するキーにアクセスします

  1. C:\Windows\system32\novell\nici\フォルダに移動します。

  2. Administratorフォルダに存在するファイルをバックアップします。

  3. 次の手順に従って、systemフォルダとそのファイルにアクセスします。

    1. Systemフォルダの[プロパティ]ウィンドウにある[セキュリティ]タブに移動します。

    2. 詳細オプション]を選択し、[所有者]タブに移動します。

    3. Administratorを選択します。

    4. セキュリティ]タブに戻り、一覧にAdministratorを追加します。

      同じ手順を繰り返し、Systemフォルダに存在するすべてのファイルに対して読み取りアクセスを許可します。

  4. Administratorフォルダのファイルをsystemフォルダのファイルで上書きします。

  5. アップロードした後に、バックアップしたファイルをAdministratorフォルダにコピーします。

  6. Systemフォルダおよびフォルダ内のファイルに対するAdministratorのアクセス権を元に戻します。

カスタムクラス

ldif2dibを使用して、コンテナオブジェクトが多数含まれているLDIFのバルクロードを実行すると、メモリ内で構築が行われ、結果的に-150エラーが報告されます。

フィルタ済みレプリカ

eDirectoryは、フィルタ適用後のレプリカのバルクロードをサポートしません。

7.4.6 注意事項

以下のシナリオでは、ldif2dibの動作は未定義です。

エントリが重複している

重複するエントリまたはDIBにすでに存在するエントリを含むLDIFを、-uオプションを指定せずにアップロードすると、エントリが複数回追加され、DIBの一貫性が失われます。そのため、バルクロードを実行する前に、LDIF内でエントリが繰り返されているかどうか、またはDIBにすでに存在しているかどうかを把握できていない場合は、バルクロード処理中に-uオプションを使用します。

スキーマチェックが実行されない

ldif2dibはスキーマチェックを実行しません。結果として、属性がオブジェクトのスキーマに属していなくても、オブジェクトに属性を追加できます。これにより、DIBの一貫性が失われます。ldif2dibは、スキーマチェックを実行する必要のないLDIFデータに対してのみ使用してください。

ハードドライブ上のスペースが不足している

ハードドライブ上に十分なスペースがないためにすべてのオブジェクトをロードできない場合のldif2dibの動作は未定義です。バルクロード処理を開始する前に、すべてのオブジェクトをロードできるだけの十分なスペースがあることを確認する必要があります。

強制終了

ldif2dibプロセスを強制終了すると、DIBの一貫性が失われます。バルクロード処理を正常終了するには、<Esc>キーを使用します。

端末のサイズを変更する

バルクロード処理中に端末のサイズを変更すると、ユーザインタフェースに表示される統計が乱れる可能性があります。バルクロードの進行中は、端末のサイズ変更を避ける必要があります。