[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