<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>