在这种配置中,一致性哈希比权重更重要。
换句话说,如果上游同时提供权重和一致的哈希,那么主要的东西将是一致的哈希。
并根据权重将哈希分配给服务器。
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