squidの負荷分散と冗長化

■squidの負荷分散と冗長化

 Squeeze2台が実験環境のメインプロキシとして動作しています。
 仮想マシンもどちらかのプロキシを必ず参照するよう設定しています。

 ただ、どちらかのメインプロキシの電源を落とすという状況が頻繁にある為、
 下位プロキシや実マシンから参照するには冗長化が必要です。
 今回の冗長化の設定の結果、同時に負荷分散にもなったというわけです。

 また、今回の環境では、両方のサーバが電源が落ちていてもWindows版Squid単体でも外へアクセスできます。
 更に上位の実験環境の出口で強制的にsquidを通るようにしていますが、その説明はスルーします。

 Windows版Squidは以下で制御
  個人的なホワイトリスト
  個人的なブラックリスト

 SqueezeのSquidは以下で制御
  個人的なホワイトリスト
  デフォルトのダウンロードしたブラックリスト
  個人的なブラックリストを使って制御。

 Windows版squid
 http://d.hatena.ne.jp/labunix/20111022/

 Debian Lenny にsquidGuardを導入
 http://d.hatena.ne.jp/labunix/20120311/

 SqueezeにもsquidGuardを導入 
 http://d.hatena.ne.jp/labunix/20120312

■Windows版SquidからSquidGuardを参照するよう変更
 上記で分かるように、「デフォルトのダウンロードしたブラックリスト」が使えるメリットがあります。
 今回は「weight」を使わずに「default」とした。

 2台のSqueezeのsquidが両方稼動していて高負荷時にアクセスログを見ると、
 分散してアクセスしていることが分かる。

> find "cache_peer 19" etc\squid.conf

---------- ETC\SQUID.CONF
cache_peer 192.168.199.88 parent 7080 0 no-query proxy-only default
cache_peer 192.168.199.77 parent 3128 0 no-query proxy-only

■仮想マシン(Squeeze)にも同様の設定をしてうまくいきました。
 以下で上位プロキシでブロックしたページはシステムメールで確認出来ます。

 debian SquidGuardでブロックログを出力
 http://d.hatena.ne.jp/labunix/20120315

■下位プロキシでブロックしたページはブロックログに載りません。
 例えば以下で設定した「www.opt.ne.jp」は次のようにブロックされます。

 Tポイントツールバーのブロック色々
 http://labunix.hateblo.jp/entry/2012/08/11/175214

 1.Windows版Squidでブロック
 2.上位のSquidサーバを直接参照するよう設定変更すると、SquidGuardでブロック
 3.Windows版SquidもSquidGuardも通さず直接参照しようとしても更に上位でブロック
  ※実験環境の出口で制御

■経路として以下の4種類があり、2番目を冗長化したことになります。

 1.Windows ⇒ Windows版Squid ⇒ Squeeze(2台のどちらか) ⇒ 実験環境の出口プロキシ
 2.Windows ⇒ Squeeze(2台のどちらか) ⇒ 実験環境の出口プロキシ
 3.Windows ⇒ 実験環境の出口プロキシ

 ※今回設定した「cache_peer」の2行をコメントアウトする必要があります。
  問題発生時のトラブルシュート用の経路です。

 4.Windows ⇒ Windows版Squid ⇒ 実験環境の出口プロキシ

■個人的なホワイトリスト/ブラックリストによる調整が頻繁になってきたので、
 以下のようなスクリプトを作成しました。

$ w3m -dump https://raw.github.com/labunix/snort_log/master/squidguard_reconfig.sh
#!/bin/bash

if [ "`id -u`" -ne "0" ];then
  echo "Sorry! Not Permit User!"
  exit 1
fi

chown proxy:proxy -R /var/lib/squidguard/db/*
chown proxy:proxy -R /etc/squid/
find /var/lib/squidguard/db -type f | xargs chmod 644
find /var/lib/squidguard/db -type d | xargs chmod 755
sudo -u proxy /usr/bin/squidGuard -d -C all && \
sudo -u proxy /usr/sbin/squid -k reconfigure && \
sudo -u proxy /usr/sbin/squid -k check && \
echo "OK"
exit 0

■課題

 今のところ、両方稼動中に手動で作業していますが、
 今後、個人的なホワイトリストやブラックリストの同期をどうするか

 A.設定用のディレクトリを用意してcronで2台のサーバ間でrsyncして、
  それぞれのサーバが設定用のディレクトリを参照、更新するようにする
 B.実験環境の出口側のwebサーバに用意して、wgetして更新するようにする
 
 どちらにしてもエラーがあったときに困ります。
 まあ、今のところ必要ないので、手動で作業するものとして、
 課題として残しておきます。