2

我们有一个供学生使用的在线测试应用程序。我们有 4 台不同的服务器和一个 Nginx,用于在所有 4 台服务器之间负载均衡流量。

由于我们的应用程序需要粘性会话(对于一个用户,所有请求都发送到一台服务器),所以我启用了 ip_hash 算法进行负载平衡。

现在我们遇到这样一种情况,所有学生都出现在计算机实验室进行在线测试,该计算机实验室为每个系统分配了私有 IP,并且全部通过一个具有公共 IP 的互联网网关。

现在,当学生出现在测试负载均衡器中时,所有学生都会获得相同的源 IP,并且由于 ip_hash,它会将所有流量发送到一台服务器。

如何解决这个问题?

我们保持具有相同负载分布的粘性会话。

4

2 回答 2

1

看起来 nginx+ 至少可以使用该sticky指令基于 cookie 进行负载平衡。

sticky cookie srv_id expires=1h 

将设置一个指示要使用的服务器的 cookie。这要求您在 nginx 上进行 ssl 终止。不知道免费版的nginx能不能做到这一点。有关详细信息,请参阅文档

于 2017-09-28T19:35:26.620 回答
0

文档页面描述了为什么会发生这种情况。该ip-hash指令仅对 IP 地址的前 3 个八位字节进行哈希处理。

您可以使用hash $remote_addr;代替基于所有 4 个八位字节进行散列。

于 2017-11-06T19:25:27.813 回答