説明
cache が有効な場合、ゾーン転送とメタデータレコードを除くすべてのレコードは最大 3600 秒間キャッシュされます。キャッシュは、バックエンド(アップストリーム、データベースなど)からデータを取得するのにコストがかかる場合に特に便利です。
Cache は、アップストリームクエリのために DNSSEC (DNSSEC OK; DO) オプションをプラグインを通して渡します。
このプラグインは、サーバーブロックごとに一度しか使用できません。
構文
cache [TTL] [ZONES...]
- TTL 最大 TTL(秒単位)。指定しない場合は、最大 TTL が使用されます。これは、NOERROR 応答の場合は 3600、存在しないという拒否応答の場合は 1800 です。TTL を 300 に設定するには、
cache 300
とします。これにより、レコードは最大 300 秒間キャッシュされます。 - ZONES キャッシュするゾーン。空の場合、設定ブロックのゾーンが使用されます。
キャッシュ内の各要素は、その TTL に従ってキャッシュされます(TTL が最大値)。キャッシュは 256 個のシャードに分割され、各シャードはデフォルトで最大 39 個のアイテムを保持します。合計サイズは 256 * 39 = 9984 アイテムです。
より詳細な制御が必要な場合
cache [TTL] [ZONES...] {
success CAPACITY [TTL] [MINTTL]
denial CAPACITY [TTL] [MINTTL]
prefetch AMOUNT [[DURATION] [PERCENTAGE%]]
serve_stale [DURATION] [REFRESH_MODE]
servfail DURATION
disable success|denial [ZONES...]
keepttl
}
- TTL および ZONES は上記のとおり。
success
、成功した応答をキャッシュするための設定を上書きします。CAPACITY は、削除を開始する前にキャッシュするパケットの最大数を示します(ランダムに)。TTL は、キャッシュの最大 TTL を上書きします。MINTTL は、キャッシュの最小 TTL(デフォルト 5)を上書きします。これは、バックエンドへのクエリを制限するのに役立ちます。denial
、存在しないという拒否応答をキャッシュするための設定を上書きします。CAPACITY は、削除を開始する前にキャッシュするパケットの最大数を示します(LRU)。TTL は、キャッシュの最大 TTL を上書きします。MINTTL は、キャッシュの最小 TTL(デフォルト 5)を上書きします。これは、バックエンドへのクエリを制限するのに役立ちます。3 番目のカテゴリ(error
)がありますが、これらの応答はキャッシュされません。prefetch
は、キャッシュから削除されようとしている人気のあるアイテムをプリフェッチします。人気があるとは、DURATION 以上の間隔を空けずに AMOUNT 回のクエリが見られたことを意味します。DURATION のデフォルトは 1 分です。プリフェッチは、TTL が PERCENTAGE を下回った場合、または TTL の有効期限の最新 1 秒前に発生します。デフォルトは10%
です。値は[10%, 90%]
の範囲である必要があります。パーセント記号は必須です。PERCENTAGE はint
として扱われます。serve_stale
が設定されている場合、キャッシュは、利用可能な有効期限切れのエントリが、DURATION(デフォルト 1 時間)よりも長く期限切れになっていない限り、常にクライアントにサービスを提供します。デフォルトでは、cache プラグインは、期限切れのキャッシュエントリをクライアントに送信した後、キャッシュエントリを更新しようとします。応答の TTL は 0 です。REFRESH_MODE は、期限切れのキャッシュエントリの更新のタイミングを制御します。verify
は、期限切れのエントリをクライアントに送信する前に、エントリがソースからまだ利用できないことを最初に確認します。immediate
は、エントリがソースから利用可能かどうかを確認する前に、期限切れのエントリをクライアントにすぐに送信します。REFRESH_MODE のデフォルトはimmediate
です。この値をverify
に設定すると、期限切れの応答を提供する場合にレイテンシーが増加する可能性がありますが、ソースから更新された応答を取得できる場合は、期限切れのエントリが提供されるのを防ぐことができます。servfail
は、SERVFAIL 応答を DURATION の間キャッシュします。DURATION を 0 に設定すると、SERVFAIL 応答のキャッシュが無効になります。このオプションが設定されていない場合、SERVFAIL 応答は 5 秒間キャッシュされます。DURATION は 5 分を超えることはできません。disable
は、リストされた ZONES の成功または拒否キャッシュを無効にします。ZONES が指定されていない場合、指定されたキャッシュはすべてのゾーンで無効になります。keepttl
は、キャッシュから応答を提供するときに TTL を古くしません。エントリは、TTL が通常どおりに期限切れになるとキャッシュから削除されますが、期限切れになるまでは、応答には残りの TTL ではなく、元の TTL が含まれます。これは、CoreDNS が権威サーバーとして使用されており、ダウンストリームクライアントに一貫した TTL を提供したい場合に役立ちます。これは、CoreDNS が権威のないレコードをキャッシュしている場合、ダウンストリームクライアントが古い応答を使用する可能性があるため、推奨されません。
容量と削除
CAPACITY が指定されていない場合、デフォルトのキャッシュサイズはキャッシュごとに 9984 です。最小許容キャッシュサイズは 1024 です。CAPACITY が指定されている場合、実際に使用されるキャッシュサイズは、256 で割り切れる最も近い数値に切り捨てられます(そのため、すべてのシャードが同じサイズになります)。
削除はシャードごとに行われます。実際には、シャードが容量に達すると、そのシャードからアイテムが削除されます。シャードは完全に均等に埋まらないため、キャッシュ全体が最大容量に達する前に削除が発生します。各シャードの容量は、合計キャッシュサイズ/シャード数(256)に等しくなります。削除はランダムであり、TTL に基づくものではありません。TTL が 0 のエントリは、シャードが容量に達したときにランダムに削除されるまで、キャッシュに残ります。
メトリクス
監視が有効になっている場合(prometheus プラグイン経由)、次のメトリクスがエクスポートされます。
coredns_cache_entries{server, type, zones, view}
- キャッシュタイプ別のキャッシュ内の合計要素数。coredns_cache_hits_total{server, type, zones, view}
- キャッシュタイプ別のキャッシュヒット数カウンター。coredns_cache_misses_total{server, zones, view}
- キャッシュミス数カウンター。 - 非推奨。キャッシュヒット/リクエストカウンターからミスを派生させます。coredns_cache_requests_total{server, zones, view}
- キャッシュリクエスト数カウンター。coredns_cache_prefetch_total{server, zones, view}
- キャッシュがキャッシュされたアイテムをプリフェッチした回数カウンター。coredns_cache_drops_total{server, zones, view}
- リクエスト/応答質問名の不一致により、キャッシュから除外された応答のカウンター。coredns_cache_served_stale_total{server, zones, view}
- 古いキャッシュエントリから提供されたリクエストのカウンター。coredns_cache_evictions_total{server, type, zones, view}
- キャッシュ削除のカウンター。
キャッシュタイプは「denial」または「success」のいずれかです。Server
はリクエストを処理するサーバーです。ドキュメントについては、prometheus プラグインを参照してください。
例
すべてのゾーンのキャッシュを有効にしますが、すべてを TTL 10 秒に制限します。
. {
cache 10
whoami
}
Google Public DNS にプロキシし、example.org(またはそれ以下)の応答のみをキャッシュします。
. {
forward . 8.8.8.8:53
cache example.org
}
example.org
のキャッシュを有効にし、ポジティブキャッシュサイズを 5000、ネガティブキャッシュサイズを 2500 に保持します。
example.org {
cache {
success 5000
denial 2500
}
}
example.org
のキャッシュを有効にしますが、sub.example.org
での拒否はキャッシュしません。
example.org {
cache {
disable denial sub.example.org
}
}