Internet =80⇒ Squid =***⇒ Apache
として、直接Apacheへのアクセスはさせずに、すべてSquidで受け付け、SquidにはApacheまでのReverseProxyとして動作させて、Apacheが公開しているコンテンツをキャッシュさせレスポンスをあげよう作戦を実施しているのだが、ふとアクセスログを見てみると以下のような出力が散見された。
unknown 127.0.0.1 - - [22/Nov/2011:17:41:22 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "57236" unknown 127.0.0.1 - - [22/Nov/2011:17:42:22 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "54855" unknown 127.0.0.1 - - [22/Nov/2011:17:47:22 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "54858" unknown 127.0.0.1 - - [22/Nov/2011:17:57:22 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "45002" unknown 127.0.0.1 - - [22/Nov/2011:18:17:22 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "9218" unknown 127.0.0.1 - - [22/Nov/2011:18:57:22 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "28341" unknown 127.0.0.1 - - [22/Nov/2011:19:09:33 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "60738" unknown 127.0.0.1 - - [22/Nov/2011:19:14:33 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "29722" unknown 127.0.0.1 - - [22/Nov/2011:19:24:33 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "28345" unknown 127.0.0.1 - - [22/Nov/2011:19:44:33 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "28343" unknown 127.0.0.1 - - [22/Nov/2011:20:24:33 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "55118" unknown 127.0.0.1 - - [22/Nov/2011:21:44:33 +0900] "GET /squid-internal-periodic/store_digest HTTP/1.0" 302 210 "-" "-" "-" "5167"
めんどくさいので詳しくは計算しないけど、どうやら5分、10分、20分とかの間隔で何かをGETしにきていて、しかもサイズが少しずつ増えていって、またサイズが小さくなるの繰り返し。
調べてみたら、これはcache_peerの設定に「no-digest」を含めていないからこんなアクセスがくるんだって。
キャッシュサーバーを複数利用している場合、他のキャッシュサーバーがキャッシュしているコンテンツがあればそれを流用したい!そっちの方が処理が早く済むでしょ?という考えの元、キャッシュサーバーに「digest」をくれ!っていってるんだ。
digestとは「私は○○のページをキャッシュしていますよ」という情報で、実際のキャッシュがもっと圧縮されたデーターでちょっとのデーターのやり取りをするだけで、他キャッシュサーバーがキャッシュしている内容を確認できる。それが「digest」ってやつだ。
こいつがあると、
「あーあー面倒臭。あなたが指定したURLはキャッシュしていません。Apacheにとりにいってくるから待っててね」と動くのではなく、
「あーあー面倒臭。あなたが指定したURLはキャッシュしていません。。
あ、あれ?ラッキーヽ(*´∀`)ノ 仲間のキャッシュサーバーがキャッシュしているから、ほれ、それを見なさい」と素早くコンテンツを提供できるようになる。
今まで、squid.confの設定はcache_peerには以下のように設定していました。
cache_peer ApacheサーバーのIP parent ApacheがListenしているポート 0 no-query originserver login=PASS name=myAccel
これで、cache_peerであるApacheに対してCacheがあるかを問い合わせない(digest頂戴って言わない)はずでした。なぜかって言うと「icp_port」を「0」にするとホスト、この場合Apache、に対してのキャッシュダイジェストを要求する問い合わせをしなくなるはずだから。
The port number where Squid sends and receives ICP queries to
and from neighbor caches. The standard UDP port for ICP is 3130.
Default is disabled (0).
でもお話が違う。実際にキャッシュダイジェストを求めるようなアクセスをしてきているではないか。
ってことで、根本的に無効にするために「no-digest」を追加してやりました。
cache_peer ApacheサーバーのIP parent ApacheがListenしているポート 0 no-digest no-query originserver login=PASS name=myAccel
Squidの再読み込みをして、はっぴーはっぴー♪
こう考えると、Squidって単体で動くよりも複数台で動くことも考慮されているって、すごいね~
コメント