The leastconn
vmod implements a least connections director for Varnish. The
director will direct traffic to the backend with the least number of
active connections.
Each backend has an associated weight. A backend with e.g. weight 10 will balance at twice the number of connection as a backend with weight 5.
An optional linear ramp up time can be specified for the director. If set, the weight of each backend is linearly increased in the time frame until it reaches the set weight. This allows for backends that have e.g. recently become healthy again to be eased into the workload. Without a ramp up time, the newly inserted backend would get all the load until it has its share, which can have detrimental effects on some applications.
Only actual backends can be added, ie. it is not stackable. If another director is added as a backend, it will be ignored.
vcl 4.0;
import leastconn;
backend backend1 {
.host = "192.168.0.10";
.port = "80";
}
backend backend2 {
.host = "192.168.0.11";
.port = "80";
}
sub vcl_init {
new dir = leastconn.leastconn();
dir.rampup(1m);
dir.add_backend(backend1, 3);
dir.add_backend(backend2, 8);
}
sub vcl_backend_fetch {
set bereq.backend = dir.backend();
}
OBJECT leastconn()
Creates a new leastconn director and returns the object.
Arguments: None
Type: Object
Returns: Object.
VOID .add_backend(BACKEND, REAL)
Add a backend to the director. First argument is the backend to add, the second is its associated weight.
Arguments: None
Type: Method
Returns: None
BACKEND .backend()
Returns a backend to use for the fetch processing.
Arguments: None
Type: Method
Returns: Backend
VOID .rampup(DURATION)
Sets the ramp up duration to use whenever a backend changes its status to healthy. The default is zero rampup.
Arguments: None
Type: Method
Returns: None
The leastconn
VMOD is available in Varnish Enterprise version 6.0.0r0
and later.