6月 232010
 

以前書いた記事(VarnishでESIを使うときの注意するべき点)で

Keep-AliveはOFFにするべき

ESI使用時はcontent-lengthがブラウザ側に返却されないようなのでOFFはほぼ必須です
どうしても使いたい場合はESIを使用するときのみkeep-aliveをOFFに・・・

直Varnishはやめた方がいい

Keep-aliveをオフにしても特定のクライアント(ab/wgetなど)で接続が維持されて5秒ほど待ってしまうことがあります
つまりKeep-Aliveが有効かつcontent-lengthがないときの挙動と同じになります
じゃぁどうすればいいか?
自分はフロントにNginxを置いてそこからVarnishにproxyしています

と書きましたがどうやら2.1.X系では改善されたようです

ということで比較してみます
Continue reading »


6月 202010
 

VarnishはVersion2.1.1からRangeリクエストに対応するようになりました。
例えば最近のドコモ端末で動画を再生する場合501KB以上だと
サーバがRangeリクエストに対応していないと再生出来なかったりしますので対応は必要です。

ただこの機能は実験的で実際のところどうなんでしょうか?試してみました。
Continue reading »


6月 202010
 

僕のサイトみたいに複数のドメイン(blog.xcir.net/xcir.net/wiki.xcir.net)管理しているけどVarnishサーバは一つの場合
公式サイトの設定例

01acl purge {
02        "localhost";
03        "192.0.2.14";
04}
05 
06sub vcl_recv {
07        if (req.request == "PURGE") {
08                if (!client.ip ~ purge) {
09                        error 405 "Not allowed.";
10                }
11                purge("req.url ~ " req.url);
12        }
13}

だと違うドメインでも同じURLであれば消してしまいます。
ドメインを指定して安全にキャッシュをパージするにはどうすればいいでしょうか?
Continue reading »


6月 102010
 

Varnishが2.1.xに上がって管理ポートに接続する際にパスワードをかけられるようになりました。
でも実際のところどうするんでしょうか?

varnishadmを使う方法

この場合すごく簡単です
例えば起動パラメータが

1DAEMON_OPTS="-a :6081 \
2-T localhost:6082 \
3-f /etc/varnish/default.vcl \
4-u varnish -g varnish \
5-h classic,12978189 \
6-S /etc/varnish/secret \
7-s malloc,300M \
8-s file,/var/lib/varnish/varnish_storage.bin,1G"

の場合

1[root@LIP-APP-04 test]# varnishadm -T localhost:6082 -S /etc/varnish/secret
2200 154
3-----------------------------
4Varnish HTTP accelerator CLI.
5-----------------------------
6Type 'help' for command list.
7Type 'quit' to close CLI session.

といった風にコンソール入ることができます

telnetを使う場合

Continue reading »


6月 012010
 

Varnish2.1.2でキャッシュが溜まりきってキャッシュアウトが起こるあたりでLAが1になる問題がありました
全く応答しないわけでもなく普通にレスポンスを返しているのですが気持ち悪くてどうにかならないかなーと思っていたら
公式で解答がありました

I think this is a misjudgment in the critbit hasher, we’re working on a fix.
In the meantime use -hclassic

High load after upgrade from 2.1.0 to 2.1.2

要はcritbitというhashアルゴリズムでちょこっとバグがあるっぽくて今なおしてるので
起動オプションでclassic指定で動かしてね!
ということです
そこで起動オプション(/etc/sysconfig/varnish)で

1-h classic,500009 \

を指定したところキャッシュがあふれるような状態でもLAは高くなることなく問題なく推移しました
なお数字500009は素数です
大きめで好きな素数をいれてくださいね

2010/06/02追記
素数の一覧は
The Prime Pages
で見れます
また現在発見されている素数でTOP20は
Largest Known Primes


5月 292010
 

例えばVarnishで複数のバックエンドを持っていてどちらかが倒れても片系でも動くようにする場合

