最終更新日: 2014年1月13日
Squid Home / FAQトップ

多段(階層)キャッシュの設

1. 多段(階層)キャッシュとは?

Proxyを構築する理由の1つには、複数の端末からサイトへのアクセスが発生した場合、以前にアクセスした事があるサイトへのアクセスの場合、そのサイトの情報をProxy上に蓄えておくことで実際のサイトへのアクセスを発生させずにProxyに保持されたオブジェクトをクライアントへ返すことで帯域の節約と高速なアクセスを実現することにあります。この機能をキャッシュ機能といいます。 このとき、Proxyを利用する端末の数が少なければ、1台(単一)Proxyでも十分でしょう。

しかし、大規模(500人規模)なユーザのいるような環境では、Proxyが1台だけでは、そのProxy自体へのアクセスが集中することによって望んでいたパフォーマンスが出ないことが十分予想できます。 
これに対する簡単な解決策は、複数のProxyを用意して一定のユーザ数以内でProxyを利用する方法が考えられますが、この場合それぞれのProxyにおいて同じオブジェクトへのリクエストが発生した場合、そのままでは最大Proxyの数だけサイトへのアクセスが発生する可能性があります。

多段(階層)キャッシュは、このような問題に対する解を与えてくれます。
多段キャッシュでは、根(ルート)となるProxyを頂点としてその下位の階層に何段ものProxyを配置することで、同じオブジェクトへのアクセスが発生した場合でも、最悪、ルートのProxyサーバにある同一のオブジェクトを利用することで、帯域の節約と高速アクセスを実現します。

このような構成をとる事で、各Proxyの負荷を分散するとともに同じオブジェクトへのアクセスが発生した場合でも不必要なアクセスを避けるとともに、高速な応答を実現できるようになります。

2.設定

Squidでは、簡単な設定によって多段キャッシュが構築できるようになっています。
上記のような構成において、"Proxy-A(およびA')"はすべてのProxyの親になります。
squidの場合、親は特別な設定は殆ど必要ありません。
"Proxy-B"と"Proxy-C"では親のProxyとして"Proxy-A"を設定します。 更に"Proxy-B"と"Proxy-D"で兄弟関係を結ぶことで、"Proxy-C"は"Proxy-A'"のキャッシュオブジェクトも利用可能になります。 また、"Proxy-E"における親のProxyはCとなります。
squidの設定ファイルは、squid.conf(RedHatの場合、パッケージのsquidを利用しているなら /etc/squid/squid.conf )を編集します。
なお、以下での設定は最小限の設定なので、必要に合わせて設定項目を設定してください。

■ Proxy-Aでの設定項目
   :
# http_port 3128
http_port 8080 # ---(変更)/proxyの待ち受けポート番号
  :
#Default:
# cache_mem 8 MB
cache_mem 32 MB # ---(変更)/実メモリを考えて設定する
  :
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl localnet src 192.168.1.0/255.255.255.0 # ---(追加)/利用許可するサブネット
acl SSL_ports port 443 563

  :
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access allow localnet # ---(追加)/行の順番に意味があるので必ずこの行へ記述すること
http_access deny manager
  :
#Default:
# forwarded_for on
forwarded_for off # ---(変更)/接続相手にローカルIPを渡さない為の設定
  :


■ Proxy-Cでの設定項目
   :
# http_port 3128
http_port 8080 # ---(変更)/proxyの待ち受けポート番号
  :
cache_peer proxy-Aのアドレス parent 8080 3130 # ---(追加)/親
cache_peer proxy-Dのアドレス sibling 8080 3130 # ---(追加)/兄弟
  :
#Default:
# cache_mem 8 MB
cache_mem 32 MB # ---(変更)/実メモリを考えて設定する
  :
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl localnet src 192.168.1.0/255.255.255.0 # ---(追加)/利用許可するサブネット
acl SSL_ports port 443 563

  :
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access allow localnet # ---(追加)/行の順番に意味があるので必ずこの行へ記述すること
http_access deny manager
  :
#Default:
# forwarded_for on
forwarded_for off # ---(変更)/接続相手にローカルIPを渡さない為の設定
  :



■ Proxy-Eでの設定項目
   :
# http_port 3128
http_port 8080 # ---(変更)/proxyの待ち受けポート番号
  :
cache_peer proxy-Cのアドレス parent 8080 3130 # ---(追加)/親
  :
#Default:
# cache_mem 8 MB
cache_mem 32 MB # ---(変更)/実メモリを考えて設定する
  :
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl localnet src 192.168.1.0/255.255.255.0 # ---(追加)/利用許可するサブネット
acl SSL_ports port 443 563

  :
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access allow localnet # ---(追加)/行の順番に意味があるので必ずこの行へ記述すること
http_access deny manager
  :
#Default:
# forwarded_for on
forwarded_for off # ---(変更)/接続相手にローカルIPを渡さない為の設定
  :

3.階層キャッシュにおける注意点

squidのキャッシュを階層キャッシュとした場合の注意として、親のリソースは子のproxyよりも要求されることがあります。 特にディスクドライブには子のproxyより多くのキャッシュを保持させないと性能に影響してきます。またメモリに関してもキャッシュのヒット効率を上げるためにはできるだけ多くの搭載が望まれます。
Squid Home / FAQトップ

参考: