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 »


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ぐらいで張り付いてしまう問題の回避方法

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


4月 272010
 

Varnishで再起動を伴わずに設定の再読込を行いたいときはvarnishadmかtelnetで入って以下のような感じでコマンドを打たないといけません


varnishadm -T 192.168.1.123:6082 vcl.load testvcl /etc/varnish/default.vcl
varnishadm -T 192.168.1.123:6082 vcl.use testvcl

正直めんどくさいです
かといって普通に/etc/init.d/varnish reloadとかやると再起動していしまいせっかく溜め込んだキャッシュがクリアされてしまいます

/etc/init.d/varnishの一部から


restart() {
        stop
        start
}

reload() {
        restart
}

ということでgracefulオプションを追加してreloadもそれに割り当ててみました

4/28に修正版をアップしました

Continue reading »


4月 262010
 

とっても便利なVarnishですがいろいろできないことがあってたまになんとか出来ないかなーとか悩むことがあります
特に日付演算には弱い気がします。
以前紹介したESIでのTTLを強引な指定についても日付演算ができれば簡単に・・・と
ということでサンプル的に

  • アクセスされた時間をもとにExpiresを付与

をやってみたいと思います

Continue reading »


2月 202010
 

携帯コンテンツを作っているとドコモ・AU・ソフトバンクで表示可能サイズが違うため
同じURLで別々のコンテンツを出したいことが多々あります
それでもURLは同じなので単純にキャッシュしてしまうと同じコンテンツを返してしまいます
もちろん携帯に限った話ではなくてPCのブラウザのタイプによって・・・とかいろいろありますね
じゃぁどうすりゃいいのってことで解決方法です
Continue reading »