[Freeswitch-users] (yet another?) freeswitch load balancer

Dave Horton dave at dchorton.com
Tue Dec 1 18:58:40 MSK 2015


Ah, ok.  Thanks for the clarification.

I don’t have a perfect solution matching that at the moment, since the SIP proxy is transaction stateful and that transaction state will be lost at the point of failover for a transaction in progress at that moment.  However, the impact on transactions in progress may be minimal, because incoming responses back from freeswitch _will_ be properly routed back to the sender (based on the Via header).  What you would lose for those transactions in flight would be the crankback to try a different freeswitch server if you got a failure response from one.  Depending on your requirements, that may be ok.  (For the “perfect” solution I would need to modify the underlying sip server to offload transaction state into redis or something like that so full transaction state would be available on failover, which is an idea I’ve been toying with).

Of course, running the proxy on two servers with a floating IP is simple, I use keepalived for that and could share my config if that is useful.  I also modify the sysctl params to allow the offline node to bind to a non-local IP so that both SIP servers (online and offline) are running all of the time and there is no delay on startup/failover as the SIP stack is already running and ready for traffic.

Dave

On Dec 1, 2015, at 10:47 AM, Avi Marcus <avi at avimarcus.net> wrote:

I think what Regis M wants to know -- and I'm curious -- is how to configure like so:

Set up your load balancer on two different machine, with a floating IP. When requests come in, it forwards them to the list of FS servers.

The point of the statelessness is that if the floating IP is switched at any moment, you don't lose any calls since it's "stateless" and the SIP Dialog contains all the necessary information.

I'd really like to check this out since I am "all-in" to node.js and kamailio seems rather obscure to me.


-Avi Marcus

On Tue, Dec 1, 2015 at 5:02 PM, Dave Horton <dave at dchorton.com <mailto:dave at dchorton.com>> wrote:
I’m not sure I completely understand your desired setup — when you say “same config available on two different IPs”, are you talking about having two freeswitch servers available as potential targets on two different IPs?  Or the proxy running on a multi-homed host that has two different IPs?  (Or two instances of the proxy running on different IPs but with the same config?)

In any case, to be a load-balancing proxy really means that you need to be at least transaction stateful — so I don’t think you are actually looking for a stateless proxy.

To the extent you want to modify the proxy to change destinations at any time (i.e. to switch new calls to a different freeswitch without informing customers), this proxy will let you do that.  You simply would update the configuration file to add your new freeswitch server IP address and associated information, and (if desired) remove the old one.  You do not need to restart anything either — changes like that to the config file are automatically noticed and taken into affect immediately.

Dave

On Dec 1, 2015, at 9:52 AM, Regis M <regis.freeswitch.org at tornad.net <mailto:regis.freeswitch.org at tornad.net>> wrote:

What I need is to have  a frontal proxy with same config available on 2 differents IPs. 

Both of them send request to the same Freeswitch based on config rules.

Then, if I change the config and reload both proxy, I could use another Freeswitch without informing customers.

The running calls could be lose.

IP failover with no proxy and 1 freeswitch is not an option for me..

The proxy need to act as nginx for web... He choose destination based on request rules..


So for me I thnik I need a Stateless proxy. But I'm not interested by the call failover potential...
But Your first definition sounds good for me..

Regards,


2015-12-01 15:36 GMT+01:00 Dave Horton <dave at dchorton.com <mailto:dave at dchorton.com>>:
When people talk about stateful or stateless there can be different interpretations, so I will try to be specific:

Call stateful (or stateless): meaning whether the proxy remains in the dialog after a successful INVITE transaction (e.g. to receive subsequent BYE message, in order to do accounting etc).  With this proxy, you have a choice of whether to be call stateful or not (depends on setting of the ‘remainInDialog’ property to the req.proxy method)

