Squidを使ったリバースプロクシで冗長性を持たせる
私が運用しているウェブサイトでは、複数のZopeインスタンスを組み合わせて動作させています。前段(ユーザにちかい方)と後段の各Zopeインスタンスの間にSquidをはさんでいます。
この後段にあるZopeがなぜだか時々落っこちるのです。故に、前段のZopeから参照する後段のZopeインスタンスを複数かけないかなと実験。ウェブサーバは二台あるのでこんな構成。
これ、単純にcache_peerを二行書けば実現できるようです。
cache_peer localhost parent 8081 0 no-query originserver name=Zope cache_peer another_host parent 8081 0 no-query originserver name=Zope2
ただし、Apacheのmod_proxy_balancerのように二つのバックエンドに負荷を分散させるわけではありません。
上記のような記述だと、1行目のpeer(localhost)が死んだときは2行目にpeer(another_host)へリクエストが流れます。
で、1行目のpeerが復活すると、今度はまた1行目のpeerへリクエストがいくようになります。
一応監視ソフトでインスタンスを監視して自動復旧するようにはなっているのですが、検知してから回復するまでの数分間の対処として上記を設定しました。Squidのまとまった日本語文献ってないのかな。