nginx如何根据服务器负载情况进行负载均衡分配请求?
我看nginx要么是分配权重 要么是轮着来 , 但是还是有个问题 有些请求非常耗费服务性能 有没有一种方法让 nginx和各个均衡服务器建立链接 实时获取到每个服务器的负载情况 根据这个负载情况去分配请求?比如我有 a服务器 b服务器一个请求打过来了 直接给a服务器cpu打满了 这时候后面的请求都交给b服务器了 等a服务器空闲下来再对a服务器进行转发请求 本帖最后由 Huashusu 于 2022-9-6 13:17 编辑
这种情况可以考虑自己写个中间件,根据负载分配任务,nginx的一般无法根据真实负载进行合理分配。
如果自己来实现的话,需要监控服务器,然后获取服务器地址和端口等信息,通过算法进行基于CPU负载的负载均衡。
可以尝试用Redis或ETCD来保存服务器信息,服务端额外增加功能:定时写入信息什么的 nginx主要是根据周期性的监控检查来判断负载均衡的服务器状态的,本身没有监控的功能,这个要不就二开。如果用的是k8s这套体系,就可以看看istio这个服务网格,这个更强 nginx实现负载均衡,按后端服务器的响应时间来分配请求,响应时间短的优先分配。需要使用fair参数(第三方) 你写一个lua脚本插件 写个脚本吧,获取服务器负载,修改配置文件权重,然后reload ,这个方法简单~ 没办法, 不过你可以把耗时的路由单独做一个配置 可以用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的另外一套 nginx获取节点的硬件负载信息,肯定要节点要个api返回信息的,这个只能写个程序或脚本。
但其实这个已经超出nginx范围了。
一般是业务层自己写一套网关系统了
页:
[1]