第11回、第12回とvarnishを利用したコンテンツ配信の概要を記載してきましたので、今回は、varnishの論理的な定義ということで、各種パラメータや、運用で使えそうな機能を紹介しておきたいと思います。
基本操作
varnishの基本的な操作は、以下のコマンドで一通り網羅されます。
定義関係
varnishの定義関連は、起動パラメータとコンフィグの2つを知っておけばほとんどのことができます。通常利用においてはこれ以上の定義はほとんど必要としません。
起動時に変更する項目
起動コマンドは、
です。実際に起動する際に読まれるパラメータは/etc/sysconfig/varnishにあり、事前に定義を編集しておくことで、内容に応じた状態で起動することができます。
実サービスの利用を想定した場合、待ち受けポートを80にしたり、vclファイル名を変更したり、キャッシュサイズを定義することになるかと思います。
キャッシュサイズに関しては、デフォルトで1Gバイトとなっています。最初に起動した際に/var/lib/varnish/varnish_storage.binが作成されます。サイズ指定を変更しながら起動停止を繰り返すと、指定サイズ以上に容量が増えていく傾向にあります。また、起動時にvarnish_storage.binが無かった場合は、指定サイズで作成されます。
キャッシュコントロールを行うためのVCL定義
いくつかサンプルを交えながら紹介します。定義体は/etc/varnish/default.vclにあり、インストール直後に開いてみると、以下の関数がコメントで定義されているかと思います。
- backend default
- 後続サーバを定義します。
- director
- 対象のバックエンドサーバが複数あった場合の振舞いを定義します。
- acl clients
- アクセスコントロールを実施するべく、対象IPを記載します。
- sub
- サブルーチンを記載します。よくvarnishの定義(vcl)はC言語の記述に似ているといわれる部分になります。varnishをインストールし、default.vclを開くと以下の9個のサブルーチンがコメントで記載されており、それぞれの内容は以下の通りです(詳細はコメントやリファレンスを参照ください)。
sub vcl_recv | メインルーチン |
sub vcl_pipe | 該当サーバ内のvarnishを通過する場合 |
sub vcl_pass | キャッシュさせない場合 |
sub vcl_hash | hashの生成 |
sub vcl_hit | キャッシュが存在していた場合 |
sub vcl_miss | キャッシュが存在しない場合 |
sub vcl_fetch | キャッシュにない場合、バックエンドサーバより取得 |
sub vcl_deliver | コンテンツ送信時の処理 |
sub vcl_error | エラーが発生した場合 |
- 【例1】親子関係の定義
- バックエンドサーバを172.20.1.1: 6081とし、30ms以内の返答を期待する。
- 【例2】URLからコンテンツ振り分け
- リクエストURLがwww.test.jpの場合、キャッシュ有無の確認、必要に応じてdefault定義に従ってbackendサーバへ接続する。それ以外のURLであった場合は、「400 "Forbidden"」を返信する。
- 【例3】特定キャッシュの時間変更
- リクエストURLがwww.test.jp/test/配下のコンテンツのみ、キャッシュオブジェクトの保存時間を60sとする。
管理画面からの操作(varnishadm)
を入力する事で管理画面を呼び出すことができます。操作方法はコマンドベースの対話式で、使いこなすには慣れが必要です。上記コマンドにて管理モードとし、helpと入力すると以下の通りとなります。
- 【例】varnishadm管理モードからできること①:キャッシュ削除の方法
- 明示的にキャッシュデータを削除する場合は、purgeコマンドを利用します。
- 【例】varnishadm管理モードからできること②:設定の動的反映
- varnishを稼働させたままvcl定義を動的に変更する(varnishadmからの動的反映方法)。
運用するにあたって
varnishはシンプルな構造より、直感である程度動かすことができますが、まだまだ新しいプロダクトのため、事例で使われる定義などが限定的であったり、ドキュメンテーションなども完全に日本語化されておりません。
vclなどで定義できる宣言、関数やvarnishadmなどでできることに関しては、varnish本家のwikiなどを参照することにより(英語が苦手でも)ある程度利用方法がわかるかと思います。調べ方は、Varnish Wikiより右上のSearchを利用するだけなので、検索結果から求めるものを探すのは大変かもしれませんが、実定義イメージで記載されていたりしますので、検証環境などで試しながらでも十分に理解を深めることができると思います。
おわりに
いかがでしたでしょうか? 第11回、第12回で概要とハードウェア構成を、今回は、実定義を行う上でのさまざまな材料を可能な限りわかりやすく記載してみました。今回説明した内容に関しては、乱暴に言えば、論理的な疎通がとれる定義だけ入っていれば動かすことが可能ですが、本番実サービスで利用する場合はポート等セキュアに設計したり、リクエストURLを解釈して自社サイト、サービス以外であった場合はキャッシュ検索を行う前にエラーを通知するようなレスポンスを返すなどを実現することができますので、いろいろと検証してみてはいかがでしょうか?