[Freeswitch-users] Load balancing solution using pure FreeSWITCH
tculjaga at gmail.com
Tue Mar 16 06:07:39 PDT 2010
this is something you took from Mera .. isn't it ? :)
On Tue, Mar 16, 2010 at 1:04 PM, Vitalii Colosov <vetali100 at gmail.com>wrote:
> Hi dear FS community,
> After a brief analysis of 2 solutions using OpenSIPS and Kamailio (
> http://www.opensips.org/html/docs/modules/devel/load_balancer.html#id226109) and (
> http://wiki.freeswitch.org/wiki/SBC_Setup) I decided to implement my own
> solution using ONLY FreeSWITCH and ONLY 1 table of any database server (we
> use MySQL).
> It works on few of our servers right now without any issues.
> Feel free to reuse / improve it or provide your comments if you see
> something wrong with it.
> We have one routing server (RS) and several Media Servers (MS).
> FreeSWITCH is installed on each server in default configuration.
> --> MS_1
> RS --> MS_2
> --> MS_N
> (Failover can be implemented by adding one more routing server, but this is
> out of scope of current description).
routing server is your single point of failure, you should make two of them
in active/standby mode. What about registered endpoints ? ... where do you
register them?.... you should have a DB replication in order to have the
"registered context" distributed between both routing servers
So, i'd suggest to bring up a LAN_HA and have a floating address between
your routing servers.... of course the you should be using ODBC in the core
to have registrations on both servers.
> Routing server routes calls to media servers based on logic that you can
> easily define.
> (Generally speaking, Routing server can route part of the calls onto
> itself, but to simplify let's say that it will route only to Media Servers).
> you will be loosing calls on the on the MS if it goes down ... maybe there
is a way to "replace" media resource for that calls and keep them going even
after the MS went down.
> Routing server is used to register subscribers (it will have directory
> Media servers do NOT contain files with users (security issue? probably
> should be managed on dialplan stage of media servers by comparing ip
> addresses of requests).
consider ODBC in the core!
> The whole routing can be presented by the following chain:
> Call arrives into Default context-->RS default dialplan-->Lua script-->PHP
> script to get destination MEDIA SERVER IP-->back to Lua script-->Bridge
> "sofia/external/" to determined MS IP address-->[Bridge to fail over media
> server, optionally]-->End
> Let's say we need to route all international calls based on less loaded
> server (other logic can be easily implemented in PHP script as well).
> *1. RS Dialplan: default.xml*
> <extension name="route">
> <condition field="destination_number"
> <action application="lua" data="route.lua $2"/>
> *2. RS Lua script: route.lua*
> called_number = argv; //without "00"
> api = freeswitch.API();
> server_ip_address = api:executeString("curl
> forwarding_session_string =
> session:setVariable("bypass_media", "true"); //described below!!!
do your bridging in the dialplan not from a script... you will get better
> *3. PHP script: get_server_ip.php*
> <<< ANY PHP CODE THAT WILL QUERY COMMON DATABASE AND WILL DETERMINE LESS
> LOADED AT THE MOMENT SERVER>>>
> All Media Servers should provide information about their current load into
> one common database (dedicated server or routing server can be used for
> If you use scripts you can update this table on starting a call and after
> call finished.
> Or you can create a job that will query FreeSWITCH and will update the
> database every, say, 10 seconds.
> Basically that's all (really!)
> I beleive it can be used for most general purpose scenarios without need of
> third-party tools.
> The only problem we had from the beginning was that RTP media traffic was
> passing thru both servers: RS and Media Server.
> But after we added the following command to the routing script, RTP media
> traffic started to pass only thru Media server, making RS almost free.
> session:setVariable("bypass_media", "true");
anyhow it is a good start ... with a custom module for media server
"kepalive" and resource migration it could be a great solution.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the FreeSWITCH-users