私の目標:nscdが利用可能なメモリを持っているので、余分なメモリにかなりの規模のDNSキャッシュを維持するようにしてください。
説明する:
私は広く分散していますが、非常に繰り返しユーザーベースのWebサーバーを持っています。十分なメモリがあるため、クエリをキャッシュして応答時間を向上させることができると思いましたが、nscd -g
キャッシュヒット率は6%にすぎません。つまり、nscd
キャッシュにレイテンシが増えたり、ネットワーク経由でブロックされるのではなく、見つからなかったアイテムが見つかりません。
hosts cache:
yes cache is enabled
yes cache is persistent
yes cache is shared
211 suggested size
216064 total data pool size
2328 used data pool size
36000 seconds time to live for positive entries
20 seconds time to live for negative entries
4455 cache hits on positive entries
0 cache hits on negative entries
17357 cache misses on positive entries
42348 cache misses on negative entries
6% cache hit rate
17 current number of cached values
40 maximum number of cached values
3 maximum chain length searched
0 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes
6%ヒット率の重要な要素は、17項目のみキャッシュすることです。を実行すると、strings /var/db/nscd/hosts
生成されたホストキャッシュエントリが主に内部ネットワーク上のコンピュータ用であることが示されます。サイトを毎日再公開すると作業が速くなる可能性があるため、これをキャッシュすることをお勧めしますが、実際の構成を変更せずにエンドユーザーエクスペリエンスを高速化することが目標です。
これは以下に関連する部分ですnscd.conf
。
threads 10
server-user nscd
debug-level 0
paranoia no
[.....snip......]
enable-cache hosts yes
positive-time-to-live hosts 36000
negative-time-to-live hosts 20
suggested-size hosts 10657
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432
デフォルトでは、ホストキャッシュの正のTTLを非常に高く設定しているにもかかわらず、ホストキャッシュがなぜそんなに小さいのかを理解するのに役立ちます。実際のキャッシュエントリ数が少ないため、ヒット率が低すぎるのは確かです。
ヒット率を6%と仮定していますが、正のTTLがかなり大きいので、現在の作業負荷を意味します。はいDNSホストの検索は実行されますが、保存されません。なぜ保存されないのか、次に何を確認するのかわかりません。今私が期待するのはかなり大きなDNSキャッシュです。
ヒット率がまだ小さい場合(たとえば、顧客が思ったほど頻繁に繰り返さない)、私はまだ期待しています。それらDNSルックアップはキャッシュされていますが、「現在キャッシュされている値の数」を見ると、やはり発生しないようです。
答え1
Webサーバーのどの部分がDNSルックアップを実行していますか?ほとんどのWebサーバー構成は、着信ユーザーごとにリバースDNSルックアップを明示的に無効にします(DNSはしばしば遅いため)。
Patrickが指摘したように、nscdは正しいことをしており、正のTTL値を尊重します。はい、上書きできます(unbound
これを簡単に実行できます。修正するだけです。server.cache-min-ttl
同じ理由で1時間以上に増やすと警告が表示されます)。ただし、あなたのクエリは通常、TTLが長い傾向があるrDNSである可能性が高いです。
また、maximum number of cached values
トラフィックが少なすぎてトラフィックがほとんど発生しないことを指摘したいと思います。
ユーザーの頻繁に繰り返される場所に興味がある場合は、nscdの外部に記録して再び心配する必要がないことをお勧めします。
編集(2013/12/09):
nscd -g
ホスト統計dev.gentoo.org
(コメントにブロックなし):
nscd configuration:
4h 8m 43s server runtime
hosts cache:
yes cache is enabled
no cache is persistent
no cache is shared
422 suggested size
1108744 total data pool size
966632 used data pool size
600 seconds time to live for positive entries
20 seconds time to live for negative entries
67878 cache hits on positive entries
2479 cache hits on negative entries
9464 cache misses on positive entries
4276 cache misses on negative entries
83% cache hit rate
6951 current number of cached values
7641 maximum number of cached values
33 maximum chain length searched
1 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes
答え2
このパラメータ:
はい、キャッシュは共有されます
アプリケーションがnscdのキャッシュにルーティングできるようにし、これらのアクティビティは記録されません。これは予想され、最も有効な動作です。
「いいえ」に設定すると、ヒット率は劇的に増加しますが、速度は遅くなります。
答え3
トピックから少しずれている可能性がありますが、代わりに(私の考えに続く製品)nscd
に切り替えることができます。sssd
私はSUSE Linux Enterprise Server 11.3(完全にサポートされています)でこの製品を使用していますが、切り替えることができてうれしいです。より細かい構成オプションがあり、nscd
可能なものよりはるかに優れたnscd
機能を備えています。
少なくとも私は一度見てみる価値があると思います。https://fedorahosted.org/sssd/
答え4
nscd はアップストリーム TTL 値を尊重します。
A
google.com
google.comのDNSサーバーがレコードのTTLを10秒に指定し、TTLpositive-time-to-live
が36000の場合でも、レコードは10秒後に期限切れになります。