> On 19 Sep 2016, at 23:42, Dmitry Sivachenko <trtrmi...@gmail.com> wrote: > > Hello, > > imagine the following configuration: > > frontend F1 > use_backend BACKUP_B1 if B1_IS_FULL > default_backend B1 > > backend B1 > server s_i > ... > server s_j > > backend BACKUP_B1 > server b_i > ... > server b_j > > --------- > frontend F2 > use_backend BACKUP_B2 if B2_IS_FULL > default_backend B2 > > backend B2 > server s_k > ... > server s_m > > backend BACKUP_B2 > server b_k > ... > server b_m > ---------- > <...> > > So basically I have a number of backends B1 ... Bn which use different > subsets of the same server pool s_1 ... s_N. > Each backend have "BACKUP_" backend pair, which should be used only when each > server in primary backend has more than a defined number of active sessions > (each server may have active sessions via different backends: B1, B2, ..., > Bn). > > What is the easiest way to define Bn_IS_FULL acl? > > So far I came with the following solution: in each frontend Fn section write: > > tcp-request content set-var(sess.s_1_conn) srv_conn(B1/s_1) > tcp-request content set-var(sess.s_1_conn) srv_conn(B2/s_1),add(sess.s_1_conn) > # <...> repeat last line for each backend which has s_1. We will have total > number of active connections to s_1 > > # Repeat the above block for each server s_2, ..., s_N > > #Then define acl, assume the max number of active sessions is 7: > acl F1_IS_FULL var(sess.s_1_conn) ge 7 var(sess.s_2_conn) ge 7 <...> > > but it looks ugly, we need to replicate the same logic in each frontend and > use a lot of code to count sessions. There should probably be a simpler way > to track down the total number of active sessions for a server which > participates in several backends. >
BTW, it would be convenient to have an ability to have one "super"-backend containing all servers backend SUPER_B server s1 ... server sN and let other backends reference these servers similar to what we can do with health checks ("track SUPER_B/s1"): backend B1 server s_1 SUPER_B/s_1 .... As another benefit this would allow balance algorithm to take into account connections each server receives via different backends.