Stateless proxy: an entity that does not maintain transaction state of client or server SIP transactions, simply forwards request.  This proxy is _not_ a stateless proxy, because it needs to maintain transaction state in order to do things like handle temporary failures from one freeswitch and then land the call on another.

Dave

On Dec 1, 2015, at 9:14 AM, Regis M <regis.freeswitch.org at tornad.net <mailto:regis.freeswitch.org at tornad.net>> wrote:

Hi Dave,

Does your proxy could act as a stateless proxy or not ?
I'm looking for a stateless proxy, I had ever test your solution but haven't find the answer to this question during my test.

Thanks

Regards,


2015-12-01 14:32 GMT+01:00 Dave Horton <dave at dchorton.com <mailto:dave at dchorton.com>>:
It is a proxy.  I am using the sofia sip stack (specifically nta) which is capable of any type of sip processing, but this application uses it as a SIP proxy.


On Dec 1, 2015, at 8:20 AM, Vik Killa <vipkilla at gmail.com <mailto:vipkilla at gmail.com>> wrote:

Hi,
I see this is described as a SIP Proxy but you are using the sofia SIP stack.
Is this technically a B2BUA or a Proxy?
Thanks,
/V

On Tue, Dec 1, 2015 at 8:14 AM, Dave Horton <dave at dchorton.com <mailto:dave at dchorton.com>> wrote:
I’ve developed a nodejs-based freeswitch load balancer that may be of interest to those who prefer Javascript to configuration file-driven routing.  Even better if you are a nodejs developer familiar with expressjs or connect, then you may find the nuts of it to be very simple:


app.invite( function(req, res) {
   ...
    req.proxy({
       remainInDialog: false,
       handleRedirects: true,
       provisionalTimeout: '1s',
       destination: targets
    }, function(err) {
      if( err ) {
        console.error('Error proxying request: ', err) ;
      }
   }) ;
}) ;


Details here:

http://davehorton.github.io/drachtio-fs-load-balancing-proxy/ <http://davehorton.github.io/drachtio-fs-load-balancing-proxy/>





_________________________________________________________________________
Professional FreeSWITCH Consulting Services:
consulting at freeswitch.org <mailto:consulting at freeswitch.org>
http://www.freeswitchsolutions.com <http://www.freeswitchsolutions.com/>

Official FreeSWITCH Sites
http://www.freeswitch.org <http://www.freeswitch.org/>
http://confluence.freeswitch.org <http://confluence.freeswitch.org/>
http://www.cluecon.com <http://www.cluecon.com/>

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org <mailto:FreeSWITCH-users at lists.freeswitch.org>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users <http://lists.freeswitch.org/mailman/listinfo/freeswitch-users>
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users <http://lists.freeswitch.org/mailman/options/freeswitch-users>
http://www.freeswitch.org <http://www.freeswitch.org/>
_________________________________________________________________________
Professional FreeSWITCH Consulting Services: 
consulting at freeswitch.org <mailto:consulting at freeswitch.org>
http://www.freeswitchsolutions.com <http://www.freeswitchsolutions.com/>

Official FreeSWITCH Sites
http://www.freeswitch.org <http://www.freeswitch.org/>
http://confluence.freeswitch.org <http://confluence.freeswitch.org/>
http://www.cluecon.com <http://www.cluecon.com/>

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org <mailto:FreeSWITCH-users at lists.freeswitch.org>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users <http://lists.freeswitch.org/mailman/listinfo/freeswitch-users>
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users <http://lists.freeswitch.org/mailman/options/freeswitch-users>
http://www.freeswitch.org <http://www.freeswitch.org/>

_________________________________________________________________________
Professional FreeSWITCH Consulting Services:
consulting at freeswitch.org <mailto:consulting at freeswitch.org>
http://www.freeswitchsolutions.com <http://www.freeswitchsolutions.com/>

