我目前在我的网络上运行两个后端服务器,并在Windows上使用Nginx进行负载平衡。将Nginx修补到ip_hash 4个八位字节而不是3个
我现在负载测试系统,但是我所有的流量都是针对一台服务器的。这是因为ip_hash算法按前3个八位字节进行排序,即111.222.333.XXX
这是一个问题,因为我瞄准服务器的所有流量都具有相同的基地址(相同的前3个八位字节)因此我的流量都没有去其他服务器。有没有人知道一种方法来修补或更改ip_hash算法以过滤4个八位字节。
感谢
我目前在我的网络上运行两个后端服务器,并在Windows上使用Nginx进行负载平衡。将Nginx修补到ip_hash 4个八位字节而不是3个
我现在负载测试系统,但是我所有的流量都是针对一台服务器的。这是因为ip_hash算法按前3个八位字节进行排序,即111.222.333.XXX
这是一个问题,因为我瞄准服务器的所有流量都具有相同的基地址(相同的前3个八位字节)因此我的流量都没有去其他服务器。有没有人知道一种方法来修补或更改ip_hash算法以过滤4个八位字节。
感谢
Nginx的开源版本支持哈希指令,同样可以正常工作(不完全一样,虽然)的粘性会话机制由商业版本提供:
通用散列法:发送请求的服务器是 ,其由用户定义的密钥确定,其可以是文本,变量或其组合。例如,密钥可以是源IP和端口, 或URI:
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
https://www.nginx.com/resources/admin-guide/load-balancer/
那么你如何使用从IPv4 4个字节用散列法?让我们来看看如何从嵌入式变量部分http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
$ REMOTE_ADDR客户端地址
,使代码看起来获取客户端IP,如:
upstream backend {
hash $remote_addr consistent;
server backend1.example.com;
server backend2.example.com;
}
UPDATE:
如果查看Stream模块(TCP代理),第一个示例显示完全相同的方法:
upstream backend {
hash $remote_addr consistent;
server backend1.example.com:12345 weight=5;
server backend2.example.com:12345;
server unix:/tmp/backend3;
}
server {
listen 12346;
proxy_pass backend;
}
为什么不尝试粘滞会话或其他LB方法:循环,最少连接,散列? – Anatoly
我正在使用ip_hash。我试过使用循环法和最少的连接,但是它们导致了错误,并且在我的情况下似乎没有那么快。我不知道你可以在Nginx的粘滞会话 – Sprout
@Anatoly对不起,我没有意识到有什么,如'哈希' – Sprout