[Freeswitch-users] Load balancing solution using pure FreeSWITCH

Ghulam Mustafa mustafa.pk at gmail.com
Tue Mar 16 06:41:05 PDT 2010


On Tue, Mar 16, 2010 at 6:31 PM, Vitalii Colosov <vetali100 at gmail.com>wrote:

> Tihomir,
>            Could you please add more details to the following?
>
>            "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."
>

no problem, you can update your knowledge base for free, check
http://www.linux-ha.org/wiki/Main_Page

>
> Do you have any links that describe how to implement this kind of fail
> over?
>
> I thought about configuring 2 DNS servers on 2 Routing servers, so if one
> will go down, traffic will be addressed to another, but at the moment I
> don't have enough knowledge how to implement this.
>
> Thanks,
> vIT
>
>
>
> 2010/3/16 Vitalii Colosov <vetali100 at gmail.com>
>
> Basically this solution gives me exactly what I need at the moment.
>>
>> If there is a still special reason to use OpenSIPS, maybe we should expect
>> opinion of some better FS experts then me :-)
>>
>> vIT
>>
>> 2010/3/16 Alfredo Quiroga-Villamil <lawwton at gmail.com>
>>
>> Vit:
>>>
>>> Nice email, very informative; curious to find out the reasons why you
>>> decided to go with FS instead of OpenSip. We soon have to make a
>>> similar decision and would like to find out the rationale behind it.
>>>
>>> Thanks,
>>>
>>> Alfredo
>>>
>>> On Tue, Mar 16, 2010 at 8:04 AM, 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 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).
>>> >
>>> > Routing server is used to register subscribers (it will have directory
>>> files
>>> >
>>> ./freeswitch/conf/directory/default/10001whatever.xml-99999whatever.xml).
>>> > 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).
>>> >
>>> > 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
>>> > <include>
>>> >         <extension name="route">
>>> >                 <condition field="destination_number"
>>> > expression="^(00)(\d+)">
>>> >                         <action application="lua" data="route.lua $2"/>
>>> >                 </condition>
>>> >         </extension>
>>> > </include>
>>> >
>>> > 2. RS Lua script: route.lua
>>> > called_number = argv[1]; //without "00"
>>> > api = freeswitch.API();
>>> > server_ip_address = api:executeString("curl
>>> > http://localhost/get_server_ip.php);
>>> > forwarding_session_string =
>>> > "sofia/external/"..called_number.."@"..server_ip_address;
>>> > session:setVariable("bypass_media", "true"); //described below!!!
>>> > session:execute("bridge",forwarding_session_string);
>>> > 3. PHP script: get_server_ip.php
>>> > <<<  ANY PHP CODE THAT WILL QUERY COMMON DATABASE AND WILL DETERMINE
>>> LESS
>>> > LOADED AT THE MOMENT SERVER>>>
>>> > die($less_loaded_server_ip);
>>> >
>>> > All Media Servers should provide information about their current load
>>> into
>>> > one common database (dedicated server or routing server can be used for
>>> > database).
>>> > 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.
>>> > P.S.
>>> > 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");
>>> >
>>> >
>>> > Best regards,
>>> > vIT
>>> >
>>> > _______________________________________________
>>> > FreeSWITCH-users mailing list
>>> > FreeSWITCH-users at lists.freeswitch.org
>>> > http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> > UNSUBSCRIBE:
>>> http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> > http://www.freeswitch.org
>>> >
>>> >
>>>
>>> _______________________________________________
>>> FreeSWITCH-users mailing list
>>> FreeSWITCH-users at lists.freeswitch.org
>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> http://www.freeswitch.org
>>>
>>
>>
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>


-- 
Ghulam Mustafa
cell: +92 333.611.7681
sip: cyrenity at ekiga.net
mail: mustafa.pk at gmail.com
web: cyrenity.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20100316/1b50e000/attachment-0002.html 


More information about the FreeSWITCH-users mailing list