[OpenSIPS-Users] Load Balancer Issue

Bogdan-Andrei Iancu bogdan at opensips.org
Fri Nov 9 18:37:34 CET 2012


Nilanjan,

The caller script is broken - in ACK, is should be ROUTE hdrs where you 
have the RECORD-ROUTE ones :) .ACK should look like:

U 2012/11/01 11:19:02.006514 X.X.X.23:5080 -> X.X.X.206:5060
ACK sip:X.X.X.5:5070;transport=UDP SIP/2.0.
Route: 
<sip:X.X.X.206;lr;ftag=31168SIPpTag001;did=0ec.de85e9a>,<sip:X.X.X.8;lr>.
Via: SIP/2.0/UDP X.X.X.23:5080;branch=z9hG4bK-31168-1-5.
From: sipp <sip:sipp at X.X.X.23:5080>;tag=31168SIPpTag001.
To: sut <sip:service at X.X.X.5:5070>;tag=30500SIPpTag011.
Call-ID: 1-31168 at X.X.X.23.
CSeq: 1 ACK.
Contact: sip:sipp at X.X.X.23:5080.
Max-Forwards: 70.
Subject: Performance Test.
Content-Length: 0.

I guess it is an err in your sipp scenario.

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com


On 11/09/2012 07:24 PM, Nilanjan Banerjee wrote:
> Hi Bogdan,
>
>   Thanks for your reply. The answer to both your questions is yes. 
> Sample of OK and ACK at the caller as follows:
>
> #
> U 2012/11/01 11:19:02.006375 X.X.X.206:5060 -> X.X.X.23:5080
> SIP/2.0 200 OK.
> Record-Route: <sip:X.X.X.8;lr>, 
> <sip:X.X.X.206;lr;ftag=31168SIPpTag001;did=0ec.de85e9a>.
> Via: SIP/2.0/UDP X.X.X.23:5080;branch=z9hG4bK-31168-1-0.
> From: sipp <sip:sipp at X.X.X.23:5080>;tag=31168SIPpTag001.
> To: sut <sip:service at X.X.X.5:5070>;tag=30500SIPpTag011.
> Call-ID: 1-31168 at X.X.X.23.
> CSeq: 1 INVITE.
> Contact: <sip:X.X.X.5:5070;transport=UDP>.
> Content-Type: application/sdp.
> Content-Length:   137.
> .
> v=0.
> o=user1 53655765 2353687637 IN IP4 X.X.X.5.
> s=-.
> c=IN IP4 X.X.X.5.
> t=0 0.
> m=audio 6000 RTP/AVP 0.
> a=rtpmap:0 PCMU/8000.
>
> #
> U 2012/11/01 11:19:02.006514 X.X.X.23:5080 -> X.X.X.206:5060
> ACK sip:X.X.X.5:5070;transport=UDP SIP/2.0.
> Record-Route: 
> <sip:X.X.X.206;lr;ftag=31168SIPpTag001;did=0ec.de85e9a>,<sip:X.X.X.8;lr>.
> Via: SIP/2.0/UDP X.X.X.23:5080;branch=z9hG4bK-31168-1-5.
> From: sipp <sip:sipp at X.X.X.23:5080>;tag=31168SIPpTag001.
> To: sut <sip:service at X.X.X.5:5070>;tag=30500SIPpTag011.
> Call-ID: 1-31168 at X.X.X.23.
> CSeq: 1 ACK.
> Contact: sip:sipp at X.X.X.23:5080.
> Max-Forwards: 70.
> Subject: Performance Test.
> Content-Length: 0.
> .
>
> Thanks,
> Nilanjan.
>
> On Fri, Nov 9, 2012 at 10:29 PM, Bogdan-Andrei Iancu 
> <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>
>     Hi Nilanjan,
>
>     Check in the trace if :
>     1) the 200 OK getting back to the caller has 2 RR headers (one
>     from Proxy and one from LB).
>
>     2) the ACK from caller (before LB) has 2 Route headers, one
>     pointing to LB, next to Proxy.
>
>     Regards,
>
>     Bogdan-Andrei Iancu
>     OpenSIPS Founder and Developer
>     http://www.opensips-solutions.com
>
>
>     On 11/09/2012 05:01 PM, Nilanjan Banerjee wrote:
>>     Hi Bogdan,
>>
>>       Thanks a lot for your suggestion and sorry for the delay in
>>     getting back with this...I tried the following configuration as
>>     you have suggested for the Load Balancer and the Proxy:
>>
>>     ______________
>>     Load Balancer:
>>     ______________
>>
>>     route{
>>             if (!mf_process_maxfwd_header("3")) {
>>                     sl_send_reply("483","looping");
>>                     exit;
>>             }
>>
>>             if (!has_totag()) {
>>                     # initial request
>>                     record_route();
>>             } else {
>>                     # sequential request -> obey Route indication
>>                     loose_route();
>>                     t_relay();
>>                     exit;
>>             }
>>
>>             # detect resources and do load balancing
>>
>>              load_balance("1","sc");
>>
>>             # LB function returns negative if no suitable destination
>>     (for requested resources) is found,
>>             # or if all destinations are full
>>             if ($retcode<0) {
>>                  sl_send_reply("500","Service full");
>>                  exit;
>>             }
>>
>>             xlog("Selected destination is: $du\n");
>>
>>             # send it out
>>             if (!t_relay()) {
>>                     sl_reply_error();
>>             }
>>     }
>>
>>     ______
>>     Proxy
>>     ______
>>
>>     route{
>>
>>             if (!has_totag()) {
>>                     # initial request
>>                     record_route();
>>             } else {
>>                     # sequential request -> obey Route indication
>>                     loose_route();
>>             }
>>
>>             if (!t_relay()) {
>>                  #   xlog("L_ERR","sl_reply_error\n");
>>                     sl_reply_error();
>>             }
>>
>>     }
>>
>>     However, I am still getting the same error - basically the ACK
>>     and the BYE messages are skipping the Proxy and the response to
>>     the BYE is sent to the Proxy. Here are the sample ACK and BYE for
>>     the following setup I am using:
>>
>>     X.X.X.23:5080 --> X.X.X.206:5060 --> X.X.X.8:5060 --> X.X.X.5:5070
>>     (sipp UAC)       --> (Load Balancer) -->  (Proxy)         -->
>>     (sipp UAS)
>>
>>     #
>>     U 2012/11/01 11:19:22.901990 X.X.X.206:5060 -> X.X.X.5:5070
>>     ACK sip:X.X.X.5:5070;transport=UDP SIP/2.0.
>>     Record-Route:
>>     <sip:X.X.X.206;lr;ftag=31168SIPpTag005;did=9d.087b203>,<sip:X.X.X.8;lr>.
>>     Via: SIP/2.0/UDP X.X.X.206;branch=z9hG4bK0112.20fe162.2.
>>     Via: SIP/2.0/UDP X.X.X.23:5080;branch=z9hG4bK-31168-5-5.
>>     From: sipp <sip:sipp at X.X.X.23:5080>;tag=31168SIPpTag005.
>>     To: sut <sip:service at X.X.X.5:5070>;tag=30500SIPpTag015.
>>     Call-ID: 5-31168 at X.X.X.23 <mailto:5-31168 at X.X.X.23>.
>>     CSeq: 1 ACK.
>>     Contact: sip:sipp at X.X.X.23:5080.
>>     Max-Forwards: 69.
>>     Subject: Performance Test.
>>     Content-Length: 0.
>>     .
>>
>>     #
>>     U 2012/11/01 11:19:22.934118 X.X.X.23:5080 -> X.X.X.206:5060
>>     BYE sip:X.X.X.5:5070;transport=UDP SIP/2.0.
>>     Record-Route:
>>     <sip:X.X.X.206;lr;ftag=31168SIPpTag001;did=0ec.de85e9a>,<sip:X.X.X.8;lr>.
>>     Via: SIP/2.0/UDP X.X.X.23:5080;branch=z9hG4bK-31168-1-7.
>>     From: sipp <sip:sipp at X.X.X.23:5080>;tag=31168SIPpTag001.
>>     To: sut <sip:service at X.X.X.5:5070>;tag=30500SIPpTag011.
>>     Call-ID: 1-31168 at X.X.X.23 <mailto:1-31168 at X.X.X.23>.
>>     CSeq: 2 BYE.
>>     Contact: sip:sipp at X.X.X.23:5080.
>>     Max-Forwards: 70.
>>     Subject: Performance Test.
>>     Content-Length: 0.
>>     .
>>
>>     Looks like the loose routing for the messages after the initial
>>     requests is not happening properly according to the Record-Route
>>     header. Not sure, if I am doing things right in the client side
>>     while introducing the Record-Route header - hence attaching the
>>     modified sipp uac and uas I am using.
>>
>>     Would greatly appreciate your time and help if you could please
>>     throw some light into this matter.
>>
>>     Thanks,
>>     Nil.
>>
>>
>>     On Thu, Oct 25, 2012 at 7:30 PM, Bogdan-Andrei Iancu
>>     <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>>
>>         Hi Nil,
>>
>>         Seems the problem is in the proxy, where you do not do RR at all.
>>
>>         Try
>>
>>         ____________
>>
>>         Proxy:
>>         ____________
>>
>>         route{
>>
>>                 if (!has_totag()) {
>>                         # initial request
>>                         record_route();
>>                 } else {
>>                         # sequential request -> obey Route indication
>>                         loose_route();
>>                 }
>>
>>                 if (!t_relay()) {
>>                      #   xlog("L_ERR","sl_reply_error\n");
>>                         sl_reply_error();
>>                 }
>>         }
>>
>>
>>         Regards,
>>
>>         Bogdan-Andrei Iancu
>>         OpenSIPS Founder and Developer
>>         http://www.opensips-solutions.com
>>
>>
>>         On 10/22/2012 02:25 PM, Nilanjan Banerjee wrote:
>>>         Thanks Bogdan for taking time to respond to my post. I think
>>>         you have guessed it right, I am using the sample routing
>>>         script given in the Load Balancer (LB) tutorial and that is
>>>         most likely sending the ACK and BYE messages directly to
>>>         Client 2 bypassing the Proxy. The routing code snippets I am
>>>         using at the LB and the Proxy are shown below. Could you
>>>         please tell me what's going wrong over here? I am using
>>>         record route support at both the clients. Alternatively if
>>>         you could please tell me what should go in the routing
>>>         blocks of the LB and the Proxy so that all the messages go
>>>         through the LB and the Proxy then that will be of immense
>>>         help too.
>>>
>>>         Regards,
>>>         Nil.
>>>
>>>         ____________
>>>
>>>         Load Balancer:
>>>         ____________
>>>
>>>         route{
>>>                 if (!mf_process_maxfwd_header("3")) {
>>>                         sl_send_reply("483","looping");
>>>                         exit;
>>>                 }
>>>
>>>                 if (!has_totag()) {
>>>                         # initial request
>>>                         record_route();
>>>                 } else {
>>>                         # sequential request -> obey Route indication
>>>                         loose_route();
>>>                         t_relay();
>>>                         exit;
>>>                 }
>>>
>>>                 # detect resources and do balancing
>>>
>>>                  load_balance("1","sc");
>>>
>>>
>>>                 # LB function returns negative if no suitable
>>>         destination (for requested resources) is found,
>>>                 # or if all destinations are full
>>>                 if ($retcode<0) {
>>>                      sl_send_reply("500","Service full");
>>>                      exit;
>>>                 }
>>>
>>>                 xlog("Selected destination is: $du\n");
>>>
>>>                 # send it out
>>>                 if (!t_relay()) {
>>>                         sl_reply_error();
>>>                 }
>>>         }
>>>
>>>         ____________
>>>
>>>         Proxy:
>>>         ____________
>>>
>>>         route{
>>>         record_route();
>>>                 if (!t_relay()) {
>>>                      #   xlog("L_ERR","sl_reply_error\n");
>>>                         sl_reply_error();
>>>                 }
>>>         }
>>>
>>>
>>>         On Sun, Oct 21, 2012 at 7:39 PM, Bogdan-Andrei Iancu
>>>         <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>>>
>>>             Hi Nil,
>>>
>>>             I wild guess is you are not correctly do "loose_route"
>>>             on the LB, so instead of following the Route (to
>>>             OpenSIPS Proxy), it goes directly to end destination in
>>>             RURI (Client 2).
>>>
>>>             Of course, I assume that all parties (LB + Proxy) do
>>>             record_route() for the call, right ?
>>>
>>>             Regards,
>>>
>>>             Bogdan-Andrei Iancu
>>>             OpenSIPS Founder and Developer
>>>             http://www.opensips-solutions.com
>>>
>>>
>>>             On 10/21/2012 10:09 AM, Nilanjan Banerjee wrote:
>>>>             Hello,
>>>>
>>>>               I am trying to build the following setup using
>>>>             OpenSIPS load balancer and the proxy functionality:
>>>>
>>>>             Client 1 (sipp) <----> OpenSIPS Load Balancer <---->
>>>>             OpenSIPS Proxy <----> Client 2 (sipp)
>>>>
>>>>             At the client ends I am using the following commands:
>>>>
>>>>             Client 1: sipp -sn uac -rsa [Load Balancer Address]
>>>>             [Client 2 Address]
>>>>
>>>>             Client 2: sipp -sn uas
>>>>
>>>>             The Load Balancer is configured with a destination as
>>>>             the OpenSIPS Proxy and the Proxy is configured to
>>>>             simply forward the SIP messages based on IP address
>>>>             (using only forward(); in the routing block).
>>>>
>>>>             Now everything (INVITE, OK and ACK messages) works fine
>>>>             except the BYE messages that are getting forwarded by
>>>>             the Load Balancer directly to Client 2 unlike the
>>>>             INVITE, OK and ACK messages that traverse the Proxy.
>>>>             Client 2 however, sends the OK to the BYE to the
>>>>             OpenSIPS Proxy. Since the BYE messages do not traverse
>>>>             the Proxy, the OK to the BYE messages are getting
>>>>             retransmitted repeatedly by Client 2 and the sessions
>>>>             are not getting terminated properly. How do I make the
>>>>             BYE messages to go through the Proxy or the OK message
>>>>             sent directly to the Load Balancer so that the
>>>>             retransmissions do not happen and the sessions get
>>>>             terminated properly?
>>>>
>>>>             [NB: When the Load Balancer is taken out of the loop
>>>>             and the Proxy configuration is kept the same, all the
>>>>             SIP messages traverses the Proxy and everything works
>>>>             fine i.e., the BYE and the OKs to the BYEs are handled
>>>>             properly and sessions get terminated properly.]
>>>>
>>>>             Would greatly appreciate any help in this matter.
>>>>             Thanks in advance.
>>>>
>>>>             Nil.
>>>>
>>>>
>>>>             _______________________________________________
>>>>             Users mailing list
>>>>             Users at lists.opensips.org  <mailto:Users at lists.opensips.org>
>>>>             http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20121109/b92b7246/attachment-0001.htm>


More information about the Users mailing list