1、概念
EWMA(Exponentially Weighted Moving Average)策略是 NGINX Ingress Controller 中的一种负载均衡算法,它用于决定请求应该由后端服务的哪个实例处理。
2、工作原理
EWMA 策略通过指数加权移动平均的方式计算每个后端服务实例的权重,并根据权重来分配请求。
它的工作原理如下:
1. 初始化权重:当 NGINX Ingress Controller 启动或配置发生更改时,会初始化每个后端服务实例的权重。初始权重通常为相等值。
2. 请求分配:当收到一个请求时,NGINX Ingress Controller 使用 EWMA 策略来选择一个后端服务实例来处理该请求。
3. 权重计算:NGINX Ingress Controller 使用 EWMA 策略根据每个后端服务实例的权重来进行请求分配。权重计算基于指数加权移动平均的算法,其中旧的权重值以指数衰减的方式影响新的权重值。
- 每个后端服务实例的权重会根据其过去的响应时间进行调整。如果一个实例的响应时间较长,说明它的负载较重,权重会相应降低。
- 权重计算也考虑了实例的健康状况。如果一个实例被标记为不可用或不健康,它的权重会降低甚至为零,从而不会再接收到请求。
4. 请求转发:根据计算得到的权重,NGINX Ingress Controller 将请求转发给具有较高权重的后端服务实例。权重较高的实例将处理更多的请求。
通过使用 EWMA 策略,NGINX Ingress Controller 可以根据后端服务实例的性能和健康状况来动态地分配请求,从而实现负载均衡。
这样,可以确保请求被均匀地分发给可用且响应时间较短的后端服务实例,提高系统的可用性和性能。
3、现实问题
服务后端有多个实例的场景。某几个实例的负载比较高,其他的实例比较空闲。
导致负载不均衡。
在目前的nginx ingress controller中,没有最小连接数的解决方案。所以,考虑通过ewma的方式,根据响应的时间来决定下一次的请求是分配哪个实例上。
换句话说,也可以理解根据实例负载的方式进行分发。
期望:负载在多个实例之间进行相对均衡。
4、修改方法
在nginx ingress controller中,通过如下的方法,修改为EWMA的负载均衡策略。
修改nginx ingress controller configmap:
查找对应的configmap
[root@nccztsjb-node-02 ~]# kubectl get configmap -n ingress-nginx | grep ingress-nginx ingress-nginx 19 58d ingress-nginx-logrotate 1 58d ingress-nginx-logrotate-env 1 58d [root@nccztsjb-node-02 ~]#
修改configmap
kubectl edit cm -n ingress-nginx ingress-nginx
加入如下的配置:
load-balance: "ewma"
加到如下的位置:
esc -> :wq
保存,退出。
重启ingress controller服务
[root@nccztsjb-node-02 ~]# kubectl get po -n ingress-nginx NAME READY STATUS RESTARTS AGE nginx-ingress-controller-qs5
kubectl delete po -n ingress-nginx nginx-ingress-controller-qs546
当pod是running的时候,表示服务已经启动OK,可以对外提供服务。
[root@nccztsjb-node-02 ~]# kubectl get po -n ingress-nginx NAME READY STATUS RESTARTS AGE nginx-ingress-controller-99589 2/2 Running 0 23s [root@nccztsjb-node-02 ~]#
标签:ingress,权重,EWMA,nginx,controller,实例 From: https://www.cnblogs.com/chuanzhang053/p/17812474.html