• Python 全栈系列244 nginx upstream 负载均衡 踩坑日记


    说明

    最初是因为租用算力机(Python 全栈系列242 踩坑记录:租用算力机完成任务),所以想着做一个负载均衡,然后多开一些服务,把配置写在nginx里面就好了。

    一开始租用了一个3080起了一个服务,后来觉得速度不够快,再起了3个4090,每个4090起3个服务。然后,觉得速度够了就把3080那台机器退了。再之后调用的时候,发现服务不太稳定,之前是猜测可能共享带宽导致连接不稳。然后今天发现,可能是nginx没搞对…

    内容

    1 概述

    最初我认为负载均衡默认就带了健康检测的功能,nginx应该可以识别那些反向代理的服务器,那些有问题,然后避开它。实际上1.19版是没有的,没有这个模块时,负载均衡总是一视同仁的去调用那些已经挂掉的服务。只要有一个服务挂了,整个体验就是卡卡的。

    简单来说,就是要装一个check_module插件。传统办法好像要自己下载,然后重新编译啥的,看起来就很麻烦。然后我就想取个巧,但发现这个还要碰运气。

    └─ $ docker search nginx_upstream_check_module
    NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    [不行]yuxhuang/alpine-libressl-luajit-nginx   Alpine NGINX with HTTP2 support, with libres…   3                    [OK]
    [不行]joshm1/nginx                            Nginx 1.9.4 with the nginx_upstream_check_mo…   1
    [可以]mrlioncub/nginx_upstream_check_module   Nginx compiled with Health checks upstreams …   0
    oxnme/openresty                         openresty with nginx_upstream_check_module      0
    johnwu/nginx                            Nginx-1.10.3 with luaJIT nginx_upstream_chec…   0                    [OK]
    chromerobv/nginx                        nginx compiled with nginx_upstream_check_mod…   0                    [OK]
    shiurn/nginx                            nginx-1.20+nginx_upstream_check_module+nginx…   0
    congcong126/nginx-check                 add nginx_upstream_check_module                 0
    sola97/nginx                            nginx-http3 with nginx_upstream_check_module…   0
    hejtao/nginx-hc                         health check;  nginx_upstream_check_module;0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    测试命令

    docker run -it \
     --rm \
     --name=entapi_realtime_api \
     -v /etc/localtime:/etc/localtime  \
     -v /etc/timezone:/etc/timezone\
     -v /etc/hostname:/etc/hostname\
     -e "LANG=C.UTF-8" \
     -p 34103:34103\
     -v /home/nginx_confs/realent_34103_nginx.conf:/etc/nginx/nginx.conf \
     mrlioncub/nginx_upstream_check_module
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    启动后,nginx会发现某个服务失效了
    在这里插入图片描述
    然后在调用过程中,nginx一方面响应请求,一方面继续对服务进行健康检查,所以虽然服务报错了,但并不影响请求的调用。
    在这里插入图片描述

    2 配置文件

    整个配置非常简单,主要就是check interval=3000 rise=2 fall=5 timeout=1000

    events {
        #设置工作模式为epoll,除此之外还有select,poll,kqueue,rtsig和/dev/poll模式
        use epoll;
        #定义每个进程的最大连接数,受系统进程的最大打开文件数量限制
        worker_connections  1024;
    }
    
    http{
        # 配置nginx上传文件最大限制
        client_max_body_size 50000m;
    
        upstream multi_ent {
                # fair;
                server 183.252.181.66:10000;
                server XXX:10000  ;
                server XXX:10001  ;
                # 健康检查配置
                check interval=3000 rise=2 fall=5 timeout=1000;
            }
        server {
            listen 34103;
            location / {
                proxy_pass http://multi_ent;
                # proxy_next_upstream error timeout invalid_header http_502 http_504 http_404;
            }
    
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3 配置更新

    3.1 重载配置

    容器名 nginx_34103_entapi_realtime_api

    
    检查配置
    docker exec nginx_34103_entapi_realtime_api  nginx -t
    
    重载配置
    docker exec nginx_34103_entapi_realtime_api  nginx -s reload
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.2 重启容器

    还是需要重启容器

    docker restart nginx_34103_entapi_realtime_api
    
    • 1

    查看日志

     docker logs nginx_34103_entapi_realtime_api --tail=100
    
    • 1
  • 相关阅读:
    Docker学习-目录
    Spark(OOM问题,数据倾斜问题)
    学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理
    js写轮播图,逐步完善
    月饼问题PAT B1020(贪心算法)
    阶梯形行列式的性质
    【Mysql】第8篇--数据库元数据
    重学SpringBoot3-路径匹配机制
    uniapp app端使用谷歌地图选点定位
    【Spring MVC】注册Spring MVC中的特殊组件bean
  • 原文地址:https://blog.csdn.net/yukai08008/article/details/138732968