01backend c01 {
02  .host = "192.168.1.1";
03  .port = "80";
04   .probe = {
05     .url = "/healthcheck.gif";
06     .timeout = 0.3 s;
07     .window = 8;
08     .threshold = 3;
09   }
10}
11backend c02 {
12  .host = "192.168.1.2";
13  .port = "80";
14   .probe = {
15     .url = "/healthcheck.gif";
16     .timeout = 0.3 s;
17     .window = 8;
18     .threshold = 3;
19   }
20}
21director defcache random {
22.retries = 5;
23  {
24    .backend = c01;
25    .weight         = 5;
26  }
27  {
28    .backend = c02;
29    .weight         = 5;
30  }
31}

よくこんな感じで書きます
図解するとこんな感じですね!

特に変哲のない方法なのですが

このようなアクセスをしたいと考えてみましょう
・バックエンドは2台(C01/S01)ある
・C01はVarnishでS01の内容をキャッシュしている
・通常時はS01に対してはアクセスは行わない
C01に対してはpass動作(Varnish側でキャッシュしない)
・C01が障害時はS01にアクセスを行いキャッシュする(S01に対してあまり負荷をかけない)
図解するとこんな感じです

これをさっきの方法で考えてみるとあれできなくね?どうVCLを書けばいいの?となります

Continue reading »


5月 232010
 

Varnish2.1.2でのインストール方法を軽くメモってみました
そのうち清書します

ソースビルドでもいいんですがRPM化のほうが後々楽なので・・・
注意するべきところは依存関係で
/usr/bin/mkpasswd
が要求されるところです
これはexpectをyumなどでインストールすれば問題ないです

あとは小技というほどでもないのですが
解凍したあとのredhatフォルダにinitrcがあるので
そこをカスタマイズ(この前の記事に書いたreload対応など)にしておくと後々楽です
Varnishインストール手順

うーんwikiにも書くとブログでまとめればいいのか迷うなー


5月 202010
 

Varnishのランタイムパラメータのデフォルト値を調べてまとめてみました
まだ情報は少ないですがちょくちょく追記していこうかなと思います

Varnishランタイムパラメータ

とりあえず2.1.xで使えなくなったのは
accept_fd_holdoff
acceptor
backend_http11
client_http11
obj_workspace
purge_hash
srcaddr_hash
srcaddr_ttl
ですね


5月 172010
 

現在Varnishは2.1.2までバージョンがあがっていますが2.0.xを使っている方も多いと思います

VCLの記法が変わったり同じパラメータで本番投入したら挙動が違うといったこともあるので注意が必要です
僕もまだ完全につかんでいませんがメモ程度に

vcl_fetchにおいてobj.*が使えなくなった

obj.*は使えなくなりましたberesp.*に置き換えればOKです

fetch;pass;などをreturnで囲まなくてはならなくなった

今まで補完してくれていたのでしょう
単にreturnで囲めばOKです
ex:pass; -> return(pass) ;

一部起動パラメータが使えなくなった

全部は把握してないのでそのうち調べて表にしますがたとえば
srcaddr_ttl
は使えなくなっています
最近ウノウラボさんが記事を出されていましたがあのパラメータだと起動しません
まとめました→Varnishのランタイムパラメータをまとめてみた(2.0.x-2.1.x間の比較)

メモリの使用の仕方がかなり変わった

僕はmallocで運用しているのですが今まで
-s malloc,2G
だとすると大体2Gぐらいしか使わなかったのですが
2.1.2は1.5~2倍ぐらい使います
おそらく調整する項目があるとは思うのですがまだつかみきれていません
それでヒット率が劇的に下がるということは今のところないので単に効率が悪くなったというわけではなさそうです

LAが高くなる

これはたぶん僕が適したパラメータを設定してないのだと思います
デフォルトパラメータで起動した場合キャッシュがあふれ出すあたりで約5倍というかLAが1前後で張り付きます
単純に5倍になったのかコアをひとつしか使ってないのかはちょっと調べてみようと思います
回避方法の記事です→Varnish2.1.2でLoadAverageが1ぐらいで張り付いてしまう問題の回避方法

これからいろいろ調べてみようかなと思っています
随時調べたらブログに上げようと思いますのでよろしくお願いします