我们有一个在线测试应用程序,供学生使用。 我们有4个不同的服务器和一个Nginx,以便在所有4台服务器之间平衡流量。
由于我们的应用程序需要粘性会话(对于一个用户,对一个服务器的所有请求)所以我已启用ip_hash算法进行负载平衡。
现在我们的情况是所有学生都出现在计算机实验室进行在线测试,该实验室已经为每个系统分配了私有IP,并且所有学生都通过一个带有公共IP的互联网网关传递。
现在,当学生出现测试负载均衡器时,为所有学生获取相同的原始IP,并且由于ip_hash,它会将所有流量发送到一台服务器。
如何解决此问题?
我们维持Sticky会话具有相同的负载分配。
答案 0 :(得分:0)
看起来nginx +至少可以使用sticky
指令基于cookie进行负载均衡。
sticky cookie srv_id expires=1h
将设置一个cookie,指示要使用的服务器。这要求你在nginx上进行ssl终止。我不知道nginx的免费版本是否可以做到这一点。 有关详细信息,请参阅文档
答案 1 :(得分:0)
此documentation页面描述了这种情况发生的原因。 ip-hash
指令仅在IP地址的前3个八位字节上进行哈希处理。
您可以使用hash $remote_addr;
代替基于所有4个八位字节的哈希值。