首页 > 系统相关 >nginx ingress controller EWMA负载均衡策略工作原理及修改过程

nginx ingress controller EWMA负载均衡策略工作原理及修改过程

时间:2023-11-06 14:00:30浏览次数:31  
标签:ingress 权重 EWMA nginx controller 实例

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

相关文章

  • 如何将docsify项目部署到centos系统nginx中?
    要将Docsify项目部署到CentOS系统的Nginx中,可以按照以下步骤进行操作:1.在CentOS服务器上安装Nginx: -打开终端并以root用户身份登录到CentOS服务器。 -运行以下命令来安装Nginx:    yuminstallnginx   -安装完成后,启动Nginx服务:    systemctls......
  • rancher部署微服务(1)--部署nginx微服务
    利用之前部署的rancher平台操作1.访问http://192.168.8.92,返回如下输入账号密码admin/131420an,返回如下2.选择第二个集群,选择项目3.回到工作负载的页面部署微服务4.部署微服务4.1单击部署服务4.2回到如下页面进行配置4.3根据需求进行配置4.4.设置微服务镜像的拉取策略,cpu内存的......
  • angie nginx_lua 模块使用
    angie包含了不少社区模块,docker镜像更加方便,都已经安装了,以下是一个测试lua模式的使用因为默认官方构建的是一个动态扩展模块,对于三方lua模块安装不是很方便,我参考了openresty对于luarocks的支持,这样我们自己安装三方lua模块就比较方便的构建支持luarocks的dcoker镜......
  • nginx 302问题
    nginx抓包显示302访问的ip端口有发生变化踩坑需配置location/abc{proxy_passhttp://192.168.146.64:7118/;proxy_intercept_errorson;#捕捉错误error_page301302307=@handle_redirects;}......
  • 宝塔 nginx 运行 vue项目
    宝塔安装nginxnginx根目录:/www/server/nginx/html修改nginx配置下滑到70多行,添加server对象内容,内容如下server{listen82;server_nametest2;location/{roothtml/test2;indexindex.htmlindex.htm;......
  • 在虚拟机(Linux)中Docker中部署Nginx成功,但是在宿主机无法访问Nginx站点?
    1.问题本文是基于黑马程序员Docker基础--常见命令一课中部署Nginx时遇到的问题作出解答。在虚拟机(Linux)中Docker中部署Nginx成功,但是在宿主机无法访问Nginx站点如图,Nginx服务已经启动成功但是我们在宿主机的浏览器试图访问的时候却总是报错:2.解决思路2.1查看端口号是否映......
  • linux下安装nginx
    下载nginxwgethttps://nginx.org/download/nginx-1.25.3.tar.gzyum安装依赖包yum-yinstallgcczlibzlib-develpcre-developensslopenssl-devel解压tar-zxvfnginx-1.22.0.tar.gz配置当前nginxcdnginx-1.22.0./configure--prefix=/usr/local/nginx......
  • 前后端都用得上的 Nginx 日常使用经验
    前言nginx是一个高性能的开源反向代理服务器和web服务器,一般用来搭建静态资源服务器、负载均衡器、反向代理,本文将分享其在Windows/docker中的使用,使用nssm部署成服务的方案脚本,局域网中自定义域名解决https提示不安全的解决方案,以及一路踩过的坑。特点高性能:事件驱......
  • 启动nginx报错nginx: [emerg] unexpected end of file, expecting "}" in /usr/local/
    启动nginx报错:“nginx:[emerg]unexpectedendoffile,expecting“}”in/usr/local/nginx/conf/nginx.conf:118”重启nginx时,报这么个错:[root@localhostconf]#/usr/local/nginx/sbin/nginx-sreloadnginx:[emerg]unexpectedendoffile,expecting“}”in/usr/lo......
  • nginx coturn socat privoxy opencv 静态编译
    文档说明:只记录关键的地方;发文时间:2023-11-02意义:linux环境,免安装下载后即可使用环境:alpine:3.18dockerclang状态:完善中体验编译结果nginx静态编译关键点nginxusePCRE2libraryonnginx1.21.5hg脚本全称是mercurialopensslzlibpcpre2等静态库......