xcir

\いわなちゃん/

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 »


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:
3月 022010
 

ネタストック
書いとかないと忘れるので・・・
軽そうなやつから記事書こうかしら

↑重そう
億レベルのレコードでのinsertなどの性能劣化比較(inno/isam/inno(pat)/isam(pat))
MYSQLバルクインサートの件数での劣化具合
InnoDBのレコード数によるcount系処理のio負荷について
MYSQL不適切なパテーションでのペナルティ(io)
ディストリビューションでのxfsのパフォーマンス比較
varnishの負荷状態においてのpurgeによる負荷(regex含む)
hiphophp(これは検証から・・・)
thrift
高負荷環境での正規表現コスト
Nginx-FCGI(UnixDomain) Nginx-FCGI(TCP)で超軽いPHP環境での負荷変化とレイテシ TCPはlocalhost/自分のIP/別サーバ
Nginx consistent hashing構築
varnishのpurge関連(複数ドメイン)
Nginx-Varnish構成でlocal/別サーバ構成でどれぐらい転送レートのペナルティを受けるか
高負荷テスト Apache/Apache(mod_cache)/Nginx/Nginx(ncache)/Varnish
↓軽そう


 Posted by at 10:21 PM