It was a fix for maxload during 4.2.x, but don't recall exactly when was
backported. Can you upgrade to latest 4.2.x and see the results? Your
config file and database don't require any change, only deploy the
binaries for latest 4.2.x and restart.
If the issue is still there with latest 4.2.x, report here and I will
look at it with the first chance.
Cheers,
Daniel
On 10/06/15 16:50, Ding Ma wrote:
We're running kamailio 4.2.3. Are there any
changes to dispatcher in
4.2.x?
Thanks,
# kamailio -V
version: kamailio 4.2.3 (x86_64/linux) 5596bd
flags: STATS: Off, USE_TCP, USE_TLS, TLS_HOOKS, USE_RAW_SOCKS,
DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC,
F_MALLOC, DBG_F_MALLOC, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT,
USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST,
HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16,
MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: 5596bd
compiled on 09:32:37 May 6 2015 with gcc 4.4.7
On Wed, Jun 10, 2015 at 7:01 AM, Daniel-Constantin Mierla
<miconda(a)gmail.com <mailto:miconda@gmail.com>> wrote:
Hello,
what version of kamailio are you using?
Cheers,
Daniel
On 09/06/15 20:51, Ding Ma wrote:
I'm trying to set up kamailio dispatcher
to distribute calls to 2
asterisk servers. So far, the failover case seems ok, but I
cannot get the dispatcher to distribute load. All calls are going
to the last destination entry in the dispatcher table even if I
have set the maxload attributes. I'm using algorithm 10 for load
distribution. The number of calls sent to one asterisk is well
above the maxload. Hope someone more experienced in dispatcher
can review my config and give me some recommendations. Thanks in
advance.
Here is the content of dispatcher table in postgresql db.
select * from dispatcher;
id | setid | destination | flags | priority |
attrs | description
----+-------+--------------------+-------+----------+---------------------------+-------------
1 | 1 | sip:10.0.1.31:5061 <http://10.0.1.31:5061> | 0
| 0 | duid=asterisk1;maxload=25 | Asterisk1
2 | 1 | sip:10.0.1.33:5061 <http://10.0.1.33:5061> | 0
| 0 | duid=asterisk2;maxload=25 | Asterisk2
(2 rows)
Here are the dispatcher sections in kamailio.cfg.
# ----- dispatcher params -----
#!ifdef WITH_DISPATCHER
modparam("dispatcher", "db_url", DBASTURL)
modparam("dispatcher", "table_name", "dispatcher")
modparam("dispatcher", "force_dst", 1).
# If flag 2 is set, then failover support is enabled.
modparam("dispatcher", "flags", 3)
# the last address in destination set is used as a final option
to send the request to
modparam("dispatcher", "use_default", 1)
# load balancing fail over
modparam("dispatcher", "dst_avp", "$avp(dsdst)")
modparam("dispatcher", "grp_avp", "$avp(dsgrp)")
modparam("dispatcher", "cnt_avp", "$avp(dscnt)")
modparam("dispatcher", "dstid_avp", "$avp(dsdstid)")
modparam("dispatcher", "attrs_avp", "$avp(dsattrs)")
# PVs for hashing
modparam("dispatcher", "hash_pvar", "$fU@$ci")
# PVs to store results when calling ds_is_from_list
modparam("dispatcher", "setid_pvname", "$var(setid)")
modparam("dispatcher", "attrs_pvname", "$var(attrs)")
# method to probe the gateways
modparam("dispatcher", "ds_ping_method", "OPTIONS")
modparam("dispatcher", "ds_ping_from",
"sip:dispatcher@localhost")
modparam("dispatcher", "ds_ping_interval", 30)
modparam("dispatcher", "ds_probing_threshhold", 10)
modparam("dispatcher", "ds_ping_reply_codes",
"class=2;code=403;code=404;code=484;code=488;class=3")
modparam("dispatcher", "ds_probing_mode", 1)
# size of hash table storing data for call load dispatching,
power of two
modparam("dispatcher", "ds_hash_size", 10)
# expiration time in seconds to remove the load on a destination
if no BYE was received
modparam("dispatcher", "ds_hash_expire", 3600)
# expiration time in seconds to remove the load on a destination
if no 200 OK for INVITE was received
# and state updated with ds_load_update
modparam("dispatcher", "ds_hash_initexpire", 60)
modparam("dispatcher", "ds_hash_check_interval", 30)
#!endif
route[WITHINDLG] {
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
#!ifdef WITH_DISPATCHER
if(is_method("BYE|CANCEL") && ds_is_from_list("1",
"3"))
ds_load_update();
#!endif
......
}
}
route[FROMASTERISK] {
#!ifdef WITH_DISPATCHER
if(ds_is_from_list("1", "3")) {
xlog("L_DBG","$rm from $fU@$si:$sp: Call from Asterisk
cluster\n");
return 1;
}
return -1;
#!else
if ($si==$sel(cfg_get.asterisk.bindip)) {
return 1;
}
return -1;
#!endif
}
onreply_route[MANAGE_REPLY] {
xdbg("incoming reply\n");
#!ifdef WITH_DISPATCHER
if(is_method("INVITE") && ds_is_from_list("1",
"3")) {
if(status=~"2[0-9][0-9]") {
ds_load_update();
}
else if(status=~"[3-7][0-9][0-9]") {
ds_load_unset();
}
}
#!endif
if(status=~"[12][0-9][0-9]")
route(NATMANAGE);
}
#!ifdef WITH_DISPATCHER
failure_route[RTF_DISPATCH] {
if (t_is_canceled()) {
exit;
}
# next DST - only for 500 or local timeout
if (t_check_status("500") or (t_branch_timeout() and
!t_branch_replied())) {
# mark the destination Inactive and Probing
ds_mark_dst("IP");
# select the new destination
if(ds_next_dst()) {
t_on_failure("RTF_DISPATCH");
route(RELAY);
exit;
}
else {
# last available node failed to reply, no
other destinations available
send_reply("404", "No destination");
exit;
}
}
}
#!endif
route[TOASTERISK] {
#!ifdef WITH_DISPATCHER
# ds_mark_dst("IP");
# Call load distribution
if(!ds_select_dst("1", "10")) {
sl_send_reply("500", "Service Unavailable");
xlog("L_INFO","$rm from $fU@$si:$sp: No destinations available
for $rd\n");
exit;
}
xlog("L_DBG", "--- SCRIPT: going to <$ru> via
<$du>\n");
t_on_failure("RTF_DISPATCH");
#!else
$du = "sip:" + $sel(cfg_get.asterisk.bindip) + ":"
+ $sel(cfg_get.asterisk.bindport);
#!endif
route(RELAY);
exit;
}
# Dispatcher detects a destination goes down
event_route[dispatcher:dst-down] {
xlog("L_ERR", "Destination down: $rm $ru ($du)\n");
}
# Dispatcher detects a destination comes up
event_route[dispatcher:dst-up] {
xlog("L_ERR", "Destination up: $rm $ru\n");
}
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users(a)lists.sip-router.org <mailto:sr-users@lists.sip-router.org>
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla
http://twitter.com/#!/miconda <http://twitter.com/#%21/miconda> -
http://www.linkedin.com/in/miconda
Book: SIP Routing With Kamailio -
http://www.asipto.com
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
list
sr-users(a)lists.sip-router.org <mailto:sr-users@lists.sip-router.org>
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users