[prev in list] [next in list] [prev in thread] [next in thread]
List: haproxy
Subject: Re: realtime switch to another backend if got 5xx error?
From: Jonah Horowitz <jhorowitz () looksmart ! net>
Date: 2009-07-30 23:05:05
Message-ID: C6977531.191E9F%jhorowitz () looksmart ! com
[Download RAW message or body]
I'm trying to figure out how this works. I desperately need to figure out a
way to monitor servers and either take any server that sends any 5xx error
out of rotation, or failing that, at least redirect the query to a different
server.
The clients that use this web service are SOAP/XML clients, so they're not
"real" web browsers. Also, we don't use any cookies.
It looks like this config just tells the client to make a second request.
Am I missing something here?
I know I can use httpchk, but I don't want to run "inter 1" because then all
my traffic is monitoring traffic. Each server is normally doing several
hundred requests per second, and our haproxy test setup is a couple orders
of magnitude higher on % of 500 errors. (10% vs .01%).
Any ideas?
Thanks,
Jonah
On 6/11/09 7:45 AM, "Maciej Bogucki" <macbogucki@gmail.com> wrote:
> Dawid Sieradzki / Gadu-Gadu S.A. pisze:
>> Hi.
>>
>> The problem is how to silent switch to another backend in realtime if
>> got 500 answer from backend, without http_client knowledge
>> Yes i know, httpchk, but the error 500 is 10 per hour, we don't know
>> when and why.
>> So, it is a race who get 500 first - httpchk or http_client.
>>
>> If You don't know what i mean:
>>
>> example config:
>>
>> ----8<--------
>>
>> frontend
>> (..)
>> default_backend back_1
>>
>> backend back_1
>> option httpchk GET /index.php HTTP/1.1\r\nHost:\ test.pl
>> mode http
>> retries 10
>> balance roundrobin
>>
>> server chk1 127.0.0.1:81 weight 1 check
>> server chk2 127.0.0.1:82 weight 1 check
>> server chk3 127.0.0.1:83 weight 1 check backup
>>
>> ---->8----------
>>
>> http_client -> haproxy -> (backend1|backend2|backend3)
>>
>> let's go inside request:
>>
>> A. haproxy recived request from http_client
>> B. haproxy sent request from http_client to backend1
>> C. backend1 said 500 internal server error
>>
>> I want: :-)
>> D. haproxy sent request from_http to backend2 (or backup backend or
>> another one, or one more time to backend1)
>>
>> I have: :-(
>> D. haproxy sent 500 internal server error to http_client from backend1
>> E. haproxy will mark backend1 as down if got 2 > errror 500 from backend1
>>
>>
>> It is possible to do that?
>>
> Hello,
>
> Yes it is possible but it could be dengerous for some kinde of
> application fe. billing system ;)
> Here is an example how to do it. I know that it is the hack but it works
> good ;P
>
> frontend fr1
> default_backend back_1
> rspirep ^HTTP/...\ [23]0..* \0\nSet-Cookie:\
> cookiexxx=0;path=/;domain=.yourdomain.com
> rspirep ^(HTTP/...)\ 5[0-9][0-9].* \1\ 202\ Again\
> Please\nSet-Cookie:\
> cookiexxx=1;path=/;domain=.yourdomain.com\nRefresh:\ 6\nContent-Length:\
> Lenght_xxx\nContent-Type:\ text/html\n\n<FRAMESET\ cols="100%"><FRAME\
> src="http://www.yourdomain.com/redispatch.pl">
>
> backend back_1
> cookie cookiexxx
> server chk1 127.0.0.1:81 weight 1 check
> server chk2 127.0.0.1:82 weight 1 check
> server chk3 127.0.0.1:83 weight 1 check cookie 1 backup
>
> Remember to set Lenght_xxx properly.
>
> Best Regards
> Maciej Bogucki
>
>
--
Jonah Horowitz · Monitoring Manager · jhorowitz@looksmart.net
W: 415-348-7694 · F: 415-348-7033 · M: 415-513-7202
LookSmart - Premium and Performance Advertising Solutions
625 Second Street, San Francisco, CA 94107
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic