23
システム部 Copyright 2013 All About,inc. 1 varnish Varnish の使い方 All About での使い方を例に~ 2013/02/26 システム部勉強会 2013/5/8 修正) 大原 和人(やまと)

Varnishの使い方~All Aboutでの使い方を例に~

Embed Size (px)

Citation preview

Page 1: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc. 1

varnish

Varnishの使い方~ All Aboutでの使い方を例に~

2013/02/26 システム部勉強会

( 2013/5/8 修正)

大原 和人(やまと)

Page 2: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc. 2

発表の目的

• Varnishって何に使っているのかよくわからない• Varnishの設定ファイルが意味不明• Varnish …の基本的なことはわかるけど

• こういう使い方もできそうだ!• こういう風に依頼すればいいのか!• こうしたら、もっと良くなるんじゃないか!• 自分のサイトにも入れてみよう!

Page 3: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc. 3

目次

1. Varnishの基礎知識2. All Aboutの varnish環境3. Varnishの使い方~ All Aboutを例に~

① アクセスを中継する ② キャッシュする

1. All Aboutの Varnish環境の課題2. まとめ

Page 4: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの基礎知識

• Varnish– HTTPアクセラレータ–リバースプロキシ–キャッシュサーバ

• アクセスを中継する–適切なサーバへ要求を振り分け

• キャッシュする–高速化、負荷軽減

Page 5: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの基礎知識

• 高速、多機能、拡張可能• 設定ファイルは主に 2種類

– /etc/varnish/default.vcl– /etc/sysconfig/varnish

• VCLファイル– C言語に似た言語で記述される– C言語で独自の拡張モジュールの作成も可能

Page 6: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

All Aboutの varnish環境

• サーバ構成

Page 7: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

All Aboutの varnish環境

• サーバ構成– LB故障時を考慮し、グローバル直でのアクセスもラウンドロビンに入れている

– DC(オンプレ)のトラフィック増の問題があったため、クラウドのキャッシュサーバを立てて分散させた

Page 8: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方

① アクセスを中継する– 要求を受けて、サーバへ飛ばす– 分散して飛ばす– アクセス制御– リダイレクト

Varnishの使い方~ All Aboutでの使い方を例に~

Page 9: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方①アクセスを中継する

• 要求を受けて、サーバへ飛ばす•飛ばすサーバの定義backend web01 { .host = "10.x.x.x"; .port = "80"; .connect_timeout = 15s;}

