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 | 0 | 0 | duid=asterisk1;maxload=25 | Asterisk1 2 | 1 | sip: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"); }
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@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
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@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 | 0 | 0 | duid=asterisk1;maxload=25 | Asterisk1 2 | 1 | sip: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 listsr-users@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierlahttp://twitter.com/#!/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@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
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@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@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@lists.sip-router.org <mailto:sr-users@lists.sip-router.org> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
OK, we’ll try to update and report back. Wonder if the latest 4.3 has all the fixes went into the latest 4.2.x. We already have plan to upgrade to 4.3. Thanks.
On Jun 10, 2015, at 10:01 AM, Daniel-Constantin Mierla miconda@gmail.com wrote:
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@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@lists.sip-router.org mailto:sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users 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 http://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com http://www.asipto.com/ _______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org mailto:sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierla http://twitter.com/#!/miconda http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda http://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com http://www.asipto.com/
Yes, 4.3 should have all fixes in 4.2.
Cheers, Daniel
On 12/06/15 06:06, Ding Ma wrote:
OK, we’ll try to update and report back. Wonder if the latest 4.3 has all the fixes went into the latest 4.2.x. We already have plan to upgrade to 4.3. Thanks.
On Jun 10, 2015, at 10:01 AM, Daniel-Constantin Mierla <miconda@gmail.com mailto:miconda@gmail.com> wrote:
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@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@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 <http://www.asipto.com/> _______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@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://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com
Hi, Daniel
I just tested the dispatcher in 4.3.1. It showed the same behavior as 4.2.3. All the calls are sent to one Asterisk (the last one in the dispatcher list), the maxload setting in dispatcher table is ignored.
We use db dispatcher table instead of dispatcher list file, and the kamailio.cfg is the same as included in the previous email in this thread.
Hope I didn't make any mistake in kamailio.cfg.
Thanks
On Fri, Jun 12, 2015 at 12:34 AM, Daniel-Constantin Mierla < miconda@gmail.com> wrote:
Yes, 4.3 should have all fixes in 4.2.
Cheers, Daniel
On 12/06/15 06:06, Ding Ma wrote:
OK, we’ll try to update and report back. Wonder if the latest 4.3 has all the fixes went into the latest 4.2.x. We already have plan to upgrade to 4.3. Thanks.
On Jun 10, 2015, at 10:01 AM, Daniel-Constantin Mierla miconda@gmail.com wrote:
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@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 | 0 | 0 | duid=asterisk1;maxload=25 | Asterisk1 2 | 1 | sip: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 listsr-users@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierlahttp://twitter.com/#!/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@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierlahttp://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com
-- Daniel-Constantin Mierlahttp://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com
Hi,
Figured this out. Seems I had made a mistake in the names of AVPs. Changed the AVP names as the exact names used in the example contained in dispatcher doc. Dispatcher started to work, I can see even distribution of loads to 2 Asterisk servers. Will verify if maxload is being enforced or not, not really an issue even if it is not enforced.
Thanks,
On Thu, Aug 27, 2015 at 9:07 AM, Ding Ma mading087@gmail.com wrote:
Hi, Daniel
I just tested the dispatcher in 4.3.1. It showed the same behavior as 4.2.3. All the calls are sent to one Asterisk (the last one in the dispatcher list), the maxload setting in dispatcher table is ignored.
We use db dispatcher table instead of dispatcher list file, and the kamailio.cfg is the same as included in the previous email in this thread.
Hope I didn't make any mistake in kamailio.cfg.
Thanks
On Fri, Jun 12, 2015 at 12:34 AM, Daniel-Constantin Mierla < miconda@gmail.com> wrote:
Yes, 4.3 should have all fixes in 4.2.
Cheers, Daniel
On 12/06/15 06:06, Ding Ma wrote:
OK, we’ll try to update and report back. Wonder if the latest 4.3 has all the fixes went into the latest 4.2.x. We already have plan to upgrade to 4.3. Thanks.
On Jun 10, 2015, at 10:01 AM, Daniel-Constantin Mierla miconda@gmail.com wrote:
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@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 | 0 | 0 | duid=asterisk1;maxload=25 | Asterisk1 2 | 1 | sip: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 listsr-users@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierlahttp://twitter.com/#!/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@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierlahttp://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com
-- Daniel-Constantin Mierlahttp://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com
Hello,
good to know that you found the issue and it was in the config file. Would be appreciated if you can report the results on testing maxload, to know if there is anything to fix there.
Cheers, Daniel
On 14/09/15 21:52, Ding Ma wrote:
Hi,
Figured this out. Seems I had made a mistake in the names of AVPs. Changed the AVP names as the exact names used in the example contained in dispatcher doc. Dispatcher started to work, I can see even distribution of loads to 2 Asterisk servers. Will verify if maxload is being enforced or not, not really an issue even if it is not enforced.
Thanks,
On Thu, Aug 27, 2015 at 9:07 AM, Ding Ma <mading087@gmail.com mailto:mading087@gmail.com> wrote:
Hi, Daniel I just tested the dispatcher in 4.3.1. It showed the same behavior as 4.2.3. All the calls are sent to one Asterisk (the last one in the dispatcher list), the maxload setting in dispatcher table is ignored. We use db dispatcher table instead of dispatcher list file, and the kamailio.cfg is the same as included in the previous email in this thread. Hope I didn't make any mistake in kamailio.cfg. Thanks On Fri, Jun 12, 2015 at 12:34 AM, Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> wrote: Yes, 4.3 should have all fixes in 4.2. Cheers, Daniel On 12/06/15 06:06, Ding Ma wrote:
OK, we’ll try to update and report back. Wonder if the latest 4.3 has all the fixes went into the latest 4.2.x. We already have plan to upgrade to 4.3. Thanks.
On Jun 10, 2015, at 10:01 AM, Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> wrote: 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@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)
Happy to to report the max_load worked in our testing. Thanks,
On Tue, Sep 15, 2015 at 3:04 AM, Daniel-Constantin Mierla <miconda@gmail.com
wrote:
Hello,
good to know that you found the issue and it was in the config file. Would be appreciated if you can report the results on testing maxload, to know if there is anything to fix there.
Cheers, Daniel
On 14/09/15 21:52, Ding Ma wrote:
Hi,
Figured this out. Seems I had made a mistake in the names of AVPs. Changed the AVP names as the exact names used in the example contained in dispatcher doc. Dispatcher started to work, I can see even distribution of loads to 2 Asterisk servers. Will verify if maxload is being enforced or not, not really an issue even if it is not enforced.
Thanks,
On Thu, Aug 27, 2015 at 9:07 AM, Ding Ma mading087@gmail.com wrote:
Hi, Daniel
I just tested the dispatcher in 4.3.1. It showed the same behavior as 4.2.3. All the calls are sent to one Asterisk (the last one in the dispatcher list), the maxload setting in dispatcher table is ignored.
We use db dispatcher table instead of dispatcher list file, and the kamailio.cfg is the same as included in the previous email in this thread.
Hope I didn't make any mistake in kamailio.cfg.
Thanks
On Fri, Jun 12, 2015 at 12:34 AM, Daniel-Constantin Mierla < miconda@gmail.com> wrote:
Yes, 4.3 should have all fixes in 4.2.
Cheers, Daniel
On 12/06/15 06:06, Ding Ma wrote:
OK, we’ll try to update and report back. Wonder if the latest 4.3 has all the fixes went into the latest 4.2.x. We already have plan to upgrade to 4.3. Thanks.
On Jun 10, 2015, at 10:01 AM, Daniel-Constantin Mierla < miconda@gmail.commiconda@gmail.com> wrote:
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@gmail.commiconda@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 | 0 | 0 | duid=asterisk1;maxload=25 | Asterisk1 2 | 1 | sip:10.0.1.33:5061 | 0 | 0 | duid=asterisk2;maxload=25 | Asterisk2 (2 rows)
-- Daniel-Constantin Mierlahttp://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda Book: SIP Routing With Kamailio - http://www.asipto.com Kamailio Advanced Training, Sep 28-30, 2015, in Berlin - http://asipto.com/u/kat
Great, appreciating the feedback to know that all is ok.
Cheers, Daniel
On 03/10/15 17:02, Ding Ma wrote:
Happy to to report the max_load worked in our testing. Thanks,
On Tue, Sep 15, 2015 at 3:04 AM, Daniel-Constantin Mierla <miconda@gmail.com mailto:miconda@gmail.com> wrote:
Hello, good to know that you found the issue and it was in the config file. Would be appreciated if you can report the results on testing maxload, to know if there is anything to fix there. Cheers, Daniel On 14/09/15 21:52, Ding Ma wrote:
Hi, Figured this out. Seems I had made a mistake in the names of AVPs. Changed the AVP names as the exact names used in the example contained in dispatcher doc. Dispatcher started to work, I can see even distribution of loads to 2 Asterisk servers. Will verify if maxload is being enforced or not, not really an issue even if it is not enforced. Thanks, On Thu, Aug 27, 2015 at 9:07 AM, Ding Ma <mading087@gmail.com <mailto:mading087@gmail.com>> wrote: Hi, Daniel I just tested the dispatcher in 4.3.1. It showed the same behavior as 4.2.3. All the calls are sent to one Asterisk (the last one in the dispatcher list), the maxload setting in dispatcher table is ignored. We use db dispatcher table instead of dispatcher list file, and the kamailio.cfg is the same as included in the previous email in this thread. Hope I didn't make any mistake in kamailio.cfg. Thanks On Fri, Jun 12, 2015 at 12:34 AM, Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> wrote: Yes, 4.3 should have all fixes in 4.2. Cheers, Daniel On 12/06/15 06:06, Ding Ma wrote:
OK, we’ll try to update and report back. Wonder if the latest 4.3 has all the fixes went into the latest 4.2.x. We already have plan to upgrade to 4.3. Thanks.
On Jun 10, 2015, at 10:01 AM, Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> wrote: 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@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)
-- 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 Kamailio Advanced Training, Sep 28-30, 2015, in Berlin - http://asipto.com/u/kat