[Serusers] rewriting to a dns domain

Mike Trest - On Travel Mike at Trest.COM
Tue Apr 22 15:57:33 CEST 2008


Rolf,

The DNS round-robin approach has some serious issues.  Let me explain.

I did a project that required load balancing among 60 sip servers 
from one SER front end.  Each server was designed with a balance 
point of about 100 calls per server.   The fullly loaded capacity was 
thousands of simultaneous calls running through the SER.  By design, 
a few of the remote SIP gateways had lower call-capacity..

A couple of years ago when first deployed, I put a flat round-robin 
list of remote sip  IPs into the edge-access SER.   Worked quite 
well.  Except that when we had wide variations in call duration 
times, the actual loads on the gateway was skewed.   Some gateways 
were carrying 200+ calls while others were carrying only 75 calls 
when they had the same call capacity.  The load balance skew was due 
to flat list (either random or round-robin).

I needed actual capacity and current load information on a 
per-gateway basis.   Because Asterisk was used for the remote sip 
servers, it was fairly easy to poll each gateway on a recurring cycle 
to determine how many calls were active.  We also knew the exact 
capacities for all of the gateways.

The fun work came when we integrated an intelligent feed-back loop into SER.

The key statements that is used in ser.cfg are as follows:

         $remote_gwip =  "xx.yy.xx.nn" ;      # Set attr to next IP 
in list of IPs
         $attr2uri( "$remote_gwip" , "domain");

         if  (!trelay()) {
                 sl_reply_error();
         }

These statements & techniques are well known from several public 
SER.cfg examples.

At first, a simple random hash on the orignation/destination numbers 
was used to select the gateways in IF-THEN-ELSE code logic.  This 
spread the load nicely over a small number of IPs.   For the next 
version, we used a simple DOMAIN attribute to contain the list of IPs 
and and capacity for a larger number of IPs.  Later,  a separate 
MYSQL updates and query() was used to manage the capacity-sensitive 
list of IPs and the current-load feedback information.

So far, all of this work is private.  I am now writing yet another 
SER module to put all of this inside the SER in order to keep all the 
load related feed-back information in shared memory for highest 
performance and to run without any DB at all in SER.  When I get it 
completed, I plan to submit a version of the module as a candidate 
for the SER Out-Of-Box sub-project.

I hope this gives you more ideal on how to get load balancing with a 
per-server feed-back information loop.

Regards,  ..mike..

At 07:38 AM 4/22/2008, Rolf Unger wrote:
>As far as I know there are different options for load-balancing.
>I even saw some modules for load balancing. But it is a bit tricky
>to get this sorted out, because many of the load-balancing options
>think of load balancing between several ser servers or in other words
>having the ser servers as target of the load balancing process.
>
>While I am looking for a load balancing of requests to a remote sip
>server.
>
>I thought that the SRV feature of the DNS system is quite old and long
>time established, so I expected that ser would be able to send and
>evaluate such a request to the DNS.
>There would be nothing special to do for ser, all would be done in the
>DNS with the same roud-robin mechanism that works for MX or A records.
>
>You will read between the lines that I am more familiar with DNS than
>with ser, so I tend for this kind of solution. But it seems that I have
>to look into the source code of ser, to figure out in which way the dns
>lookup is done (or maybe I run a tcpdump on the dns port 53, to check
>what's happening).
>
>Thanks anyway, Rolf.
>
>On Tue, 22 Apr 2008, Miklos Tirpak wrote:
> > I think load-balancing was introduced in version 2.0, so there is no way
> > to configure it in 0.9.x.
> >
> > In 2.x, you need to enable it explicitly:
> > dns_srv_lb=1
> >
> > Regards,
> > Miklos
> >
> > On 04/18/2008 06:06 PM, Rolf Unger wrote:
> > >Hello list users,
> > >
> > >i want to use ser as a load balancing proxy for some PSTN
> > >gateways that I have in use.
> > >My idea is to use the rewritehost() core function and DNS SRV
> > >entries to accomplish this. But it seems that ser is doing a
> > >A record lookup if I simply replace the host with my domain
> > >"mynet.interx":
> > >
> > >  if ( ... ) {
> > >     rewritehost("mynet.interx");
> > >     t_relay();
> > >  }
> > >
> > >Ser is running on the same host (89.49.16.54) as the authorative
> > >nameserver for the mynet.interx domain.
> > >
> > >dig shows that the DNS files are configured in the right way for
> > >load balancing, but I just can't find a way to make ser as a dns client
> > >work like dig.
> > >
> > >If I use "_sip._udp.mynet.interx" it will complain about a bad name.
> > >Well he is partly right, underscores are not allowed in domain names.
> > >
> > >And if I use only the domain in the rewrite command it will contact
> > >the IP of the nameserver of this domain. Or in other words it will send
> > >the messages to itself.
> > >
> > >Using directly rewritehost("sip1.mynet.interx") doesn't help me,
> > >because it wouldn't do load balancing.
> > >
> > >How can I convince ser (version 0.9.6) to use the correct lookup
> > >method for the DNS?
> > >
> > >Any hints are appreciated ...
> > >
> > >Thanks, Rolf.
> > >
> > >----------------------------------------------------------------
> > >
> > >; <<>> DiG 9.2.4 <<>> -t SRV _sip._udp.mynet.interx
> > >
> > >;; QUESTION SECTION:
> > >;_sip._udp.mynet.interx.      IN      SRV
> > >
> > >;; ANSWER SECTION:
> > >_sip._udp.mynet.interx. 21600 IN      SRV     0 50 5060 sip3.mynet.interx.
> > >_sip._udp.mynet.interx. 21600 IN      SRV     0 50 5060 sip1.mynet.interx.
> > >
> > >;; AUTHORITY SECTION:
> > >mynet.interx.         21600   IN      NS      mynet.interx.
> > >
> > >;; ADDITIONAL SECTION:
> > >sip1.mynet.interx.    21600   IN      A       89.49.16.50
> > >sip3.mynet.interx.    21600   IN      A       89.49.16.51
> > >mynet.interx.         21600   IN      A       89.49.16.54
> > >
> > >_______________________________________________
> > >Serusers mailing list
> > >Serusers at lists.iptel.org
> > >http://lists.iptel.org/mailman/listinfo/serusers
>
>--
>  CoolSwitchIP wins Best Product of Show Award in Los Angeles! (Sept 2007)
>
>  ----------------------------------------------------------
>   Rolf Unger                  ._---_;
>   Systems Engineer             /( )\   +49 (0)721 7839312
>   CTI Labs GmbH                '---'
>   Am Sandfeld 18               eMail: rolf.unger at ctilabs.de
>   D-76149 Karlsruhe
>    -- GERMANY --
>  ----------------------------------------------------------
>_______________________________________________
>Serusers mailing list
>Serusers at lists.iptel.org
>http://lists.iptel.org/mailman/listinfo/serusers




More information about the sr-users mailing list