0 will mean no balancing occurs; otherwise it represents the ratio between the highest-loaded server and the average load, times 100 (i.e. a value of 150 means a 1.5x ratio), assuming equal weights. --- include/types/lb_chash.h | 1 + src/cfgparse.c | 13 +++++++++++++ 2 files changed, 14 insertions(+)
diff --git a/include/types/lb_chash.h b/include/types/lb_chash.h index 5991ce9..b711636 100644 --- a/include/types/lb_chash.h +++ b/include/types/lb_chash.h @@ -30,6 +30,7 @@ struct lb_chash { struct eb_root act; /* weighted chash entries of active servers */ struct eb_root bck; /* weighted chash entries of backup servers */ struct eb32_node *last; /* last node found in case of round robin (or NULL) */ + int balance_factor; /* load balancing factor * 100, 0 if disabled */ }; #endif /* _TYPES_LB_CHASH_H */ diff --git a/src/cfgparse.c b/src/cfgparse.c index 7b58ef6..376c8b0 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -5932,6 +5932,19 @@ stats_error_parsing: } } } + else if (strcmp(args[0], "hash-balance-factor") == 0) { + if (*(args[1]) == 0) { + Alert("parsing [%s:%d] : '%s' expects an integer argument.\n", file, linenum, args[0]); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } + curproxy->lbprm.chash.balance_factor = atol(args[1]); + if (curproxy->lbprm.chash.balance_factor != 0 && curproxy->lbprm.chash.balance_factor <= 100) { + Alert("parsing [%s:%d] : '%s' must be 0 or greater than 100.\n", file, linenum, args[0]); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } + } else if (strcmp(args[0], "unique-id-format") == 0) { if (!*(args[1])) { Alert("parsing [%s:%d] : %s expects an argument.\n", file, linenum, args[0]); -- 2.9.3