<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.apple-tab-span
{mso-style-name:apple-tab-span;}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>What is the load on your backend servers? It seems like they are under heavy load. One thing I did notice in your vcl_recv is the cookie code. You are checking the existence of a specific cookie and passing if it exists. If that cookie does not exist you fall back to the default vcl_recv. Well the default vcl_recv also does a check on req.http.Cookie. If it finds one then it also does a pass. My guess would be that most of your incoming requests have some sort of cookie and thus all the requests are getting passed to the backend. Have you done a varnishstat and looked at your cache hit ratios?<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>If I were you I would add a unset req.http.cookie to the end of vcl_recv. This way the default vcl_recv won’t pass the request.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Raul<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> varnish-misc-bounces@varnish-cache.org [mailto:varnish-misc-bounces@varnish-cache.org] <b>On Behalf Of </b>Shaohui Zheng<br><b>Sent:</b> Monday, January 07, 2013 11:16 AM<br><b>To:</b> varnish-misc@varnish-cache.org<br><b>Subject:</b> 503 Error was met frequently<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hello,<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal> After a few days efforts, I did not get my problem fixed, I almost exhaust every possible methods which I could do, so I am trying to get help from the community. <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I use varnish as web cache and load balancer to manage 3 web nodes, but recently, I get 503 errors frequently, <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>My varnish configuration file:<o:p></o:p></p></div><div><p class=MsoNormal>=======================================================<o:p></o:p></p></div><div><div><p class=MsoNormal>backend nanjing {<o:p></o:p></p></div><div><p class=MsoNormal> .host = "10.80.125.66";<o:p></o:p></p></div><div><p class=MsoNormal> .port = "80";<o:p></o:p></p></div><div><p class=MsoNormal> .connect_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal> .first_byte_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal> .between_bytes_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.probe = {<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.url = "/live.html";<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.interval = 1s;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.timeout = 3s;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.window = 10;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.threshold = 2;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span> }<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>backend hangzhou {<o:p></o:p></p></div><div><p class=MsoNormal> .host = "10.80.125.68";<o:p></o:p></p></div><div><p class=MsoNormal> #.host = "10.36.146.202";<o:p></o:p></p></div><div><p class=MsoNormal> .port = "80";<o:p></o:p></p></div><div><p class=MsoNormal> .connect_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal> .first_byte_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal> .between_bytes_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.probe = {<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.url = "/live.html";<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.interval = 1s;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.timeout = 3s;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.window = 10;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.threshold = 2;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span> }<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal>backend chongqing {<o:p></o:p></p></div><div><p class=MsoNormal> .host = "10.80.125.76";<o:p></o:p></p></div><div><p class=MsoNormal> .port = "80";<o:p></o:p></p></div><div><p class=MsoNormal> .connect_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal> .first_byte_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal> .between_bytes_timeout = 1800s;<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.probe = {<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.url = "/live.html";<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.interval = 1s;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.timeout = 3s;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.window = 10;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.threshold = 2;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span> }<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>director proxy random {<o:p></o:p></p></div><div><p class=MsoNormal> {<o:p></o:p></p></div><div><p class=MsoNormal> .backend = chongqing;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.weight = 2;<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal> {<o:p></o:p></p></div><div><p class=MsoNormal> .backend = nanjing;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.weight = 4;<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal> {<o:p></o:p></p></div><div><p class=MsoNormal> .backend = hangzhou;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>.weight = 4;<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal>}<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>acl purge {<o:p></o:p></p></div><div><p class=MsoNormal> "localhost";<o:p></o:p></p></div><div><p class=MsoNormal> "10.80.125.0"/24;<o:p></o:p></p></div><div><p class=MsoNormal>}<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>sub vcl_recv {<o:p></o:p></p></div><div><p class=MsoNormal> set req.backend = proxy;<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal> if (req.request != "GET" && req.request != "HEAD") {<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal> # POST - Logins and edits<o:p></o:p></p></div><div><p class=MsoNormal> if (req.request == "POST") {<o:p></o:p></p></div><div><p class=MsoNormal> return(pass);<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal> # PURGE - The CacheFu product can invalidate updated URLs<o:p></o:p></p></div><div><p class=MsoNormal> if (req.request == "PURGE") {<o:p></o:p></p></div><div><p class=MsoNormal> if (!client.ip ~ purge) {<o:p></o:p></p></div><div><p class=MsoNormal> error 405 "Not allowed.";<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal> return(lookup);<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal> # Don't cache authenticated requests<o:p></o:p></p></div><div><p class=MsoNormal> if (req.http.Cookie && req.http.Cookie ~ "__ac(|_(name|password|persistent))=") {<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span># Force lookup of specific urls unlikely to need protection<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>if (req.url ~ "\.(js|css)") {<o:p></o:p></p></div><div><p class=MsoNormal> remove req.http.cookie;<o:p></o:p></p></div><div><p class=MsoNormal> return(lookup);<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal> return(pass);<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal> # The default vcl_recv is used from here.<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>sub vcl_hit {<o:p></o:p></p></div><div><p class=MsoNormal> # if (req.request == "PURGE") {<o:p></o:p></p></div><div><p class=MsoNormal> # purge('');<o:p></o:p></p></div><div><p class=MsoNormal> # error 200 "Purged";<o:p></o:p></p></div><div><p class=MsoNormal> # }<o:p></o:p></p></div><div><p class=MsoNormal>}<o:p></o:p></p></div><div><p class=MsoNormal>sub vcl_miss {<o:p></o:p></p></div><div><p class=MsoNormal> # if (req.request == "PURGE") {<o:p></o:p></p></div><div><p class=MsoNormal> # purge('');<o:p></o:p></p></div><div><p class=MsoNormal> # error 200 "Purged";<o:p></o:p></p></div><div><p class=MsoNormal> # }<o:p></o:p></p></div><div><p class=MsoNormal>}<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal># Enforce a minimum TTL, since we can PURGE changed objects actively<o:p></o:p></p></div><div><p class=MsoNormal># from Zope by using the CacheFu product<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>sub vcl_fetch {<o:p></o:p></p></div><div><p class=MsoNormal> if (beresp.ttl < 3600s) {<o:p></o:p></p></div><div><p class=MsoNormal> set beresp.ttl = 3600s;<o:p></o:p></p></div><div><p class=MsoNormal> }<o:p></o:p></p></div><div><p class=MsoNormal>}<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Varnish boots up script<o:p></o:p></p></div><div><p class=MsoNormal>==========================================<o:p></o:p></p></div><div><div><p class=MsoNormal><span class=apple-tab-span> </span>varnishd -f /etc/varnish/my.vcl -s malloc,8192M -a $ip:80 \<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-T $ip:2048 \<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-n vcache-my\<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p thread_pools=2 \<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p thread_pool_max=15000\<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p thread_pool_min=500\<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p listen_depth=2048 \<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p lru_interval=1800 \<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-h classic,169313 \<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p connect_timeout=1800 \<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p http_max_hdr=8192\<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p http_resp_hdr_len=18192\<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>-p max_restarts=6 <o:p></o:p></p></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I try to the backend status:<o:p></o:p></p></div><div><div><p class=MsoNormal>[root@hongkong varnish]# varnishadm -n vcache-my backend.list<o:p></o:p></p></div><div><p class=MsoNormal>==============================================<o:p></o:p></p></div><div><p class=MsoNormal>Backend name Refs Admin Probe<o:p></o:p></p></div><div><p class=MsoNormal>nanjing(10.80.125.66,,80) 68 probe Healthy 8/10<o:p></o:p></p></div><div><p class=MsoNormal>hangzhou(10.80.125.68,,80) 66 probe Healthy 7/10<o:p></o:p></p></div><div><p class=MsoNormal>chongqing(10.80.125.76,,80) 23 probe Healthy 9/10<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I already downgrade the .threshold from 8 to 2, so it can make sure the all the node is in Healthy status, if I set the .threshold to 8,<o:p></o:p></p></div><div><p class=MsoNormal>most of the node will be Sick.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I try to use a script to wget the probe page every 2 seconds, there is no failure, but it is always have failure in the command 'backend.list', <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I have to script to watch the status of my website:<o:p></o:p></p></div><div><p class=MsoNormal>----------------------------------------------------------------------------------<o:p></o:p></p></div><div><div><p class=MsoNormal>#!/bin/bash<o:p></o:p></p></div><div><p class=MsoNormal>pass=0<o:p></o:p></p></div><div><p class=MsoNormal>fail=0<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>while [ 1 ]<o:p></o:p></p></div><div><p class=MsoNormal>do<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>wget <a href="http://mysite/live.html">http://mysite/live.html</a> -O /dev/null<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>if [ $? -eq 0 ];then<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>pass=$(expr $pass + 1)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>else<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>fail=$(expr $fail + 1)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>fi<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>echo -e "pass: $pass\n fail: $fail" <o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>sleep 5<o:p></o:p></p></div><div><p class=MsoNormal>done<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>25% failed, it is very strange thing, I have no clue about it, <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Example result about the varnish log:<o:p></o:p></p></div><div><p class=MsoNormal>=======================================<o:p></o:p></p></div><div><p class=MsoNormal>varnishlog -n vcache-my| tee -a /var/log/varnish.log<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><p class=MsoNormal> 977 RxHeader c Connection: keep-alive<o:p></o:p></p></div><div><p class=MsoNormal> 977 RxHeader c User-Agent: Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25<o:p></o:p></p></div><div><p class=MsoNormal> 977 VCL_call c recv pass<o:p></o:p></p></div><div><p class=MsoNormal> 977 VCL_call c hash<o:p></o:p></p></div><div><p class=MsoNormal> 977 Hash c /<o:p></o:p></p></div><div><p class=MsoNormal> 977 Hash c <a href="http://www.mywebsite.com">www.mywebsite.com</a><o:p></o:p></p></div><div><p class=MsoNormal> 977 VCL_return c hash<o:p></o:p></p></div><div><p class=MsoNormal> 977 VCL_call c pass pass<o:p></o:p></p></div><div><p class=MsoNormal> 977 FetchError c no backend connection<o:p></o:p></p></div><div><p class=MsoNormal> 977 VCL_call c error deliver<o:p></o:p></p></div><div><p class=MsoNormal> 977 VCL_call c deliver deliver<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxProtocol c HTTP/1.1<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxStatus c 503<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxResponse c Service Unavailable<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxHeader c Server: Varnish<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxHeader c Content-Type: text/html; charset=utf-8<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxHeader c Retry-After: 5<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxHeader c Content-Length: 419<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxHeader c Accept-Ranges: bytes<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxHeader c Date: Mon, 07 Jan 2013 18:03:02 GMT<o:p></o:p></p></div><div><p class=MsoNormal> 977 TxHeader c X-Varnish: 2122413499<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>more varnish log:<o:p></o:p></p></div><div><p class=MsoNormal>shaohui dot org/downloads/varnish.tgz<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>this 503 error make my website trap in troubles, my customers can not access my site, I did not have any clue, can some body provide some advices, thanks so much. <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>-- <br>Best regards<br>Shaohui <o:p></o:p></p></div></div></div></body></html>