ppgjx 发表于 2022-9-6 12:56

nginx如何根据服务器负载情况进行负载均衡分配请求?

我看nginx要么是分配权重 要么是轮着来 , 但是还是有个问题 有些请求非常耗费服务性能 有没有一种方法让 nginx和各个均衡服务器建立链接 实时获取到每个服务器的负载情况 根据这个负载情况去分配请求?
比如我有 a服务器 b服务器一个请求打过来了 直接给a服务器cpu打满了 这时候后面的请求都交给b服务器了 等a服务器空闲下来再对a服务器进行转发请求

Huashusu 发表于 2022-9-6 13:08

本帖最后由 Huashusu 于 2022-9-6 13:17 编辑

这种情况可以考虑自己写个中间件,根据负载分配任务,nginx的一般无法根据真实负载进行合理分配。
如果自己来实现的话,需要监控服务器,然后获取服务器地址和端口等信息,通过算法进行基于CPU负载的负载均衡。
可以尝试用Redis或ETCD来保存服务器信息,服务端额外增加功能:定时写入信息什么的

lm93129 发表于 2022-9-6 14:10

nginx主要是根据周期性的监控检查来判断负载均衡的服务器状态的,本身没有监控的功能,这个要不就二开。如果用的是k8s这套体系,就可以看看istio这个服务网格,这个更强

super2022 发表于 2022-9-6 14:46

nginx实现负载均衡,按后端服务器的响应时间来分配请求,响应时间短的优先分配。需要使用fair参数(第三方)

Js_Aaron 发表于 2022-9-6 15:03

你写一个lua脚本插件

jaybing926 发表于 2022-9-6 16:00

写个脚本吧,获取服务器负载,修改配置文件权重,然后reload ,这个方法简单~

萋小磊 发表于 2022-9-6 16:41

没办法, 不过你可以把耗时的路由单独做一个配置

pzx521521 发表于 2022-9-6 17:09

可以用least_time或least_conn
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#queue
nginx 本身只提供了这两个:
least_conn 优先最少连接
least_time 优先最少time


为什么没有cpu, 因为获取cpu 要子节点配合, 上面两个只记录自己转发的时间就可以了

而且cpu 策略不好定义, 每次请求都比较, 还是每隔多长时间 还是多少次请求 比较?

如果非要根据CPU自己用openresty 写lua 脚本

这是nginx的一套

当然也可以走k8s evony的另外一套

sbwfnhn 发表于 2022-9-6 17:50

nginx获取节点的硬件负载信息,肯定要节点要个api返回信息的,这个只能写个程序或脚本。
但其实这个已经超出nginx范围了。
一般是业务层自己写一套网关系统了
页: [1]
查看完整版本: nginx如何根据服务器负载情况进行负载均衡分配请求?