ホームページ  >  記事  >  バックエンド開発  >  Linux_PHP チュートリアルでの Varnish キャッシュの構成最適化の分析

Linux_PHP チュートリアルでの Varnish キャッシュの構成最適化の分析

WBOY
WBOYオリジナル
2016-07-21 15:05:06790ブラウズ

Varnish は、高性能のオープンソース HTTP アクセラレータです。ノルウェー最大のオンライン新聞である Verdens Gang では、元の 12 個の Squid ユニットの代わりに 3 個の Varnish ユニットを使用しており、パフォーマンスは以前よりも優れています。

しかし、古い Squid と比較すると、それぞれに独自の利点と欠点があります。インターネット上で多数の比較が行われているのは、使い慣れたアプリケーションを最大限に活用した場合にのみ、Squid を最大限に活用できる可能性があります。最も強力な力は、Varnish が「ビジュアル ページ キャッシュ」テクノロジーを使用しているため、Squid がメモリとディスク内で頻繁にファイルを交換することを回避します。イカより性能が高い。

Varnish 管理ポートを通じて、正規表現を使用してキャッシュの一部を迅速かつバッチでクリアできます。これは Squid にはできないことです。
varnish のいくつかの洞察と設定方法について簡単な紹介と注意事項を説明します


実験環境: Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Kernel 2.6.18-164.el5
yum install pcre-devel # # ソフトウェア パッケージを事前にインストールしてください。インストールしない場合は、エラーが表示されます
tar zxvf varnish-2.1.3.tar.gz
cd varnish-2.1.3
./configure --prefix=/usr/local/varnish-2.1。 3
make && make install
設定ファイルを編集します。テンプレートはありますが、コメントが多すぎるため、自分で新しいものを作成するのが最善です
vim /usr/local/varnish-2.1.3/etc/varnish/ varnish.conf

######## ####以下に設定ファイルの内容とコメントを添付します####################
#httpリクエスト処理プロセス
#1、リクエストエントリステータスを受信、vclに基づいてパスまたはローカルクエリを検索します。
#lookup、ハッシュテーブル内のデータを検索し、見つかった場合はヒット状態に入り、そうでない場合はフェッチ状態に入ります
#pass、バックグラウンドを選択し、フェッチ状態に入ります
#fetch、リクエストの処理後 クライアントを取得し、リクエストを送信し、データを取得してローカルに保存します
#deliver、データをクライアントに送信し、doneと入力します
#完了、処理は完了しました

##########バックエンドサーバーの構成## #########

