Varnish Cacheは、HTTPリバースプロキシのキャッシュ機能を持つソフトで、「ウェブアプリケーション・アクセラレータ。ウェブアプリのフロントに置くだけで、著しい速さに」なるというもの(公式サイトより)。オープンソースで提供され、コミュニティ https://www.varnish-cache.org/ 開発が進んでいます。
自分自身、前々から手軽に使えて早いらしく、「わたし気になります!」状態でしたが、使うシーンがありませんでした。 ところが、Munin グラフ参照用サーバの動作が鈍くなる対処として Varnish の出番かなと。やることやっても重いので、あとはキャッシュさせるしかない!と思い、まずは Varnish を導入決意しました。
Debian/Ubuntu/RHEL/CentOS 色々動きます。自分が普段使う RHEL/CentOS 向けのセットアップ記事が無く、少々ハマった所があり、blog にイカまとめておきます。
やること分かるとやる気が出るねェ! 、という訳で、RHEL や CentOS でお使いのかたの参考になれば、とっても嬉しいなってヽ(・∀・)ノ
■ RHEL / CentOS で Varnish 3.0.4 を導入する方法(所要時間10分)
前提として、普段 Apache が動いている環境を想定しています。 まずは、Varnish Cache をセットアップするまで(yumを使います)。次に、動いている Apache とフロントを入れ替えるまでです。
Varnish は EPEL でも配付されていますが、配付されているバージョンが 2.0.x と古いものです。セットアップは、コミュニティサイトで配付されているリポジトリを使うのが確実かつ早いです。
まずは、コミュニティの varnish-3.0 リポジトリを有効にします。
RHEL5/CentOS5 の場合は、RPM を使ってサクッと有効にできます。
# rpm -ivh http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm を取得中 準備中... ########################################### [100%] 1:varnish-release ########################################### [100%]
RHEL6/CentOS6の場合、公式サイトの el6/noarch ディレクトリがカラッポで (゚Д゚)ポカーンとなりそうですが、設定ファイルを手動設置すると大丈夫です。
cat <<EOF > /etc/yum.repo.d/varnish.repo
[varnish-3.0]
name=Varnish 3.0 for Enterprise Linux 6 - $basearch
baseurl=http://repo.varnish-cache.org/redhat/varnish-3.0/el6/$basearch
enabled=1
gpgcheck=0
EOF
リポジトリが有効になった所で、yum を使ってセットアップです。
# yum install varnish
途中依存関係が出てきます。RHEL5/RHEL6 では、環境によって足りないものが出てきます。その場合は、EPEL リポジトリを有効にしておいてください。
以上で Varnish のセットアップが終わりました。次に Varnish を起動しましょう。
# /sbin/service varnish start Starting Varnish Cache: [ OK ]
ブラウザから http://<ホスト名>:6081/ にアクセスすると、普段のサイトが見えるようになります。ぱっと見、動作しているか分かりづらいのですが、コマンド ‘varnishstat’ や、’varnishtop -i txurl’ といった統計情報出力のコマンドを実行すると、アクセス状況が視覚化されて分かりやすいと思います。
なお、デフォルトの挙動は、
- Varnish がポート 6081 を Listen する
- クライアントからリクエストが来たら、ポート 80 からコンテンツを受け取る
- Varnish がクライアントにコンテンツを返す
このような動作を行います。
なお、各種設定ファイルのパスは、次の通りです。
- /etc/sysconfig/varnish … 起動ポートの指定など、varnishd の起動オプションを指定
- /etc/varnish/default.vcl … Varnish の標準設定ファイル。VCL ( Varnish Configuration Language ) で記述。なにも記述しなければ、デフォルトの挙動を行う。
ログ取得ツールは2つあります。
# /sbin/service varnishlog start
varnishd のログを /var/log/varnish/varnish.log に出力します。
# /sbin/service varnishncsa start
vanishd が処理したファイルを、NCSA(普通の Apache の access_log 形式) 風で /var/log/varnish/varnishncsa.log に出力します。
以上で、基本セットアップは終わりです。
では、次にフロント( Port 80 で Listen )の Apache と Varnish を入れ替える方法です。ここでは、Apache の Listen ポートを 80 を 8080 に変える方法を書きますが、ポートが他のサービスで重複する場合は、適時読み替えて下さい。
Apache は /etc/httpd/conf/httpd.conf を開きます。「Listen 80」「ServerName xxxx:80」「NameVirtualHost *:80」「VirtualHost *:80」の箇所を、全て 「8080」に書き換えます。
次に、Varnish の設定ファイルは2箇所です。
/etc/sysconfig/varnish では、varnishd の Listen ポートを 6081 から 80 に変更します。ファイルを開くと、次のような行が見えてきますが、これは罠です。
#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"
一見すると、この行をコメントアウトすると有効になると思いきや、完全にデコイなので無視します。本来編集すべきは67行目です。
# # Default address and port to bind to # # Blank address means all IPv4 and IPv6 interfaces, otherwise specify # # a host name, an IPv4 dotted quad, or an IPv6 address in brackets. # VARNISH_LISTEN_ADDRESS= VARNISH_LISTEN_PORT=80 #VARNISH_LISTEN_PORT=6081
ここの ‘VARNISH_LISTEN_PORT’ を、6081 から 80 に書き換えます。
次に、varnish の VCL を編集します。/etc/varnish/default.vcl を開き、
backend default { .host = "127.0.0.1"; .port = "8080"; }
この .port の箇所を、デフォルトの 80 から、8080 に書き換えます。
書き換えたら、最後に設定を有効にします。
# /sbin/service httpd restart
# /sbin/service varnish restart
これで、http://<ホスト名>/ でアクセスすると、全ての通信が Varnish cache を経由することになります。あとは、色々設定を変更してお試し下さいヽ(・∀・)ノ
■参考記事・URL
Installation on RedHat | Varnish Community
https://www.varnish-cache.org/installation/redhat
Varnishを使う際に覚えておきたいデフォルトの罠 » cat /dev/random > /dev/null &
http://blog.xcir.net/index.php/2012/05/varnish%E3%82%92%E4%BD%BF%E3%81%86%E9%9A%9B%E3%81%AB%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E7%BD%A0/
いわなちゃんさん @xcir のブログ。Varnish の最新情報や、デフォルトで躓きやすいポイントなどの記事が充実しています。ありがとうございます!
Varnish Community
https://www.varnish-cache.org/
Varnish Cashe の開発コミュニティのサイトです。
Welcome to the Varnish Book — The Varnish Book
https://www.varnish-software.com/static/book/