10月 102010
 

またまたVarnishのLTをqpstudy#03でやってきました
今回はVCLを記述する際に分かりづらいサブルーチンのところとデバッグの仕方を軽く話しました
正直5分という時間で詰め込みすぎた感があって今後の課題かなーと思いつつ
Varnishを使う際の一助になれば幸いだと思っています
Continue reading »


9月 242010
 

お久しぶりです。

前回のqpstudyは乱入でLTを行ったのですが、今回は枠をいただけると言うことで
またまたVarnish関係のLTを行ないます。

「できる!Varnish ここを知ると便利なVCL(仮)」

というテーマで多少癖があるVCL(Varnishの設定ファイル)を書く上ではまりやすいところや
知っておくと便利なことを簡単に話させていただこうと思っています。

ただし、あくまで(仮)なのでテーマについては変更があるかもしれません。(Varnishってのはブレませんが)

場所:Niftyさん(大森)
日時:10月9日(土)
時間:18:00〜

リンク
qpstudy#03
参加申し込み@atnd
ビアバッシュ

ビアバッシュは前回すごく盛り上がりましたので皆様ぜひぜひ


7月 312010
 

Varnish2.1.3がリリースされたようです

varnishのブログからの情報だと
安定版の2.0.6と同等の安定性とパフォーマンスを確保したので是非2.1.3を使って欲しいとのことです

実はそのうち記事でだそうと思ってたのですが2.1.2は2.0.6に比べるとパフォーマンスが多少落ちていたのでこれでよくなると嬉しいです
(テスト条件は格納オブジェクト数が10ぐらいだったのでどうかとも思いますが・・・)

また変更点は
・critbitのバグを修正
 →2.1.2の際にLAが1に貼りつくという現象がありましたがおそらくそれがなおると思います(まだ未検証なので・・・)
・varnishncsaのバグ修正(ログの取りこぼしなどがあったようです)
・Rangeリクエストのバグを修正
・VCLにlogコマンドを追加
だそうです

RPMビルドの際にひとつだけ注意点があります
varnish.specファイルのバージョン指定が2.1.2になっているのでそこを2.1.3に変更する必要があります


[root@LIP-NAS-01 redhat]# diff varnish.spec.org varnish.spec
3c3
< Version: 2.1.2
---
> Version: 2.1.3

参考サイト
Varnish 2.1.3 – Use it!
Varnish2.1.3

ダウンロード
The Varnish HTTP Accelerator


7月 252010
 

昨日池袋でインフラ勉強会のキユーピー3分インフラクッキングでESIとインラインCについてちょこっと話してきました。
LT自体が始めて+飛び入りLTだということでいろいろ自身にツッコミを入れたいところとか多々あるんですが、次回以降の改善点として考えています。
Continue reading »


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サーバは一つの場合
公式サイトの設定例


acl purge {
        "localhost";
        "192.0.2.14";
}

sub vcl_recv {
        if (req.request == "PURGE") {
                if (!client.ip ~ purge) {
                        error 405 "Not allowed.";
                }
                purge("req.url ~ " req.url);
        }
}

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


6月 102010
 

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

varnishadmを使う方法

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


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

の場合


[root@LIP-APP-04 test]# varnishadm -T localhost:6082 -S /etc/varnish/secret
200 154
-----------------------------
Varnish HTTP accelerator CLI.
-----------------------------
Type 'help' for command list.
Type '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)で


-h classic,500009 \

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

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


5月 292010
 

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


backend c01 {
  .host = "192.168.1.1";
  .port = "80";
   .probe = {
     .url = "/healthcheck.gif";
     .timeout = 0.3 s;
     .window = 8;
     .threshold = 3;
   }
}
backend c02 {
  .host = "192.168.1.2";
  .port = "80";
   .probe = {
     .url = "/healthcheck.gif";
     .timeout = 0.3 s;
     .window = 8;
     .threshold = 3;
   }
}
director defcache random {
.retries = 5;
  {
    .backend = c01;
    .weight         = 5;
  }
  {
    .backend = c02;
    .weight         = 5;
  }
}

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

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

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

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

Continue reading »