From f8acb422cc909227ec4bd40c324d25c9a1cee1c6 Mon Sep 17 00:00:00 2001 From: Kamailio Dev Date: Tue, 5 Jun 2018 17:16:45 +0200 Subject: [PATCH] modules: readme files regenerated - dispatcher ... [skip ci] --- src/modules/dispatcher/README | 86 ++++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 17 deletions(-) diff --git a/src/modules/dispatcher/README b/src/modules/dispatcher/README index 1ab58f384f5..ebcbf49bb9e 100644 --- a/src/modules/dispatcher/README +++ b/src/modules/dispatcher/README @@ -48,7 +48,7 @@ Julien Chavanton Copyright © 2015 Alessandro Arrichiello, Hewlett Packard - Copyright © 2017 Julien chavanton, Flowroute + Copyright © 2017, 2018 Julien chavanton, Flowroute __________________________________________________________________ Table of Contents @@ -178,14 +178,15 @@ Julien Chavanton 1.37. Set the “ds_timer_mode” parameter 1.38. Set event_callback parameter 1.39. ds_select_dst usage - 1.40. ds_select_domain usage - 1.41. ds_select usage - 1.42. ds_mark_dst usage - 1.43. ds_list_exists usage - 1.44. ds_is_from_list usage - 1.45. ds_load_unset usage - 1.46. dispatcher list file - 1.47. Kamailio config script - sample dispatcher usage + 1.40. configuring load balancing with congestion detection + 1.41. ds_select_domain usage + 1.42. ds_select usage + 1.43. ds_mark_dst usage + 1.44. ds_list_exists usage + 1.45. ds_is_from_list usage + 1.46. ds_load_unset usage + 1.47. dispatcher list file + 1.48. Kamailio config script - sample dispatcher usage Chapter 1. Admin Guide @@ -977,6 +978,18 @@ end For example, 100 calls in 3-hosts group with rweight params 1/2/1 will be distributed as 25/50/25. After third host failing distribution will be changed to 33/67/0. + Using this algorithm, you can also enable congestion control + by setting the attibute 'cc=1', when 'cc' is enabled the + 'rweight' attribute will also be used to control congestion + tolerance. When facing congestion the weight of a gateway is + lowered by 1 for every ms of estimated congestion, a 'rweight' + value of 50 is recommended. See the example "configuring load + balancing with congestion detection" bellow. + The congestion estimation is done using an EWMA (see + ds_latency_estimator_alpha). If all the gateways in a set are + above their congestion threshold(weight), the load + distribution is instead done using the ratio of estimated + congestion ms. + “12” - dispatch to all destination in setid at once (parallel forking). Note that the AVPs are no longer set with the values of the destination records, no re-routing making sense in this @@ -997,6 +1010,45 @@ $var(a) = 4; ds_select_dst("1", "$var(a)"); ... ds_select_dst("1", "4", "3"); +... + + Example 1.40. configuring load balancing with congestion detection +... +# sample of SQL provisionning statements +INSERT INTO "dispatcher" +VALUES(1,1,'sip:192.168.0.1:5060',0,12,'rweight=50;weight=50;cc=1;',''); +INSERT INTO "dispatcher" +VALUES(2,1,'sip:192.168.0.2:5060',0,12,'rweight=50;weight=50;cc=1;',''); +... +modparam("dispatcher", "ds_ping_interval", 1) # ping gateways once/second +modparam("dispatcher", "ds_ping_latency_stats", 1) # update congestion metrics +# configure the latency estimator +modparam("dispatcher", "ds_latency_estimator_alpha", 900) +... +if (!ds_select_dst("1", "11")) { # use relative weight based load distribution +... +# sample of output from 'kamcmd dispatcher.list' +DEST: { + URI: sip:192.168.0.1:5060 + FLAGS: AP + PRIORITY: 12 + ATTRS: { + BODY: rweight=50;weight=50;cc=1 # configuration values + DUID: + MAXLOAD: 0 + WEIGHT: 50 + RWEIGHT: 50 + SOCKET: + } + LATENCY: { + AVG: 20.104000 + STD: 1.273000 + # estimated congestion is currently 25ms = 45ms(EST) -20ms(AVG) + EST: 45.005000 + MAX: 132 + TIMEOUT: 3 + } +} ... 4.2. ds_select_domain(set, alg[, limit]) @@ -1012,7 +1064,7 @@ ds_select_dst("1", "4", "3"); This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. - Example 1.40. ds_select_domain usage + Example 1.41. ds_select_domain usage ... $var(a) = 4; if(ds_select_domain("1", "$var(a)")) { @@ -1036,7 +1088,7 @@ if(ds_select_domain("1", "$var(a)")) { This function can be used from ANY_ROUTE. - Example 1.41. ds_select usage + Example 1.42. ds_select usage ... $var(a) = 4; if(ds_select("1", "$var(a)")) { @@ -1087,7 +1139,7 @@ if(ds_select("1", "$var(a)")) { This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. - Example 1.42. ds_mark_dst usage + Example 1.43. ds_mark_dst usage ... failure_route[tryagain] { ... @@ -1106,7 +1158,7 @@ failure_route[tryagain] { This function can be used from ANY_ROUTE. - Example 1.43. ds_list_exists usage + Example 1.44. ds_list_exists usage ... if(ds_list_exists("10")) { ... @@ -1149,7 +1201,7 @@ if(ds_list_exists("10")) { This function can be used from ANY_ROUTE. - Example 1.44. ds_is_from_list usage + Example 1.45. ds_is_from_list usage ... if(ds_is_from_list()) { ... @@ -1183,7 +1235,7 @@ if(ds_is_from_list("10", "3", "sip:127.0.0.1:5080")) { This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE and ONREPLY_ROUTE. - Example 1.45. ds_load_unset usage + Example 1.46. ds_load_unset usage ... route { ... @@ -1357,7 +1409,7 @@ setid(int) destination(sip uri) flags(int,opt) priority(int,opt) attrs(str,opt) For database, each element of a line resides in a different column. Next is a dispatcher.list file example: - Example 1.46. dispatcher list file + Example 1.47. dispatcher list file ... # # dispatcher destination sets (groups) @@ -1382,7 +1434,7 @@ r,opt) Next listing shows a sample config for using the dispatcher module. - Example 1.47. Kamailio config script - sample dispatcher usage + Example 1.48. Kamailio config script - sample dispatcher usage ... #!KAMAILIO #