なかなか6にならないcentOSで、リバースキャッシング
お金でない方のキャッシングと言うことで。
環境 centOS 5.6
初の基盤平置きサーバと紹介
メモリ 8GB(DDR3-10666 4GB*2)
マザーボード Intel DH57JG
XEON L3426 @ 1.87GHz 4コアでHTなるから8スレッドに。あと消費電力が低い。
グラフィックカードは、3000円くらいのをつけた。
電源はこれで、一番高い
SSD intel X25-V 40GB と言うかあまり処理しないので少ない方を利用
写真は次世代型のSandyBridgesベースのものだけど、おおむねこんな感じになる。
総額 8万円くらい。を2式。
バランシングが目的。落ちたらkeepalived で復帰させる。(このあたりは前回分で記載)
1LANでデュアルイーサーを実現
=>このへんの話はVLANの設定にて、そのうち記載したい。
あと、少し性能が落ちる構成を2式で20万位で、4式のサーバを用意する。落ちたら、
さよならにしないのをスケールアウトでカバーする。
ちなみに varnish うちの用途では以下3つ
○単純ロードバランシング
○リバースキャッシュ
○ヘッダ操作
の3つ。コンテンツ圧縮などに関しては、バックエンドに置くnigix層で行うことにした。
ロードバランシング機能だけど、単純と書いたのには以下から。
○2.1から実装されたみたいで結構若い。
○randomかroundrobin が指定でウェイト指定はないよう。
リバースキャッシュに関しては、そのまま静的コンテンツをキャッシュする。
ヘッダー操作
今回試したいのは、MaxAgeを操作
expireの操作を行う。
試していないのだけどスティッキーセッションなどの機能は持っていない。
あと、varnish自体にSSLはないので、おそらく一般的には以下の構成になるのがポピュラー
のようだ。
---- nginx ---- varnish ---- php-fpm
ただ今回の構成では
---- varnish ---- nginx ---- php-fpm
にしてある。
一つは、間違えたって言うのもあるけど、SSL化を今回の構成では利用しないから。という
ことにしておこう。
ネットワークはVLANで、スティック型でデュアルイーサー
----
802.1Q VLAN Support v1.8 Ben Greear
All bugs added by David S. Miller
ADDRCONF(NETDEV_UP): eth0: link is not ready
e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
----
さて、Varnish本題
Redhat 5 用のレポジトリが公開されているので、バイナリーを導入する。
wget http://repo.varnish-cache.org/redhat/varnish-2.1/el5/x86_64/varnish-libs-devel-2.1.5-1.x86_64.rpm
wget http://repo.varnish-cache.org/redhat/varnish-2.1/el5/x86_64/varnish-libs-2.1.5-1.x86_64.rpm
wget http://repo.varnish-cache.org/redhat/varnish-2.1/el5/x86_64/varnish-2.1.5-1.x86_64.rpm
あと、expat が必要だったので導入。
wget http://ftp.yz.yamagata-u.ac.jp/pub/linux/centos/5/os/x86_64/CentOS/expect-5.43.0-5.1.x86_64.rpm
rpm ivh expect-5.43.0-5.1.x86_64.rpm
(YUMで入れてもいいかも。)
変更する設定ファイルが2つ
○/etc/varnish/default.vcl
○/etc/sysconfig/varnish
上が、varnishの振分をしてする要の設定で、下が、起動時の設定。何でか
わからないけど、port 6081で待機しちゃったりなので変更する。
今回
変更はこのあたり
default.vcl
#### サイトA.com
director サイトA round-robin {
{ .backend = {
.host = "192.168.100.209";
.port = "http";
.probe = {
.url = "/stop.html";
.interval = 30s;
.timeout = 120 s;
.window = 4;
.threshold = 2;
}
}
}
{ .backend = {
.host = "192.168.100.210";
.port = "http";
.probe = {
.url = "/stop.html";
.interval = 30s;
.timeout = 120 s;
.window = 4;
.threshold = 2;
}
}
}
}
### ここまでの設定を2つ用意する。デフォルトは別途定義が必要。
### タイムアウト時間はかなり長く取ってるが、もっと短くてもいいかもsub vcl_recv {
set req.backend = default;
set req.http.host = req.http.host ;if (req.http.host == "サイトA.com") {
set req.http.host = "サイトA.com";
set req.backend = サイトA;
return (lookup);
}
elsif (req.http.host =="サイトB.jp") {
set req.http.host = "サイトB.jp";
set req.backend = サイトB;
return (lookup);
}
}sub vcl_fetch {
if (! req.http.Host){
error 404 "Need a host header";
}
}
varnish
このあたりを変更
VARNISH_LISTEN_PORT=80
VARNISH_STORAGE_SIZE=4G
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"
確認後最後に自動起動するように確認
chkconfig --add varnish
chkconfig --level 2345 varnish on
Varnishにしたのは、キャラクターがかわいい。 あと、今回はPoundからの置き換えをした。