使える!サーバ運用の実践テクニック

第13回 [キャリアアップ編④]varnishを使おう③─便利な機能を使いこなす

この記事を読むのに必要な時間:およそ 2.5 分

第11回第12回とvarnishを利用したコンテンツ配信の概要を記載してきましたので,今回は,varnishの論理的な定義ということで,各種パラメータや,運用で使えそうな機能を紹介しておきたいと思います。

基本操作

varnishの基本的な操作は,以下のコマンドで一通り網羅されます。

起動

/etc/init.d/varnish start

停止

/etc/init.d/varnish stop

ステータス確認

varnishstat

管理画面

varnishadm -T localhost:6082 -S /etc/varnish/secret

ログ(Apache形式)

/usr/bin/varnishncsa -D -P /var/run/varnishncsa.pid -c -a -w/var/log/varnish/access.log

定義関係

varnishの定義関連は,起動パラメータとコンフィグの2つを知っておけばほとんどのことができます。通常利用においてはこれ以上の定義はほとんど必要としません。

起動時に変更する項目

起動コマンドは,

/etc/init.d/varnish start

です。実際に起動する際に読まれるパラメータは/etc/sysconfig/varnishにあり,事前に定義を編集しておくことで,内容に応じた状態で起動することができます。

/etc/sysconfig/varnish

DAEMON_OPTS="-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -u varnish -g varnish \
             -S /etc/varnish/secret \
             -s file,/var/lib/varnish/varnish_storage.bin,1G"

実サービスの利用を想定した場合,待ち受けポートを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_hashhashの生成
sub vcl_hitキャッシュが存在していた場合
sub vcl_missキャッシュが存在しない場合
sub vcl_fetchキャッシュにない場合,バックエンドサーバより取得
sub vcl_deliverコンテンツ送信時の処理
sub vcl_errorエラーが発生した場合
【例1】親子関係の定義
バックエンドサーバを172.20.1.1: 6081とし,30ms以内の返答を期待する。
backend default {
  .host = "172.20.1.1";
  .port = "6081";
  .connect_timeout = 30ms;
}
【例2】URLからコンテンツ振り分け
リクエストURLがwww.test.jpの場合,キャッシュ有無の確認,必要に応じてdefault定義に従ってbackendサーバへ接続する。それ以外のURLであった場合は,⁠400 "Forbidden"」を返信する。
# backend server
    if (req.http.host == "www.test.jp") {
        set req.backend = default;
    }
    else {
        error 400 "Forbidden";
    }
【例3】特定キャッシュの時間変更
リクエストURLがwww.test.jp/test/配下のコンテンツのみ,キャッシュオブジェクトの保存時間を60sとする。
    if(req.url ~ "www.test.jp/test/") {
        set obj.http.cache-control = "max-age = 60";
        set obj.ttl = 60s;
    }

著者プロフィール

高岡将(たかおかすすむ)

大手金融,独立系SIerにて気がつけば計18年以上のキャリアを重ねる。バランス感覚に長け,インフラ/アプリ,プレイヤ/マネージャなど関係なくこなし,「いそうだけどいないタイプ」と評価される。

仕事以外では,自転車,ジョギング,サックス等を趣味にし,密かに「エンジニアと健康」についてダイエット成功論の連載を企む。

コメント

コメントの記入