コードをコピーしますコードは次のとおりです:
backend linuxidc01 {
.host = "192.168.1.142";
.port = "7070";
.probe = {
.timeout = 5s; .window = 10; .threshold = 8;
}
バックエンド linuxidc02 {
.host = "192.168.1.141";
.port = " 7070";
.probe = {
.timeout = 5s;
.interval = 2s;
. window = 10;
.threshold = 8;
}
}



########## ####バックエンド サーバー グループを構成し、6 秒間正常性検出を実行し、ランダム モードを使用して重みを設定します########
##########別の方法、ラウンドロビン、デフォルトでポーリングするメカニズム################# #


コードをコピーします
コードは次のとおりです:
director linuxidc15474random = linuxidc02; .weight = 2;


########定義次のアドレスをクリアできるようにするアクセス リスト ワニス キャッシュ#####################




コードをコピーします

コードは次のとおりです。

acl ローカル { "localhost";
" 127.0.0.1";
}

########URL から対象となるバック サーバーとキャッシュ構成のタイプを決定します########################## #
コードをコピーします コードは次のとおりです:

sub vcl_recv
{
If (req.http.host ~ "^linuxidc15474.vicp.net") #一致するドメイン名ジャンプ バックエンド サーバー
不明なホスト名! ";} (If (REQ.Request ==" Purge ") # #" "" {{if (! Client.ip ~ local) {
エラー 405 "許可され​​ていません。"
return (lookup); .(jpg|png|gif| swf|jpeg| ico)) {{
UNSET REQ.HTTP.COOKIE;
}
#Judging Req.http.x-FORWARDED-FOR フロントエンドに複数のリバースプロキシがある場合、クライアントの IP アドレスを取得できます。
if (req.http.x-forwarded-for)
{
set req.http.X-Forwarded-For = req.http.X-Forwarded-For ", " client.ip;
else { set re q .http.X-Forwarded-For = client.ip; }
##varnish实现图片の防盗链
# if (req.http.referer ~ "http://.*)
# {
# if ( !(req.http.referer ~ "http://.*) vicp.net" ||
# req.http.referer ~ "http://.*linuxidc15474.net" ) )
# {
# set req.http.host = "linuxidc1547 4.vicp.net";
# セットreq.url = "/referer.jpg";
# }
# return(lookup);
# }
# else {return(pass);}
if (req.request != "GET" &&
リクエストリクエスト!= "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS"
リクエストリクエスト!= "DELETE")
{ return (pipe); }
#对非GET|HEAD请要求の直接转発行给后端服务器
if (req.request != "GET" && req.request != "HEAD")
{ return (pass); }
##对GET请求、url里以.php和.php?结尾的、直转発行给后端服务器
if (req.request == "GET" && req.url ~ ".(php)($|?)")
{ return (pass); }
##对请求中有验证及cookie,直转発行给后端服务器
if (req.http.Authorization || req.http.Cookie)
{ return (pass);}
{
##除以上的访问请求,从缓存中查找
return (lookup);
}
##指定されたフォント目录不実行缓存
if ( req.url ~ "^/fonts/")
{ return (pass); }
}
sub vcl_pipe
{ return (パイプ); }
##进入パスモード,请求被送后端,後端返回数据客户端,但不通過入存処理
sub vcl_pass
{ return (pass); }
sub vcl_hash
{
set req.hash += req.url;
if (req.http.host)
{ set req.hash += req.http.host; }
else { set req.hash += server.ip;
戻り値 (ハッシュ);
}
##在検索後如果在キャッシュ中找到请要求存,一般以下面几个关键词结束
sub vcl_hit
{
if (!obj.cacheable) { return (パス); }
return (delivery); Varnish サーバーのキャッシュ タイプ、バックエンドからデータを取得した後に
sub vcl_fetch を呼び出します
{ if (!beresp.cacheable)
} ##WEB サーバーはキャッシュされないコンテンツを指定します。 if(beresp.http.pragma〜 "no-cache" || beresp.http.cache-cache〜 "no-cache" ||beresp。http.cache-control〜 "private") "GET" && req.url ~ ".(js|css|mp3|jpg|png|gif|swf|jpeg|ico)$") get に含まれる HTML などの静的ページにアクセスし、300 秒間キャッシュされます
if ( req.request == "GET" && req.url ~ "/[0-9].htm$")
(Return (Deliver);
}
#### キャッシュ ヒットを表示するにはページ ヘッド情報を追加します#######
#########################上記はvarnishの設定ファイルです################ ## #########
ユーザーの作成:
groupadd www
useradd www -g www
varnish_cacheのキャッシュ場所を作成します
mkdir /data/varnish_cache
varnishの開始
ulimit -SHn 8192 ## ## 設定ファイル記述子、私のマシンのパフォーマンスが良くないので、独自の構成に従って設定できます
/usr/local/varnish-2.1.3/sbin/varnishd -u www -g www -f /usr /local/varnish- 2.1.3/etc/varnish/varnish.conf -a 0.0.0.0:80 -s ファイル、/data/varnish_cache/varnish_cache.data,100M -w 1024,8192,10 -t 3600 -T 127.0 .0.1:3500
####-u 実行するもの -g 実行するグ​​ループ -f ワニス構成ファイル -a IP とポートのバインド -s ワニス キャッシュ ファイルの場所とサイズ -w 最小、最大スレッドおよびタイムアウト -T ワニス管理ポート、主にキャッシュをクリアするために使用されます
#varnishd プロセスを終了します
pkill varnishd
varnishncsa を開始して、Varnish アクセス ログをログ ファイルに書き込みます:
/usr/local/varnish-2.1.3/bin/varnishncsa - w /data/ logs/varnish.log &
毎日 0:00 に実行され、Varnish ログを日ごとに切り取り、圧縮ファイルを生成し、前月の古いログを削除するスクリプト (/var/logs/cutlog.sh) ):
vim /usr/local/ varnish-2.1.3/etc/varnish/cut_varnish_log.sh
次のスクリプトを作成します:
#!/bin/sh
# このファイルは 00:00 に実行されます
date=$(date -d "昨日" +"%Y -%m-%d")
pkill -9 varnishncsa
mv /data/logs/varnish.log /data/logs/${date}.log
/usr/local/varnish -2.1.3/bin/varnishncsa - w /data/logs/varnish.log &
mkdir -p /data/logs/varnish/
gzip -c /data/logs/${date}.log > logs/varnish/${date}.log.gz
rm -f /data/logs/${date}.log
rm -f /data/logs/varnish/$(date -d "-1 month" +" %Y-%m*").log.gz
スケジュールされたタスク:
crontab -e
00 00 * * * /usr/local/varnish-2.1.3/etc/varnish/cut_varnish_log.sh

Linux カーネルパラメータの最適化
vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
ネット.ipv4.ip_local_port_range = 5000 65000
make 設定が有効になります
/sbin/sysctl -p

Varnish 管理ポート経由で、正規表現を使用してキャッシュをバッチクリアします
すべてのキャッシュをクリアします
/usr/local/varnish-2.1。 3/bin/varnishadm -T 127.0.0.1:3500 url .purge *$
イメージディレクトリ内のすべてのキャッシュをクリア
/usr/local/varnish-2.1.3/bin/varnishadm -T 127.0.0.1:3500 url.purge /image/
127.0.0.1:3500 はクリアされるキャッシュサーバーです アドレス www.linuxidc.com はパージされたドメイン名です /static/image/tt.jsp はパージされた URL アドレスリストです
/usr/local/varnish- 2.1.3/bin/varnishadm -T 127.0.0.1:3500 パージ " req.http.host ~ www.linuxidc.com$ && req.url ~ /static/image/tt.jsp"
++++++ ++++++++++++++++ ++++++++++++++++++++++++++++++++ ++++++++++
Squid キャッシュをクリアする方法 PHP 関数
コードをコピー コードは次のとおりです:

function purge($ip, $url )
{
$errstr = '';
$f p = fsockopen ($ip, 80, $errno, $errstr, 2);
if (!$fp) {
false を返します。 PURGE $url HTTP/1.1rn";
$out .= "Host:blog.s135.comrn";
($fp)
true を返します。
++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++
ブート時に自動的に起動するように Varnish を設定します
vim /etc/rc.d/rc.local
最後の行に次の内容を記述します。
ulimit -SHn 8192
/usr/local/varnish-2.1.3/sbin/varnishd -u www -g www -f /usr/local/varnish-2.1.3/etc/varnish/varnish.conf -a 0.0。 0.0:80 -s ファイル,/data/varnish_cache/varnish_cache.data,100M -w 1024,8192,10 -t 3600 -T 127.0.0.1:3500
/usr/local/varnish-2.1.3/bin/varnishncsa - w /data/logs/varnish.log &
Varnish サーバーの接続数とヒット率を表示します:
/usr/local/varnish-2.1.3/bin/varnishstat
上記は varnish のステータスです、
1675 0.00 0.06受信したクライアントリクエストは、サーバーが受信したクライアントリクエストの数
179 0.00 0.01 キャッシュヒット数は、キャッシュ内のヒット数であり、キャッシュからデータが取得されてクライアントに返される、つまりヒット率
11 0.00 0.00 キャッシュ ミスは、バックエンド サービス アプリケーションからのスキップ パス キャッシュです。データがユーザーに返された回数を取得します
どの Varnish コマンドが使用できるかを確認するには、ヘルプを使用してください:
/usr/local/varnish-2.1。 3/bin/varnishadm -T 127.0.0.1:3500 ヘルプ

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327719.html技術記事 Varnish は、高性能のオープンソース HTTP アクセラレータです。ノルウェー最大のオンライン新聞である Verdens Gang は、オリジナルの 12 個の Squid ユニットの代わりに 3 個の Varnish ユニットを使用しており、パフォーマンスは以前よりも向上しています。 でもベテランのスクエニとは…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。