前回はCDNの話にフォーカスを当てすぎた感がありましたが、
varnishというプロダクトの設定やチューニングに関しては、
本検証を行う時点でのvarnishのバージョンは2.
- varnishとApacheを1台のサーバに入れてみる
- varnishとApacheを別々のサーバに入れてみる
- 親子関係varnish-varnish-Apacheの直列構成を構築する
- さらにLVSを利用してvarnishを並列化する
varnishとApacheを1台のサーバに入れてみる
OSのインストール方法
筆者の作業ログを掲載しようかと思いましたが、
- xcirさんによるvarnish関連wiki
- URL:http://
wiki. xcir. net/ - vetnishインストール手順
- URL:http://
wiki. xcir. net/ index. php?title=Varnish%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86
さて、
![図1 インストール後の構成 図1 インストール後の構成](/assets/images/admin/serial/01/server_tech/0011/thumb/TH800_001.jpg)
インストール後、
# /etc/init.d/varnish start
稼働しているか確認します。
# ps -d |grep varnish* 3276 ? 00:00:00 varnishd
varnishのステータスを確認します。
# varnishstat 0+00:01:30 testsrv01 Hitrate ratio: 0 0 0 Hitrate avg: 0.0000 0.0000 0.0000 2 . . N struct sess_mem 1 . . N struct smf 1 . . N large free smf 10 . . N worker threads 10 0.00 0.11 N worker threads created 1 . . N backends 77 2.00 0.86 SHM records 77 2.00 0.86 SHM writes 1073741824 . . bytes free 1 0.00 0.01 N vcl total 1 0.00 0.01 N vcl available 1 . . N total active purges 1 0.00 0.01 N new purges added 90 1.00 1.00 Client uptime 【control+Cで終了】
varnishを停止します。
# /etc/init.d/varnish stop
起動時のパラメータに関しては/etc/
DAEMON_OPTS="-a :6081 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -u varnish -g varnish \ -S /etc/varnish/secret \ -s file,/var/lib/varnish/varnish_storage.bin,1G"
オプションそれぞれの意味
-a | 待ち受けポート |
-T | 管理画面待ち受けポート |
-f | varnishにて行いたいことを定義するファイル |
-u | 実行ユーザ |
-S | セキュリティファイル |
-s | キャッシュの格納先と指定容量 |
これらを必要に応じて書き換えることができます。たとえば、
また、
varnishとApacheを別々のサーバに入れてみる
さて、
varnishが入っていた筐体のApacheのプロセスを停止し、
/etc/varnish/default.vcl
上記default.
backend default {
.host = "127.0.0.1";
.port = "80";
backendは活字で想像できるように、
![図2 varnishとApacheの関係イメージ 図2 varnishとApacheの関係イメージ](/assets/images/admin/serial/01/server_tech/0011/thumb/TH800_002.jpg)
今回はこのアドレスとポートをApacheの移動先にするだけで、
![図3 varnishとApacheの筐体を分けてみるイメージ 図3 varnishとApacheの筐体を分けてみるイメージ](/assets/images/admin/serial/01/server_tech/0011/thumb/TH800_003.jpg)
親子関係varnish-varnish-Apacheの直列構成を構築する
先ほどはvarnishとApacheを別々のサーバに分けてみましたが、
backend default {
.host = "192.168.1.20";
.port = "6081";
}
backend default {
.host = "192.168.1.11";
.port = "80";
}
![図4 親子関係(直列構成)のイメージ 図4 親子関係(直列構成)のイメージ](/assets/images/admin/serial/01/server_tech/0011/thumb/TH800_004.jpg)
これでvarnish-varnish-Apacheの直列構成ができました。稼働確認に関しては、
さらに、LVSを利用してvarnishを並列化する
LVS自体の機能や設定などについては本連載では省略させていただき、
yum -y install ipvsadm ※インストール # ipvsadm ?v ※インストール確認(バージョン表示) ipvsadm v1.24 2003/06/07 (compiled with getopt_long and IPVS v1.2.0) # ipvsadm -a -t 192.168.1.10:80 -r 172.20.1.10:6081 ?m ※構成追加 # ipvsadm -a -t 192.168.1.10:80 -r 172.20.1.20:6081 ?m ※構成追加 # ipvsadm ?Ln ※確認 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.10:80 rr -> 172.20.1.10:6081 Masq 1 0 0 -> 172.20.1.20:6081 Masq 1 0 0
この状態でサーバ配置的には図5のような形となります。
![図5 LVSのイメージ 図5 LVSのイメージ](/assets/images/admin/serial/01/server_tech/0011/thumb/TH800_005.jpg)
これで172.
![図6 varnish並列+親子構成のイメージ 図6 varnish並列+親子構成のイメージ](/assets/images/admin/serial/01/server_tech/0011/thumb/TH800_006.jpg)
稼働確認としては、
- LVSサーバ192.
168. 1.10では、 ipvsadm ?Lnコマンドにより、 リクエストの回数が正しく振り分けられていくことを確認します。
y# ipvsadm ?Ln ※確認 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.10:80 rr -> 172.20.1.10:6081 Masq 1 2 6 -> 172.20.1.20:6081 Masq 1 3 4
- varnish
(172. 20. 1.10、 20、 100) では、 varnishstatを利用して、 Hitrate ratioなどの項目がカウントアップされていくことを確認します。
0+00:03:56 testsrv02 Hitrate ratio: 2 2 2 Hitrate avg: 0.5000 0.5000 0.5000 65 0.00 0.28 Client connections accepted 1228 0.00 5.20 Client requests received 4 0.00 0.02 Cache hits 4 0.00 0.02 Cache misses 24 0.00 0.10 Backend conn. success 1200 0.00 5.08 Backend conn. reuses 23 0.00 0.10 Backend conn. was closed 1224 0.00 5.19 Backend conn. recycles 1224 0.00 5.19 Fetch with Length 14 . . N struct sess_mem 0 . . N struct sess 0 . . N struct object 2 . . N struct objectcore 6 . . N struct objecthead 1 . . N struct smf 1 . . N large free smf 1 . . N struct vbe_conn 10 . . N worker threads 10 0.00 0.04 N worker threads created 236829 0.00 1003.51 N worker threads limited 1 . . N backends 4 . . N expired objects 4 . . N LRU moved objects 115 0.00 0.49 Objects sent with write 65 0.00 0.28 Total Sessions 1228 0.00 5.20 Total Requests 1220 0.00 5.17 Total pass 1224 0.00 5.19 Total fetch 338453 0.00 1434.12 Total header bytes 673650 0.00 2854.45 Total body bytes 41 0.00 0.17 Session Closed 1228 0.00 5.20 Session Linger 278 0.00 1.18 Session herd 95763 0.00 405.78 SHM records 4323 0.00 18.32 SHM writes 119 0.00 0.50 allocator requests 0 . . outstanding allocations 0 . . bytes allocated 1073741824 . . bytes free 1224 0.00 5.19 Backend requests made 1 0.00 0.00 N vcl total 1 0.00 0.00 N vcl available 1 . . N total active purges 1 0.00 0.00 N new purges added 8 0.00 0.03 HCB Lookups without lock 4 0.00 0.02 HCB Lookups with lock 4 0.00 0.02 HCB Inserts 236 1.00 1.00 Client uptime
- ApacheHTTPサーバ
(192. 168. 1.100) に関してはあまり説明の必要は無いかと思いますが、 varnish側が無応答 (varnishstatなどでカウントアップされない) などの場合、 /etc/ httpd/ logs/ access_ logの内容を確認し、 リクエストが届いていることを確認します。
さて今回は、
ここまでできれば、
また、