[OpenSIPS-Users] Load_Balancer module - disabling GW from routing script

Bogdan-Andrei Iancu bogdan at voice-system.ro
Wed Sep 22 11:43:43 CEST 2010


Hi Alejandro,

You need to extend your test to catch only "locally generated timeouts" 
and to skip "received timeouts". For this use the t_local_replied() 
functions :
          http://www.opensips.org/html/docs/modules/1.6.x/tm.html#id272062

And make the condition like:
          

if (t_check_status("(408)") && t_local_replied("all")) {


Regards,
Bogdan

Alejandro Recarey wrote:
> Hi all,
>
> I am currently trying to enable GW disabling from inside the routing
> script with the load balancer.
>
> I managed to get it working reading the module documentation, but now
> I have a problem. I want the gateway to be disabled only if it is
> unreachable, that is, if it does not answer at all to the SIP INVITE
> being sent, but the Asterisk Gatways are being disabled all the time,
> every 5 - 10 minutes. The part of routing script that takes care of
> the load balancing is:
>
>
> . . . (ommited) . . .
>
> # ---- Outbound to Load Balancer---- #
>     if(uri=~"^sip:5378[0-9]*+@"){
>     route(7);
> }
>
>
> # ---- Load Balancer ---- #
> route[7] {
>     if (load_balance("2","pstn","1")) {
>         if (is_method("INVITE")) {
>                 t_on_branch("2");
>                 t_on_reply("2");
>                 t_on_failure("2"); #custom failure route for LB
>         }
>
>         if (!t_relay()) {
>                 sl_reply_error();
>         };
>         exit;
>
>     }
>     else{
>         sl_send_reply("503","Service full");
>         exit;
>     }
> }
>
>
> # Failure route for Load Balancer
> failure_route[2] {
>         if (t_was_cancelled()) {
>                 exit;
>         }
>
>         # If status is 408 - Timeout, disable route
>         if (t_check_status("(408)")) {
>                 lb_disable();
>
>                 # Try to load balance once again
>                 if ( load_balance("2","pstn","1") ) {
>                         t_on_failure("1");
>                         t_relay();
>                 } else {
>                         t_reply("503","Service Unavailable");
>                 }
>         }
> }
>
> If I execute opensipctl fifo lb_list:
>
> Destination:: sip:x.x.x.x id=5 group=2 enabled=yes auto-re=on
>         Resource:: pstn max=90 load=13
> Destination:: sip:x.x.x.x id=6 group=2 enabled=yes auto-re=on
>         Resource:: pstn max=60 load=9
> Destination:: sip:x.x.x.x id=7 group=2 enabled=yes auto-re=on
>         Resource:: pstn max=60 load=9
>
>
> As you can see, I only disable the GW if I receive a SIP 408 message.
> I thought this message would only be generated if the SIP INVITE timed
> out, but it seems Asterisk is sending a 408 message for normal call
> reasons (maybe when the dialed party does not pick up and the dial
> times out??)
>
> This is a huge problem because my termination GW are being disabled
> all of the time, and randomly. Since my OpenSIPS server is in
> production and I cannot reload config until tonight I have setup a
> cronjob that enables the gateways every minute, but it's hardly an
> optimal solution ;)
>
> Does anybody have experience with the setup described? (OpenSIPS
> Load_Balancer + Asterisk with in script disable of bad GW's?). Any
> pointers would be appreciated, thanks!
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>   


-- 
Bogdan-Andrei Iancu
OpenSIPS Bootcamp
15 - 19 November 2010, Edison, New Jersey, USA
www.voice-system.ro




More information about the Users mailing list