0

更具体地说,这行得通吗?

upstream backend {
    hash $request_uri consistent;

    server backend1.example.com weight=1;
    server backend2.example.com weight=2;
}

backend2.example.com 会收到两倍的流量吗?

此外,如果更改权重或添加另一台服务器会发生什么情况。“只有少数几个键会被重新映射”仍然成立吗?

hash 指令的可选一致参数启用 ketama 一致的哈希负载平衡。请求将根据用户定义的散列键值均匀分布在所有上游服务器上。如果将上游服务器添加到上游组或从上游组中删除,则只会重新映射少数键,这将在负载平衡缓存服务器和其他累积状态的应用程序的情况下最大限度地减少缓存未命中。

来自https://www.nginx.com/resources/admin-guide/load-balancer/

4

1 回答 1

0

在这种配置中,一致性哈希权重更重要。

换句话说,如果上游同时提供权重和一致的哈希,那么主要的东西将是一致的哈希

并根据权重将哈希分配给服务器。

upstream consistent_test {
    server consistent_test.example.ru:80 weight=90;
    server consistent_test2.example.ru:80 weight=10;
    hash $arg_consistent consistent;
}

实验

1) 默认状态

上游平衡器测试{

hash $arg_someid consistent;
server server1.example.ru:8080;
server server2.example.ru:8080;
server server3.example.ru:8080 down;

}

请求哈希固定到主机:

server1.example.ru ==> 535

server2.example.ru ==> 462

server3.example.ru ==> 0

2)第一步:启用节点并设置权重

上游平衡器测试{

hash $api_sessionid consistent;
server server1.example.ru:8080 weight=250;
server server2.example.ru:8080 weight=500;
server server3.example.ru:8080 weight=250;

}

请求哈希固定到主机:

server1.example.ru:8080 ==> 263

server2.example.ru:8080 ==> 473

server3.example.ru:8080 ==> 254

3)第二步:完成流量转换,禁用老节点

上游平衡器测试{

hash $api_sessionid consistent;
server1.example.ru:8080 down;
server2.example.ru:8080;
server3.example.ru:8080;

}

请求哈希固定到主机:

server1.example.ru:8080 ==> 0

server2.example.ru:8080 ==> 533

server3.example.ru:8080 ==> 464

server1.example.ru

1) 之前 = 463

2) 在 step_2 = 533

3) 哈希命中 = 306

server2.example.ru

1) 之前 = 536

2) 在 step_1 = 263

3) 哈希命中 = 148

server3.example.ru

1) 之前 = 255

2) 在步骤 1 = 464

3) 哈希命中 = 115

于 2018-11-14T14:13:48.640 回答