This page describes the settings that are supported when using Varnish High Availability 6.
Global settings must be configured in vcl_init
. Each setting is shown with its default value.
vha6_opts.set("token", "[secret]");
HMAC signing key used in all transactions. This key is used for signing and is never exposed in an actual transaction. It must be identical across all nodes.
After setting the key, call vha6_token_init;
must be used. Not setting a token or calling the init function will prevent Varnish from successfully loading the VCL.
vha6_opts.set("broadcaster_scheme", "http");
http
or https
https
, make sure Broadcaster is configured for HTTPS.vha6_opts.set("broadcaster_host", "localhost");
vha6_opts.set("broadcaster_port", "8088");
vha6_opts.set("broadcaster_group", "");
nodes.conf
vha6_opts.set("broadcaster_force_sync", "false");
If true
, immediately attempt to flush the broadcast request to the remote host.
Otherwise Broadcast is flushed in the background.
Defaults to false
.
vha6_opts.set("broadcaster_ssl_verify_peer", "true");
vha6_opts.set("broadcaster_ssl_verify_host", "false");
vha6_opts.set("broadcast_limit", "200");
Note: available since 6.0.13r14.
VHA_BROADCAST
requests.broadcast_rate_limit
is used as a fallback.See limits for more information.
vha6_opts.set("broadcast_rate_limit", "200");
Note: available since 6.0.13r14.
VHA_BROADCAST
requests per second.max_requests_sec
is used as a fallback.See limits for more information.
vha6_opts.set("request_rate_limit", "500");
Note: available since 6.0.13r14.
VHA_BROADCAST
and VHA_FETCH
requests.2.5 * broadcast_rate_limit
is used as a fallback.See limits for more information.
vha6_opts.set("origin_scheme", "");
nodes.conf
https
is used, otherwise http
.vha6_opts.set("origin", "");
nodes.conf
, otherwise server.ip
vha6_opts.set("origin_port", "");
nodes.conf
vha6_opts.set("origin_ssl", "");
nodes.conf
origin_scheme
overrides this value.vha6_opts.set("origin_ssl_sni", "true");
vha6_opts.set("origin_ssl_verify_peer", "true");
vha6_opts.set("origin_ssl_verify_host", "false");
vha6_opts.set("allow_locahost", "false");
vha6_opts.set("allow_stale", "false");
vha6_opts.set("fetch_timeout", "");
vha6_opts.set("force_fast304", "false");
vha6_opts.set("force_update", "false");
vha6_opts.set("keep_alive", "120s");
timeout_idle
to this valuebackend_idle_timeout
to maximize the re-use of connections from other
nodesvha6_opts.set("min_ttl", "3s");
ttl
value equal to or less than this value, the object won’t be replicated.vha6_opts.set("max_requests_sec", "200");
Note: deprecated since 6.0.13r14.
The max_requests_sec
setting used to serve three different purposes and was
replaced by new settings:
broadcast_limit
broadcast_rate_limit
request_rate_limit
It is still present for existing VHA6 setups and serves as a fallback when the
new settings are omitted from the configuration with a notable exception: the
request_rate_limit
setting falls back to 2.5 * max_requests_sec
when all
three new settings are unset.
See limits for more information on the new settings.
vha6_opts.set("max_bytes", "25000000");
Content-Length
larger than this value, it’s not replicated.vha6_opts.set("peer_stream", "true");
vha6_opts.set("token_ttl", "2m");
vha6_opts.set("vcs", "true");
vha6_opts.set("vcs_key", "vcs-key");
vha6_opts.set("origin_backend_linger", "10s");
Request settings must be configured in vcl_backend_fetch
or vcl_backend_response
and are shown with the default values.
vha6_request.set("skip", "false");
true
, this request won’t be replicated.vha6_request.set("force_update", "false");
In a cluster with VHA6, a cache insertion results in a broadcast to inform the other members of the cluster. The other members of the cluster may in return request the new contents to populate their own caches.
From a Varnish server’s perspective, it means that one outgoing broadcast can result in an amplification of up to N-1 incoming fetch requests from Varnish peers in a cluster of N servers as a consequence. In addition to the fetch requests, a Varnish server will receive broadcasts from its N-1 peers.
This traffic between Varnish nodes and the amplification factor could disturb traffic dedicated to actual clients despite an eventual higher hit ratio due to the continuous cache warm-up enabled by VHA6.
The content replication limits can be adjusted to keep VHA6 traffic under control:
A Varnish server will broadcast in theory up to broadcast_rate_limit
cache
insertions per second. If all members of a cluster broadcast at full capacity
one node should expect an amplification of:
(N-1) * broadcast_rate_limit
incoming broadcast requests(N-1) * broadcast_rate_limit
incoming fetch requestsAt full broadcast capacity, request_rate_limit
should in theory be adjusted
to 2 * (N-1) * broadcast_rate_limit
to allow a node to process all incoming
VHA6 requests without dropping anything.
In a cluster of 3 nodes, with a broadcast_rate_limit
of 200, the value for
request_rate_limit
should in theory be 800 to process all VHA6 traffic. The
fallback value however is computed as 2.5 * broadcast_rate_limit
when the
request_rate_limit
setting is not set. This conservative fallback assumes
a cluster of 3 nodes that will not process all the VHA6 traffic when all
nodes broadcast at full capacity, but can still absorb cache insertion spikes
happening sporadically on individual nodes.
The error_rate_limited
counter is incremented when either rate limit is
reached.
The other mechanism to reduce VHA6 replication pressure is broadcast_limit
falling back to broadcast_rate_limit
when the former is not set. This match
between the two settings means that a broadcast request have a default budget
of 1s on average at full replication capacity. One reason for broadcast
requests to take time is the corresponding fetch requests coming back while a
cache insertion is still being fetched by the Varnish origin that triggered
the broadcast. A slow backend increases the chances of saturating the
broadcast_limit
before reaching the broadcast_rate_limit
.
The error_max_broadcasts
counter is incremented when this limit is reached.
See varnishstat on VHA6 monitoring for other noteworthy counters.
Hooks allow for custom VCL code to execute during specific VHA6 states. To set up hooks, run the following commands:
mkdir -p /etc/varnish/vha6/hooks
cp /usr/share/varnish-plus/vcl/vha6/hooks/states.vcl /etc/varnish/vha6/hooks
This implements a default VHA6 hooks file at /etc/varnish/vha6/hooks/states.vcl
.
Edit this file to add custom VCL to the defined VHA6 hooks.