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 »


3月 072010
 

たぶん設定が悪いのだと思うのだけど上手く動かないのでメモ

NginxのアドオンモジュールでNCacheというSquidやVarnishっぽく動く(はず)のがあって
速いのかなぁと試そうと思ったのですがうまく動きませんでした

個人的に気にくわないところ(間違ってるかも
・現在Nginxの安定版は0.7系ですがそもそもNCacheは0.6系じゃないと動かない
・キャッシュ時間はバックエンドサーバまかせでmax-ageを付与しないとだめ(Varnishのように特定のマッチ条件でttl指定ができない)
・/etc/init.d/nginx stopしてもプロセス残る(killall -9 nginxでやりましたよ・・・)なんでだろう
・完全オンメモリ動作が出来ない(ぽい) tmpfs使うしかないのかな
・そもそも何故かキャッシュ出来ない(設定が悪いと思うんだけどどこが悪いかさっぱり)
・でかいファイル(20mb)で何故かフリーズ(設定が悪いと思うんだけどどこが悪いかさっぱり)

特に気にくわないのがオンメモリ動作できないことで
公式で

Memory cache the hottest data by MMAP like “varnish”

とはあるのですがvarnishはioが発生したときに弱い印象が・・・
きちんとした検証をしたわけではないのでアレなんですが
varnishでioが発生するとスワップした時と同じような動きをします
squidだとそんなことは無かったんですがねー
たぶんサーバのHDDをSSDやらキャッシュつきRAIDにしないとダメです・・・

ngx_http_upstream_consistent_hashとの組み合わせで最強になるかなと思ったのですが・・・
そのうちまた再チャレンジします
RPM化したのがまずかったのかな

誰か情報持ってる方いないですかね?


 Posted by at 3:52 AM  Tagged with:
2月 202010
 

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


2月 202010
 

以下の記事でもチラッと書いたのですがVarnishの現バージョンではESIのTTL指定がesi:includeタグからできません

VarnishでESIを使うときの注意するべき点

単純に考えるのであればvcl_fetchでそれぞれのURLで指定すればいいとも言えるのですが
ESIの利点を多少損なっている感もします
(個人的にはデザイナ側がこのパーツは10分キャッシュしてもユーザに影響しないよ!とか設定できるのが利点と思ってる)
じゃぁどうすればいいのでしょうか
あまりスマートではないですが解決方法があります

例えばdocument root直下にあるhello.htmlを
ESIでincludeしたい場合で10秒のTTLを指定する時に


<esi:include src="/esi/t/10s/hello.html"></esi:include>

こんな感じの記述でできるようになります
Continue reading »


2月 172010
 

軽めのネタで
varnishでVCL(設定ファイル)を作っているとすごく分割したくなります
たとえばACL(アクセス制限まわり)などの定義を書いてみると非常に冗長になったりして困ります
なんか分割方法ないかなーと探してたらありました


include "インクルードしたいファイル名";

ええそのまんまです
公式サイトでも一応書いてはあるのですが

Syntax overview

The VCL syntax is very simple, and deliberately similar to C and Perl. Blocks are delimited by curly braces,statements end with semicolons, and comments may be written as in C, C++ or Perl according to your own preferences.

In addition to the C-like assignment (=), comparison (==) and boolean (!, && and ||) operators, VCL supports regular expression and ACL matching using the ~ operator.
Unlike C and Perl, the backslash (\) character has no special meaning in strings in VCL, which use the (%xx) escape mechanism just like URLs, so it can be freely used in regular expressions without doubling.
Assignments are introduced with the set keyword. There are no user-defined variables; values can only be assigned to variables attached to backend, request or document objects. Most of these are typed, and the values assigned to them must have a compatible unit suffix.
VCL has if tests, but no loops.
The contents of another VCL file may be inserted at any point in the code by using the include keyword followed by the name of the other file as a quoted string.

VCL – Varnish configuation Language
とあって書いてるのですが非英語圏だとさくっと読み飛ばしそうです><
こういう所も参考記述があると助かるんですがね・・・
自分も読み飛ばした口なので自戒も込めて共有です

参考サイト
Poul-Hennings other homepage