わかりました、これは OpenLDAP の新規質問ですので、ご容赦ください。ウェビネットで明確な答えを見つけることができなかったので、ここに行きます:
注: 最終的な目標は、マスター LDAP ですべての結果を取得するために、OpenLDAP サーバーを「単一の」クエリのプロキシ/キャッシュとして設定することです (.Net の DirectoryServices dll に精通している場合、アプリはLDAP で FindAll() 呼び出しを行う)。
プロキシ/キャッシュがマスターと同じ結果を表示している (つまり、クエリをプロキシしている) ところまで持っていますが、キャッシュしているようには見えません。私がそう言うのは、次の 2 つの理由からです。
- マスター LDAP のエントリを更新すると、TTL が期限切れになる前であっても、(プロキシ URL を指す LDAP ブラウザを使用して) プロキシで更新された値がすぐに表示されます。
- マスター LDAP をシャットダウンしてプロキシにクエリを実行すると、接続例外が発生します。私が間違っていなければ、代わりにキャッシュされた結果を取得する必要があります (繰り返しますが、TTL は期限切れになっていません)。
プロキシ/キャッシュに使用している OpenLDAP 構成ファイルは次のとおりです (Windows では、OpenLDAP v.2.4.23)。
データベース LDAP
uri "ldap://MyPC"
サフィックス「dc=local」
rootdn "dc=ローカル"
オーバーレイ pcache
プロキシキャッシュ bdb 1000 3 250 432000
ディレクトリ ./cache
インデックス objectclass eq
インデックス cn eq,sub
プロキシキャッシュクエリ 100
proxyattrset 0 cn certificateRevocationList
プロキシテンプレート (objectclass=) 0 600
注目に値するいくつかのこと:
- proxyattrset の一部として、マスター LDAP のエントリに「すべて」の属性を含めています。これは、意図したクエリをキャッシュ/サービスするために必要であることを理解しています。FindAll() をキャッシュしたいので、これがその方法だと思います。
- 整合性チェックの間隔は 5 日 (432000 秒) に設定されています。マスターサーバーが長時間停止している場合でも、キャッシュがキャッシュされたクエリを処理できるようにしたいと考えています。また、TTL が 10 分 (600 秒) に設定されていることに注意してください。これは、少なくとも 10 分ごとにキャッシュ クエリを更新する必要があるためです (マスター サーバーが稼働している場合)。
わかりました、私の質問に進みます:
- proxyattrset ですべての属性を指定することなく、すべてのクエリをキャッシュするように OpenLDAP をすばやく構成する方法はありますか?
- マスター LDAP を強制終了し、TTL 内でプロキシにクエリを実行すると、接続エラーが発生するのはなぜですか? 私のクエリはキャッシュされていませんか? もしそうなら、キャッシュを有効にするために設定ファイルに欠けているものは何ですか?