•どんな要求が来た時、どこに飛ばすか?sub vcl_recv { if ( req.http.host == "allabout.co.jp") { if( req.url == "/test/" ){ set req.backend = web01; } elsif( req.url ~ “^/test02/“ ) { # 正規表現も可能 set req.backend = web02; } else{ set req.backend = web03; } }}

Page 10: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方①アクセスを中継する

• 分散して飛ばす・飛ばすサーバ群director web02_04 round-robin { {.backend = web02;} {.backend = web03;} {.backend = web04;}}

sub vcl_recv { if ( req.http.host == "allabout.co.jp") { if( req.url == "/test/" ){ set req.backend = aaweb02_04; } }}

Page 11: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方①アクセスを中継する

• 分散して飛ばす–飛ばし方は?

• round-robin ← ほとんどこれ• fallback

• random、 client、 hash

–ヘルスチェックお亡くなりになったサーバには飛ばさない

director web02_04 round-robin { {.backend = web02;} {.backend = web03;} {.backend = web04;}}

backend aaweb01 { .host = "10.x.x.x"; .port = "80"; .connect_timeout = 30s;

.probe = { .request = "GET /health.php HTTP/1.0" "Host: health.jp" "User-Agent: varnish health check bot" ; .interval = 10s; .timeout = 10s; .window = 5; .threshold = 3; }}

Page 12: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方①アクセスを中継する

• アクセス制御–許可 (拒否 )IPの設定

–あとは if文でぶち込むだけ!

acl partner_ip { “x.x.x.x"; “x.x.x.x";}

sub vcl_recv { if ( !client.ip ~ partner_ip ) { error 405 "Not Allowed."; }}

Page 13: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方①アクセスを中継する

• リダイレクト–ちょっと書き方が面倒(わざとエラーに飛ばすみたいな感じ)

–レスポンスが 404なら、別サーバへ飛ばすことも可能(一部で CDN機能として使用)

Page 14: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方

② キャッシュする– キャッシュする、しないの判断– キャッシュ時間– キャッシュ方法– gzip圧縮

Varnishの使い方~ All Aboutでの使い方を例に~

Page 15: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方②キャッシュする

• キャッシュする、しないの判断

• 404のとき、キャッシュしない

sub vcl_recv { if (req.http.host == "allabout.co.jp") { if( req.url == "/test/" ){ set req.backend = web01; return (pass); # キャッシュしない } else{ set req.backend = web03; } } return (lookup); # キャッシュする}

sub vcl_fetch { if ( beresp.status == 404) { return ( hit_for_pass ); } return(deliver);}

Page 16: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方②キャッシュする

• キャッシュ方法– 速度:メモリ > ファイル–ハイブリッドも可能に

default.vcl# メモリスペースが無くなれば、ファイルにキャッシュするif( storage.st1.free_space > 0B){ set beresp.storage = "st1"; } else { set beresp.storage = "st2"; }

/etc/sysconfig/varnish# メモリVARNISH_STORAGE1="malloc,2G“# ファイルVARNISH_STORAGE2="file,${VARNISH_STORAGE_FILE},8G"

• キャッシュ時間–デフォルトの TTL: 120s–もちろん個別に設定も可能–ヘルスチェックと組み合わせると

# オリジンが落ちていたら、キャッシュを長く持たせるif( req.backend.healthy ) { set req.grace = 120s;} else { set req.grace = 1h;}

Page 17: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

Varnishの使い方②キャッシュする

• gzip圧縮– キャッシュするファイルを gzip圧縮– もちろん個別に設定も可能– 非対応ブラウザの場合は、自動で解凍してくれる

if ( req.url ~ "(\.jpg|\.JPG|\.jpeg|\.gif|\.GIF|\.png|\.PNG)$" ) { set beresp.do_gzip = false;} else { set beresp.do_gzip = true;}

1/4以下!

Page 18: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

All Aboutの varnish環境における課題

All Aboutの varnish環境における課題

Page 19: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

All Aboutの varnish環境における課題

• Vclファイルの肥大化– if分岐がどんどん追加され、ロジックが複雑化しつつある

–共通部分を変更する際、影響範囲が大きい

うまくまとめたり、分割したりしたい

Page 20: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

All Aboutの varnish環境における課題

• ヒット率のさらなる向上– AAのヒット率はピークで 85%くらい

– キャッシュルールの統一• できるだけキャッシュしてください

– ドメイン名、クエリストリングの正規化• 内容が同じ場合は、キャッシュを同じに

• クエリストリングの正規化例( regsub関数を使用)  set req.url = regsub(req.url, "(\?|&)xxx=[^&]+&?(.+)?$", "\1\2");  set req.url = regsub(req.url, "(\?|&)$", "");

• ドメイン名の正規化例  if(req.http.host ~ "(?i)(www\.)?example\.net"){   set req.http.host = “example.net”;  }

• これも別サイトとしてキャッシュされる  /Test?aaa=1&bbb=1  /Test?bbb=1&aaa=1

Page 21: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

まとめ

• Varnish依頼がスムーズに• 課題解決を共に

• Varnishでできること• 簡単な設定ファイルの見方

Page 22: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

参考

• いわなちゃんさん– varnish界の神!– ブログ http://blog.xcir.net/– varnishの教科書  http://blog.xcir.net/wp-

content/uploads/2011/09/VarnishCacheIntroduction_Rev2.pdf

Page 23: Varnishの使い方~All Aboutでの使い方を例に~

システム部

Copyright 2013 All About,inc.

ご清聴ありがとうございました!