任何使用 directors.hash() 和 hash.backend() 的 varnish 是否总是选择相同的后端?

任何使用 directors.hash() 和 hash.backend() 的 varnish 是否总是选择相同的后端?

我有 2 个 varnish,每个都有 2 个后端(相同的 varnish 版本 -v4.x- 和配置文件)。

传入的客户端连接随机分布到任何可用的 varnish。

我需要客户端根据其源 IP 始终使用相同的 varnish 后端(当然,后端出现故障的情况除外)。

我使用以下内容(简化)配置

new servers = directors.hash();
servers.add_backend(srv01, 1.0);
servers.add_backend(srv02, 1.0);

sub vcl_recv {
    set req.backend_hint = servers.backend(client.ip);
}

我想知道 Varnish 使用的哈希算法是否能保证无论使用哪种 Varnish,客户端始终使用相同的后端。

这意味着无需使用任何随机数据来初始化哈希算法。你知道情况是否如此吗?

答案1

hash和控制器shard将散列到相同的后端服务器,假设相同的配置和运行时状态(后端服务器的健康状况)。它使用 sha256,没有随机组件(散列密钥除外)。

相关内容