Documentation -> Tutorials -> Load Balancing
This page has been visited 49363 times.
This tutorial applies for OpenSIPS versions 1.5, 1.6, 1.7 .
1. Load Balancing in OpenSIPS
The "load-balancing" module comes to provide traffic routing based on load. Shortly, when OpenSIPS routes calls to a set of destinations, it is able to keep the load status (as number of ongoing calls) of each destination and to choose to route to the less loaded destination (at that moment).
OpenSIPS is aware of the capacity of each destination - it is preconfigured with the maximum load accepted by the destinations. To be more precise, when routing, OpenSIPS will consider the less loaded destination not the destination with the smallest number of ongoing calls, but the destination with the largest available slot.
Also, the "load-balancing" (LB) module is able to receive feedback from the destinations (if they are capable of). This mechanism is used for notifying OpenSIPS when the maximum capacity of a destination changed (like a GW with more or less E1 cards).
The "load-balancing" functionality comes to enhance the "dispatcher" one. The difference comes in having or not load information about the destinations where you are routing to:
- Dispatcher has no load information - it just blindly forwards calls to the destinations based on a probabilistic dispersion logic. It gets no feedback about the load of the destination (like how many calls that were sent actually were established or how many are still going).
- Load-balancer is load driven - LB routing logic is based primary on the load information. The LB module is using the DIALOG module in order to keep trace of the load (ongoing calls).
A Workshop on this topic was held at Amoocon (former AsteriskTag) in Rostock, 4-5 May 2009
2. Load Balancing - how it works
When looking at the LB implementation in OpenSIPS, we have 3 aspects:
2.1 Destination set
A destination is defined by its address (a SIP URI) and its description as capacity.
Form the LB module perspective, the destinations are not homogeneous - they are not alike; and not only from capacity point of view, but also from what kind of services/resources they offer. For example, you may have a set of Yate/Asterisk boxes for media-related services -some of them are doing transcoding, other voicemail or conference, other simple announcement , other PSTN termination. But you may have mixed boxes - one box may do PSTN and voicemail in the same time. So each destination from the set may offer a different set of services/resources.
So, for each destination, the LB module defines the offered resources, and for each resource, it defines the capacity / maximum load as number of concurrent calls the destination can handle for that resource.
Example:
4 destinations/boxes in the LB set
1) offers 30 channels for transcoding and 32 for PSTN
2) offers 100 voicemail channels and 10 for transcoding
3) offers 50 voicemail channels and 300 for conference
4) offers 10 voicemail, 10 conference, 10 transcoding and 32 PSTN
This translated into the following setup:
+----+----------+------------------------+---------------------------------+
| id | group_id | dst_uri | resources |
+----+----------+------------------------+---------------------------------+
| 1 | 1 | sip:yate1.mycluset.net | transc=30; pstn=32 |
| 2 | 1 | sip:yate2.mycluset.net | vm=100; transc=10 |
| 3 | 1 | sip:yate3.mycluset.net | vm=50; conf=300 |
| 4 | 1 | sip:yate4.mycluset.net | vm=10;conf=10;transc=10;pstn=32 |
+----+----------+------------------------+---------------------------------+
For runtime, the LB module provides MI commands for:
- reloading the definition of destination sets
- changing the capacity for a resource for a destination
2.2 Invoking Load-balancing
Using the LB functionality is very simple - you just have to pass to the LB module what kind of resources the call requires.
The resource detection is done in the OpenSIPS routing script, based on whatever information is appropriated. For example, looking at the RURI (dialed number) you can see if the call must go to PSTN or if it a voicemail or conference number; also, by looking at the codecs advertised in the SDP, you can figure out if transcoding is or not also required.
if (!load_balance("1","transc;pstn")) {
sl_send_reply("500","Service full");
exit;
}
The first parameter of the function identifies the LB set to be used (see the group_id column in the above DB snapshot). Second parameter is list of the required resource for the call.
The load_balance() will automatically create the dialog state for the call (in order to monitor it) and will also allocate the requested resources for it (from the selected box).
The function will set as destination URI ($du) the address of the selected destination/box.
The resources will be automatically released when the call terminates.
The LB module provides an MI function that allows the admin to inspect the current load over the destinations.
2.3 The LB logic
The logic used by the LB module to select the destination is:
- gets the destination set based on the group_id (first parameter of the load_balance() function)
- selects from the set only the destinations that are able to provide the requested resources (second parameter of the load_balance() function)
- for the selected destinations, it evaluated the current load for each requested resource
- the winning destination is the one with the biggest value for the minimum available load per resources.
Example:
4 destinations/boxes in the LB set
1) offers 30 channels for transcoding and 32 for PSTN
2) offers 100 voicemail channels and 10 for transcoding
3) offers 50 voicemail channels and 300 for conference
4) offers 10 voicemail, 10 conference, 10 transcoding and 32 PSTN
when calling load_balance("1","transc;pstn") ->
1) only boxes (1) and (4) will be selected at as they offer both transcoding and pstn
2) evaluating the load :
(1) transcoding - 10 channels used; PSTN - 18 used
(4) transcoding - 9 channels used; PSTN - 16 used
evaluating available load (capacity-load) :
(1) transcoding - 20 channels used; PSTN - 14 used
(4) transcoding - 1 channels used; PSTN - 16 used
3) for each box, the minimum available load (through all resources)
(1) 14 (PSTN)
(2) 1 (transcoding)
4) final selected box in (1) as it has the the biggest (=14) available load for the most loaded resource.
The selection algorithm tries to avoid the intensive usage of a resource per box.
3. Study Case: routing the media gateways
Here is the full configuration and script for performing LB between media peers.
3.1 Configuration
Let's consider the case previously described:
4 destinations/boxes in the LB set
1) offers 30 channels for transcoding and 32 for PSTN
2) offers 100 voicemail channels and 10 for transcoding
3) offers 50 voicemail channels and 300 for conference
4) offers 10 voicemail, 10 conference, 10 transcoding and 32 PSTN
This translated into the following setup:
+----+----------+------------------------+---------------------------------+
| id | group_id | dst_uri | resources |
+----+----------+------------------------+---------------------------------+
| 1 | 1 | sip:yate1.mycluset.net | transc=30; pstn=32 |
| 2 | 1 | sip:yate2.mycluset.net | vm=100; transc=10 |
| 3 | 1 | sip:yate3.mycluset.net | vm=50; conf=300 |
| 4 | 1 | sip:yate4.mycluset.net | vm=10;conf=10;transc=10;pstn=32 |
+----+----------+------------------------+---------------------------------+
3.2 OpenSIPS Scripting
debug=1
memlog=1
fork=yes
children=2
log_stderror=no
log_facility=LOG_LOCAL0
disable_tcp=yes
disable_dns_blacklist = yes
auto_aliases=no
check_via=no
dns=off
rev_dns=off
listen=udp:xxx.xxx.xxx.xxx:5060
loadmodule "modules/maxfwd/maxfwd.so"
loadmodule "modules/sl/sl.so"
loadmodule "modules/db_mysql/db_mysql.so"
loadmodule "modules/tm/tm.so"
loadmodule "modules/xlog/xlog.so"
loadmodule "modules/uri/uri.so"
loadmodule "modules/rr/rr.so"
loadmodule "modules/dialog/dialog.so"
loadmodule "modules/mi_fifo/mi_fifo.so"
loadmodule "modules/mi_xmlrpc/mi_xmlrpc.so"
loadmodule "modules/signaling/signaling.so"
loadmodule "modules/textops/textops.so"
loadmodule "modules/load_balancer/load_balancer.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
modparam("dialog", "dlg_flag", 13)
modparam("dialog", "db_mode", 1)
modparam("dialog", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
modparam("rr","enable_double_rr",1)
modparam("rr","append_fromtag",1)
modparam("load_balancer", "db_url","mysql://opensips:opensipsrw@localhost/opensips")
route{
if (!mf_process_maxfwd_header("3")) {
sl_send_reply("483","looping");
exit;
}
if (!has_totag()) {
# initial request
record_route();
} else {
# sequential request -> obey Route indication
loose_route();
t_relay();
exit;
}
# handle cancel and re-transmissions
if ( is_method("CANCEL") ) {
if ( t_check_trans() )
t_relay();
exit;
}
# from now on we have only the initial requests
if (!is_method("INVITE")) {
send_reply("405","Method Not Allowed");
exit;
}
# detect resources and do balancing
if ($rU=~"^1") {
# looks like a Conference call
load_balance("1","conf");
} else if ($rU=~"^2") {
# looks like a VoiceMail call
load_balance("1","vm");
} else {
# PSTN call, but the GWs supports only G711
# for calls without G711, transcoding will be used on the GW
if ( !search_body("G711") ) {
load_balance("1","transc;pstn");
} else {
load_balance("1","pstn");
}
}
# LB function returns negative if no suitable destination (for requested resources) is found,
# or if all destinations are full
if ($retcode<0) {
sl_send_reply("500","Service full");
exit;
}
xlog("Selected destination is: $du\n");
# send it out
if (!t_relay()) {
sl_reply_error();
}
}
4. Comments
Does this have to use Yate? Can Asterisk or FreeSwitch be used?
[bogdan] - there is no dependency (regarding the application you LB) - so you can have Yate, Asterisk, FreeSwitch, Cisco GW, Audiocodec GW, etc
— 20 March 2009, 02:41
This is nice and simple. I am still learning OpenSIPs, but is it possible to combine this with a registrar function? Looking how to combine Load Balancing to a few Asterisk servers with OpenSIP also performing the registration.
[bogdan] - Of course it is possible - if you look at the default opensips cfg (that has the registrar capabilities), for processing the INVITE requests you can use load_balancing() function. If you have issues, use the mailing list for getting help
Hi. I´ve installed the new version (1.5) and I'm using load_balancer module but I'm having a problem... When a SIP server goes down and if it had the best attributes, load_balancer keeps sending the calls to it and all my calls drop. Is this normal? Can Opensips notices that this server is not working and pass it to the next sip server?
Thank you!
[bogdan]- unfortunately in the current version (1.5) you can not disable from script a destination; but you can do it from outside, via MI command (lb_resize to 0); you can use exec() from script to run the opensipsctl and resize the 0 the guilty server. Hope it will help. - btw, we can do disable from script with 1.6
Thank you bogdan, it really helped me.
Regards!
What if you have, let's say, 3 phones. You want each phone being able to contact each others. BUT, if you don't fall on the same server where the REGISTER was broadcasted, the PABX won't know the IP of the callee, and call won't be achieved.
Is there a way to bounce REGISTER to multiple PABX ?
Thanks !
[bogdan] - I do not think this is a typical case of LB (as there is some relation between the PBX you balance). What you can do is to separately deal with REGISTER and fork it (from LB server, with no LB) to all PBX and to do do LB only for INVITEs. Just an idea
Hi,
I also would appreciate if someone could post here a howto of integration of opensips with asterisk.
asterisktech
[bogdan] - what kind of "integration" you have in mind? I mean what opensips to do and what asterisk to do.
Hi,
what I like to do is to connect more than one client (e.g. desktop phone and soft phone) to one asterisk sip account. Asterisk cannot handle this because only one client can register.
So opensips should work as sort of client inbetween. Username/password verification should be done by Asterisk.
Does anyone know how to do this and give me a sample configuration for opensips?
Thanks
HI,
I am load balancing the calls between gateways with different port values. Say I have total of 15 ports, the load balance modules works fine till 15th call. At 16th call load balance fails(this is the only call made,means all 15 ports are free ) and I am not getting calls on the gateway if I don't issue lb_reload command.
I would appreciate if someone could let me know any other method to call get the current load status automatically set without entering the lb_reload comman statement.
thanks
[bogdan] - upgrade from svn to the latest version and if you still have issue, pleas post on the users mailing list
Hi,
I'm getting the error:
ERROR:core:yyparse: module 'mi_xmlrpc.so' not found in '/usr/local/lib/opensips/modules/'
all the time whenever I try to use the load_balancer module.
This is something I got since 1.5.1 and thought was a bug in that version and used dispatcher instead.
Today, I made a fresh install of opensips 1.5.2 over a Centos 5.1 and got the same error.
Could somebody point me in the right direction to solve this problem ?
thanks!
Hello Bogdan,
Great work... what if one of balanced server has ended the call in case of the limit call time ? - OpenSIPS doesn't release resources as I realised... - how can I tell LB module that it should release resources? Is there any way to shere information about resources between LB and VOIP(switches,gateways,etc) ?
[bogdan] - if the call is release properly (from signalling point of view, with a BYE) the LB will see the call as terminated and release the resources.
Javier,
You need to uncomment mi_xmlrpc in Makefile to compile the module , but you will require xmlrpc-c and xmlrpc-c-devel installed ( I am using xmlrpc-c-1.16.6-1.1582 on Centos 5.3) to compile 1.5.2. So far its working but its not supported. Will update this if I find issues with xmlrpc-c version.
Plimaye, Thank you very much for your help.
I did that and certainly, it was in the exclude modules at makefile. I commented it.
After that, I ran make clean, make and make install again and compiled ok (no errors) but I can't find xmlrpc-c and xmlrpc-c-devel to install.
and every time I try to run opensips, I get:
ERROR:core:sr_load_module: could not open module <mi_xmlrpc.so>: mi_xmlrpc.so: cannot open shared object file: No such file or directory
and really mi_xmlrpc.so is there in the modules folder!!!
If you have any other suggestion, please let me know.
Thanks a lot again!
[bogdan] - check if your cfg file is pointing to the right directory for loading the modules
Alp? — 06 August 2009, 16:49
Hello,
I am getting this error while initializing LB module. I couldnt find anything wrong why its getting me this error.
Aug 6 17:44:49 ubuntu /sbin/opensips[7696]: INFO:load_balancer:mod_init: Load-Balancer module - initializing
Aug 6 17:44:49 ubuntu /sbin/opensips[7696]: ERROR:load_balancer:mod_init: Can't load dialog hooks
Aug 6 17:44:49 ubuntu /sbin/opensips[7696]: ERROR:core:init_mod: failed to initialize module load_balancer
Aug 6 17:44:49 ubuntu /sbin/opensips[7696]: ERROR:core:main: error while initializing modules
Alp? — 06 August 2009, 17:32
I added module Dialog.so and add modparam("dialog", "dlg_flag", 4) in opensips.cfg file and it works!!
Alp? — 06 August 2009, 18:04
There is one more bracket ')' in line if (!search_body("G711") )) {. It gives error.
[bogdan] - fixed, thank you
motto? — 08 August 2009, 00:52
Hey,
default load_balance configuration doesn't process "ACK" SIP packet from the Asterisk END, so the Asterisk after SIP ACK retransmiting several times hangup a call.
Any idea on that ?
[bogdan] - the ACK (if properly formed by caller device) should contain the Route header and OpenSIPS will route it as sequential request (via loose_route() )
ravi? — 14 August 2009, 17:04
is there anyway, loadbalancer can get destination ip address dynamically.
Ex: i have 3 asterisk servers to be load balanced but some time i want to upgrade one asterisk server that case i want to remove that asterisk server ip address from load balancer database is that possible?
[bogdan] - update the IPs in DB and do via MI a "lb_reload"
Hi Bogdan,
Thank you for your suggestion "Javier, check if your cfg file is pointing to the right directory for loading the modules."
Really, the opensips.cfg is pointing properly to the modules directory.
Any other suggestion ?
Thank you,
Javier.
[bogdan] - check if the mi_xmlrpc.so file really exists in the directory you configured
Hi Bogdan.
Is possible to mix the load_balancer module with the LCR module?... i need the features from the LCR to route the calls, but also i need to know the status of a GW with E1/T1 and balance the load between several Gw's.
Is this possible?
Thanks
Ricardo.-
[bogdan] - that is a bit tricky as you have two engines for doing routing (but on different criteria) DR - prefix routing, LB - load routing; only if you chain them, like first DR to select a set of GWs(per prefix) and after that LB to choose one of the GWs from the DR set
ravi? — 26 August 2009, 17:47
Hi Bogdan, is possible to assign variable in load_balance("$var(a0)","vm") or load_balance("$avp(i:55)","vm") function?
Ravi
[bogdan] - starting with 1.6 yes
Raj? — 30 October 2009, 10:14
Hi Bogdam, I am using OpenSIPSv1.5.3 on centOS. If I load load_balancer.so the server start is failed.
loadmodule "modules/load_balancer/load_balancer.so"
modparam("load_balancer", "db_url","mysql://opensips:opensipsw@localhost/opensips"), I have created opensips user and password in db. Please suggest me with a solution if possible.
Raj
[bogdan] - see http://www.opensips.org/Resources/DocsTsStart ; it must be an error reported
JG? — 12 November 2009, 21:41
I just installed OpenSips but i just don't understand the configuration part for the LB, i just want to do something like this:
prefix 044
redirect to ZAP Channel 37 and ZAP Channel 38
One call to 37 and the next to 38 and if both are busy to the default unicall
Can you guys help me out...
Thanks in advanced
JG
[bogdan] - post your question on the user mailing list
I have a PSTN VoIP Gateway that is sending and receiving VoIP SIP calls to a SIP Gateway on the internet. I have 3 WAN connections. Can I use the load balancer to do call load balancing between the VoIP Gateway and the SIP Proxy. Can the load balancer distribute the VoIP load between the 3 connections equally and then also to receive and forward calls from the SIP Gateway to the VoIP PSTN Gateway.
It is a single Internet SIP Proxy Service. 8 Calls per link
— 16 July 2010, 19:49
is there a way to load balance based on calls per second (CPS) instead of total concurrent call? i have two sip carrier with 50 cps each and my auto dealers are dialing @ 60 calls per second.
[bogdan] - no, it is not possible
In the Load_balancer tables :
4 2 sip:192.168.1.1 pstn=300 0 VNP #1
In opensips.cfg:
if (uri=~"^sip:.....9[0-2]*@")
{
xlog("route to Vinaphone");
load_balance("2","pstn");
# route(4);
}
when i call 99984917xxxx , it matches the condition but it doesn't route the call to 192.168.1.1
If i have "route(4);" bellow "load_balance("2","pstn");", then it routes follow route(4)
Please help me
Tks
[bogdan] - post your question on the user mailing list
h3xd? — 22 September 2010, 05:21
Can the LB be used to balance between multiple NAT traversal systems?
[bogdan] - no, as a nat traversal system must be directly linked to the nated entity, so adding a LB between NAT traversal system and nated entity will break the NAT visibility at network level
Is it possible to load balance in stateless mode?
[bogdan] - not with LB module (as the load is the number of calls, it must be dialog stateful) ; for stateless approaches, see the dispatcher module
merik? — 19 October 2010, 16:38
it's very hard for me to configure opensips with module load_balance .someone have a good tutorial or a typical config of opensip.cfg to load_balance 3 asterisk
[bogdan] - if this tutorial (which will cover your case) does not help you, use the mailing lists
elwan? — 08 December 2010, 23:31
its work with me but sometime i got no sound :(
and also i see the opensips ip not the user ip
what it's worng ??
dcola? — 06 January 2011, 23:23
Is it possible to use the load balancer for failover to maintain a call dialog? In other words load_balance() an initial INVITE to one server and when that server goes down and a BYE comes into opensips from the user agent, lb_disable() that dead server and route the BYE to another server with the same call dialog using failure_route?
Mesha? — 19 January 2011, 13:07
Registered OpenSIPS user. Incoming call on registered any softphone = everything ok.
Registered OpenSIPS user. Incoming call on registered any hardphone (Grandstream (handytone,GXVxxx), matrix, hanglong) = no audio both ways??? Problem!!! What can be a solution?
I am new to opensips,can any one give me some idea which version of opensips to use for sip dialog(invite---100 trying----bye) and registration.
hello, there are forums in Spanish on this site?
Hi sir Bongdan
I have this problem,please help me.
I use LB for 2 asterisk gateway.But when call terminal BYE package throught direct from asterisk to user not throught opensips.So resources can't release and finally after any call opensips notify serveice full untill i restart opensips.How to make opensips receive BYE package to release resources.
Thanks alot
sd? — 23 June 2011, 12:11
Hi Sir,
i wanted to setup loadblanacer, i am using two server for load balancing, 10.0.3.30 & 10.0.12.75,
in live scenario 400 calls will come, i want 200 calls on 10.0.3.30 server and 200 calls 10.0.12.75 server, i have installed openser on 10.0.1.138 server now when i edit following lines then getting following error
if (loose_route()) {
t_relay();
};
ds_select_dst("1", "0");
record_route();
t_relay();
Jun 22 16:10:18 Testing openser: parse error (101,1-2): syntax error
Jun 22 16:10:18 Testing openser: parse error (101,1-2):
Error
Jun 22 16:10:18 Testing openser: INFO:mi_fifo:mi_destroy:memory for the child's mi_fifo_pid was not allocated -> nothing to destroy
Jun 22 16:10:30 Testing openser: parse error (101,1-2): syntax error
Jun 22 16:10:30 Testing openser: parse error (101,1-2):
Jun 22 16:10:30 Testing openser: INFO:mi_fifo:mi_destroy:memory for the child's mi_fifo_pid was not allocated ->
Can you please share sample file with below configuration or let me know how i can achive this
do i have to register UA client with OpenSER for using LoadBalancing Feature?
I set up this feature, but the number of "load" in opensipsctl lb_list fifo does not decrease.
So, resources are always used. To reset, I have to restart.
How can I do to make this work?
Thank you!
Here is my configuration file:
route{
if ($rU=="dialog") {
xlog("L_INFO","---------dialog---------");
if (load_balance("1","dialog"))
route(1);
else
route(2);
}
else {
xlog("L_INFO","---------conf---------");
if (load_balance("1","conf"))
route(1);
else
route(2);
}
}
route[1] {
xlog("l'appel est dirige vers : $dun");
t_relay();
exit();
}
route[2] {
xlog(" ---- Service Full ---- ");
sl_send_reply("500","Service full");
exit();
}
And lb_list :
Destination:: sip:X.X.X.X:5060 id=1 group=1 enabled=yes auto-re=on
Resource:: dialog max=2 load=0
Destination:: sip:X.X.X.X:5060 id=1 group=1 enabled=yes auto-re=on
Resource:: dialog max=2 load=0
Destination:: sip:X.X.X.X:5060 id=2 group=1 enabled=yes auto-re=on
Resource:: conf max=2 load=0
Destination:: sip:X.X.X.X:5060 id=2 group=1 enabled=yes auto-re=on
Resource:: conf max=2 load=0
Thanks to the forum, I solved the problem!
;)
Can we run OpenSip 1.6.4 run on 64 bit linux machine (x86_64 GNU/Linux.
I am using opensips-1.6.4-2-notls_src.tar right on 32bit Linux machine ( i386 GNU/Linux )
[bogdan] - yes, you can
Im getting error :
Dec 6 15:58:04 c-24-30-48-18 /sbin/opensips[25235]: ERROR:load_balancer:do_load_balance: unknown resource in input string
[bogdan] - this error means you ask for a resource (in load_balance() function), that does not appear in the definition of the peers/destinations
Rana? — 08 December 2011, 08:28
Can we run OpenSip LB on 64 bit linux machine ?
[bogdan] - yes, you can
Im unable to recieve calls with this setup... is there anyway we can intergrate nathelper and rtpproxy in here? been trying too do it for 2 days
i found my problem, when 2 extensions call each other it goes to asterisk via the load balancer, then asterisk sends it back since it shows registered via opensips... im getting loop
[bogdan] - please do not post net traces here (because of size) - better use the "users" mailing list.
Is there any means of keeping two instances of OpenSIPS synchronized in terms of the current call count of a destination? I'm wondering about the fault tolerance of losing one instance and having the other instance pick up the load balancing. Or perhaps even active/active operation of multiple instances of OpenSIPS.
[bogdan] - the possibility the exchange load information between multiple load-balancers will be available with 1.8 version (via distributed dialog profiles).
Hello all! Need to do some simple, round-robin load balancing to a cluster of Yate servers, no load check, just take the calls and give them to the next Yate in the list. Is there a simple example for this somewhere?
"Also, the "load-balancing" (LB) module is able to receive feedback from the destinations (if they are capable of)."
Does anyone know more details about that? Is this referring to updating and reloading the LB database?
That really captures the spriit of it. Thanks for posting.
Terje? — 20 August 2012, 04:19
For xmpp to PSTN, you can simply use asertisk to convert jingle to sip, and then sip to anything you want, provided you have the proper hardware. I assume that others sip servers can do it ( callweaver, opensip, etc ), since both sip, jingle and the regular telephone are standardized features.
Jean? — 20 August 2012, 13:33
I managed to dig up those two files I've only ineucdld the parts that you might need to change (I didn't include the entire file just the statements concerning the two IP phones I setup.You'll need to find their MAC address (on the back of the phone) and then depending on software version the phone is running you may need to tweak the rtp_method.unistim.conf[phone1] ; name of the devicedevice=001765ffe0fc ; mac address of the phonertp_port=10000 ; RTP port used by the phone, default = 10000. RTCP = rtp_port+1rtp_method=3 ; If you don't have sound, you can try 1, 2 or 3, default = 0status_method=0 ; If you don't see status text, try 1, default = 0titledefault=Asterisk ; default = "TimeZone (your time zone)". 12 characters maxmaintext0="Asterisk PBX" ; default = "Welcome", 24 characters max;maintext1="a custom text" ; default = the name of the device, 24 characters max;maintext2="(main page)" ; default = the public IP of the phone, 24 characters max;dateformat=1 ; 0 = month/day, 1 (default) = day/month;timeformat=1 ; 0 = 0:00am ; 1 (default) = 0h00, 2 = 0:00;contrast=8 ; define the contrast of the LCD. From 0 to 15. Default = 8;country=us ; country (ccTLD) for dial tone frequency. See README, default = us;ringvolume=2 ; ring volume : 0,1,2,3, can be overrided by Dial(), default = 2ringstyle=3 ; ring style : 0 to 7, can be overrided by Dial(), default = 3callhistory=1 ; 0 = disable, 1 = enable call history, default = 1callerid="Customer Support" <555-234-5678>context=michael ; context, default="default"mailbox=2000 ; Specify the mailbox number. Used by Message Waiting Indication;linelabel="Support" ; Softkey label for the next line=> entry, 9 char max.;extension=line ; Add an extension into the dialplan. Only valid in context specified previously. ; none=don't add (default), ask=prompt user, line=use the line numberline => 100 ; Only one line by device is currently supported. ; Beware ! only bookmark and softkey entries are allowed after line=>;bookmark=Hans C.@123 ; Use a softkey to dial 123. Name : 9 char max;bookmark=Mailbox@011@54 ; 54 shows a mailbox icon. See #define FAV_ICON_ for other values (32 to 63)bookmark=Test@*@USTM/phone2 ; Display an icon if violet is connected (dynamic), only for unistim device;bookmark=4@Pager@54321@51 ; Display a pager icon and dial 54321 when softkey 4 is pressed[phone2] ; name of the devicedevice=0018b0342c34 ; mac address of the phonertp_port=10000 ; RTP port used by the phone, default = 10000. RTCP = rtp_port+1rtp_method=3 ; If you don't have sound, you can try 1, 2 or 3, default = 0status_method=0 ; If you don't see status text, try 1, default = 0titledefault=Asterisk ; default = "TimeZone (your time zone)". 12 characters maxmaintext0="Asterisk PBX" ; default = "Welcome", 24 characters max;maintext1="a custom text" ; default = the name of the device, 24 characters max;maintext2="(main page)" ; default = the public IP of the phone, 24 characters max;dateformat=1 ; 0 = month/day, 1 (default) = day/month;timeformat=1 ; 0 = 0:00am ; 1 (default) = 0h00, 2 = 0:00;contrast=8 ; define the contrast of the LCD. From 0 to 15. Default = 8;country=us ; country (ccTLD) for dial tone frequency. See README, default = us;ringvolume=2 ; ring volume : 0,1,2,3, can be overrided by Dial(), default = 2ringstyle=3 ; ring style : 0 to 7, can be overrided by Dial(), default = 3callhistory=1 ; 0 = disable, 1 = enable call history, default = 1callerid="Customer Support" <555-234-5678>context=michael ; context, default="default"mailbox=2001 ; Specify the mailbox number. Used by Message Waiting Indication;linelabel="Support" ; Softkey label for the next line=> entry, 9 char max.;extension=line ; Add an extension into the dialplan. Only valid in context specified previously. ; none=don't add (default), ask=prompt user, line=use the line numberline => 101 ; Only one line by device is currently supported. ; Beware ! only bookmark and softkey entries are allowed after line=>;bookmark=Hans C.@123 ; Use a softkey to dial 123. Name : 9 char max;bookmark=Mailbox@011@54 ; 54 shows a mailbox icon. See #define FAV_ICON_ for other values (32 to 63)bookmark=Test@*@USTM/phone1 ; Display an icon if violet is connected (dynamic), only for unistim device;bookmark=4@Pager@54321@51 ; Display a pager icon and dial 54321 when softkey 4 is pressedI then added the following lines in the extensions.conf file;exten => 100,1,Dial(USTM/100@phone1)exten => 101,1,Dial(USTM/101@phone2)It's not to complicated after you spend some time with it.Good Luck!
Hi Mark,What's really neat is that the i2002 pnoehs were still running the UNIStim stack with firmware 0604DAD and 0604DBG (no SIP firmware available for the i2002/i2004 pnoehs). Thanks to the efforts of and others they were able to reverse engineer the UNIStim stack and provide the channel driver for using Nortel's proprietary protocol on Asterisk.I will comment that it took me about 30 minutes to realize that you couldn't just pickup the handset and dial a number. You had to pickup the handset, dial the phone number and then select the softkey labeled Call . I spent that first 30 minutes running packet traces trying to figure out if I had a G.711/GSM codec issue or what the problem was.Thanks again for the comment!
I am just installing an asetsirk server into my small business, I have 8 Grandstream 2000 phones for hte initial deployment. These are configured and working fine. I am replaceing a Nortel BCM50 and I have 3 IP phones I would LOVE to get working on the system.I am on CentOS 5.2 like you, and used hte AsteriskNOW 1.6Beta for my base intstall of everything.Can I get a DETAILED instruction on how you got the nortels to work? Heck I would even pay you fo rhte consult to help me.. I truely like the nortel phones and it would save me about $400 if I can re-use the 3 IP phones I have.[removed by moderator]PS: I am not a Phone Guy' so this is all new to me, I am a MCSE/T type.
Hi Sir,
I need to know how to register outbound trunk in Opensips which required username and password?
for example in asterisk it is (register => username:password@server-ip:5060), How can i do this in Opensips?
Thanks in advanced
Mohammed
Johan? — 04 September 2012, 15:20
I have the basic load-balance configuration as written above.
One proxy, two end servers.
As test I have setup a call to server1 and server2.
Then I pull the network cable out of server2.
Problem is that the call stays connected to server2.
How can I configure that the proxy will send a BYE to both ends, when a server is down (lb_status sees it's down).
I want the call to disconnect, not to proceed on the other server.
anand? — 11 February 2013, 10:26
sonu? — 11 February 2013, 12:01
I have two asterisk box,How i can verify both are alive or any one goesdown using opensips.cgf
BFSP? — 24 February 2013, 01:58
Is there a way to use the receiving interface IP as the resource parameter in LB? This would greatly simplify using the correct table when listening on multiple interfaces on a single server.
if (!load_balance($Ri,"transc;pstn")) {
sl_send_reply("500","Service full");
exit;
}
BFSP? — 24 February 2013, 02:07
Looks like there is a solution using a transformation.
$var(ip) = $Ri{ip.pton};
if (!load_balance("$var(ip)","transc;pstn")) {
sl_send_reply("500","Service full");
exit;
}
BFSP? — 28 February 2013, 04:05
Big let down. Doesn't work. I didn't realize the {ip.pton} transformation literally transforms the value into ASCII characters representing the binary value.
BFSP? — 08 January 2014, 10:52
how i can use load balance on User registration ??
Hi Bogdan,
Is there any way to say that opensips is loaded and will not process any requests any more? Any place where I could add a custom message to say Opensips will not handle more calls. I am running into a situation where opensips is not responding to the BYE that is being sent by the UA via a proxy. I am trying to test hairpin scenario.
Thanks for the wonderful tool and help.
[bogdan] - take a look at the "load" class statistics - http://www.opensips.org/Documentation/Interface-CoreStatistics-1-11 .
SCC? — 16 September 2014, 23:09
Hi,
the load balancing module seems very complete. One thing that i cannot find anywhere is how to load balance between opensips servers. For example, suppose there is no NAT between telco, Opensips servers and Asterisk servers (they're all on the same network). At the moment there exists,say 20 Asterisk servers for 3 Opensips (failover for me should always have a pair of servers + 1, reducing failover probability to 33%). Both OpenSips do load balance SIP calls to Asterisk servers and know exactly what each server can handle (say 2.000 simultaneous calls per server, total of 40.000 calls). In this concept, only 1 Opensips server handles the calls (Master), the second is Slave (listenning for any Master's failure) and the third Opensips server handles failover of Slave server. All Opensips share the same configuration DB and rules (get a SIP request, route to Asterisk, pass media from Asterisk to Telco directly for example).
Now, say, we need to had 10 more Asterisk servers and need to add one more Opensips server to the network.
We would like then to set a Master+Master configuration, a Slave to failover one master and the forth server to failover the slave or a master.
Knowing this, a Master+Master configuration should receive calls all the time, meaning both Opensips Master Server will be live, thus, receiving SIP requests and routing requests to Asterisk boxes (we now have 30 call toasters).
Question is : we know that 1 Opensips can load balance calls to each one of the Asterisk boxes. If we had another Opensips, how will be load balancing handled? Do both Master Opensips server know exactly the load of each Asterisk servers? Can each Master know what each one of them is processing (Master A knows that Master B is processing 5.000 cps and is load balancing those calls for each available Asterisk)
Thanks in advance
SCC
Hi, i want to know, how many maximum concurrent call handled by Opensip if the media resource server is unlimited?
Is it possible to use the load balancer for failover to maintain a call dialog? In other words load_balance() an initial INVITE to one server and when that server goes down and a BYE comes into opensips from the user agent, lb_disable() that dead server and route the BYE to another server with the same call dialog using failure_route?
any help for same will be appropriated
Hello
Will using load_balance() module be the appropriate solution for directing all 'REGISTER' methods from OpenSIPs toward Asterisk servers?
To be far more precise, I want to direct REGISTER methods from OpenSIPs server to 3 asterisk servers. Do you think load balancer can handle this kind of request as well?! thanks in advance.
How make Load balance module to redirects traffic between asterisk boxes in equal way, eg.:
Scenario:
box 1 - 100 calls available
box 2 - 200 calls available
I want to make traffic go to box1, then to box2 to load every box 1:1, and when box 1 box is full - then every call redirects only to box2.
Now every call goes to box 2, until box 2 has 100 calls available. Then calls goes first to box1, and then to box2 and so on.
Nick? — 27 March 2017, 15:01
Hi. Is there anywhere load balancing tutorial for Opensips 2.2?
Vikas? — 18 August 2017, 07:08
Steps to configure loadbalancer for redhat system..
Adam? — 29 March 2019, 17:09
Hi,Thank you so much for this informations, but the howto is not clear, I want to integrate OpenSIPS with Asterisk for Load balance. I really dont know how to configure OpenSIPS with Asterisk boxes to load the Traffic, sometimes Asterisk boxes can't handle the the traffic anymore , Thanks in advance .
Really informative article its to helpful i really enjoyed its reading this post enough to search high quality clothing manufacturers to helpful post thanks for sharing.
server specifications for RTP Proxy / RTP Engine to achieve 100k simultaneous calls