Official FreeSWITCH Sites
http://www.freeswitch.org <http://www.freeswitch.org/>
http://confluence.freeswitch.org <http://confluence.freeswitch.org/>
http://www.cluecon.com <http://www.cluecon.com/>

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org <mailto:FreeSWITCH-users at lists.freeswitch.org>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users <http://lists.freeswitch.org/mailman/listinfo/freeswitch-users>
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users <http://lists.freeswitch.org/mailman/options/freeswitch-users>
http://www.freeswitch.org <http://www.freeswitch.org/>

_________________________________________________________________________
Professional FreeSWITCH Consulting Services: 
consulting at freeswitch.org <mailto:consulting at freeswitch.org>
http://www.freeswitchsolutions.com <http://www.freeswitchsolutions.com/>

Official FreeSWITCH Sites
http://www.freeswitch.org <http://www.freeswitch.org/>
http://confluence.freeswitch.org <http://confluence.freeswitch.org/>
http://www.cluecon.com <http://www.cluecon.com/>

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org <mailto:FreeSWITCH-users at lists.freeswitch.org>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users <http://lists.freeswitch.org/mailman/listinfo/freeswitch-users>
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users <http://lists.freeswitch.org/mailman/options/freeswitch-users>
http://www.freeswitch.org <http://www.freeswitch.org/>

_________________________________________________________________________
Professional FreeSWITCH Consulting Services:
consulting at freeswitch.org <mailto:consulting at freeswitch.org>
http://www.freeswitchsolutions.com <http://www.freeswitchsolutions.com/>

Official FreeSWITCH Sites
http://www.freeswitch.org <http://www.freeswitch.org/>
http://confluence.freeswitch.org <http://confluence.freeswitch.org/>
http://www.cluecon.com <http://www.cluecon.com/>

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org <mailto:FreeSWITCH-users at lists.freeswitch.org>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users <http://lists.freeswitch.org/mailman/listinfo/freeswitch-users>
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users <http://lists.freeswitch.org/mailman/options/freeswitch-users>
http://www.freeswitch.org <http://www.freeswitch.org/>

_________________________________________________________________________
Professional FreeSWITCH Consulting Services: 
consulting at freeswitch.org <mailto:consulting at freeswitch.org>
http://www.freeswitchsolutions.com <http://www.freeswitchsolutions.com/>

Official FreeSWITCH Sites
http://www.freeswitch.org <http://www.freeswitch.org/>
http://confluence.freeswitch.org <http://confluence.freeswitch.org/>
http://www.cluecon.com <http://www.cluecon.com/>

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org <mailto:FreeSWITCH-users at lists.freeswitch.org>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users <http://lists.freeswitch.org/mailman/listinfo/freeswitch-users>
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users <http://lists.freeswitch.org/mailman/options/freeswitch-users>
http://www.freeswitch.org <http://www.freeswitch.org/>

_________________________________________________________________________
Professional FreeSWITCH Consulting Services:
consulting at freeswitch.org <mailto:consulting at freeswitch.org>
http://www.freeswitchsolutions.com <http://www.freeswitchsolutions.com/>

Official FreeSWITCH Sites
http://www.freeswitch.org <http://www.freeswitch.org/>
http://confluence.freeswitch.org <http://confluence.freeswitch.org/>
http://www.cluecon.com <http://www.cluecon.com/>

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org <mailto:FreeSWITCH-users at lists.freeswitch.org>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users <http://lists.freeswitch.org/mailman/listinfo/freeswitch-users>
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users <http://lists.freeswitch.org/mailman/options/freeswitch-users>
http://www.freeswitch.org <http://www.freeswitch.org/>

_________________________________________________________________________
Professional FreeSWITCH Consulting Services: 
consulting at freeswitch.org
http://www.freeswitchsolutions.com

Official FreeSWITCH Sites
http://www.freeswitch.org
http://confluence.freeswitch.org
http://www.cluecon.com

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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20151201/41d38900/attachment-0001.html 


Join us at ClueCon 2016 Aug 8-12, 2016
More information about the FreeSWITCH-users mailing list