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

2024-05-12 12:12

本文主要是介绍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

测试命令

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

启动后,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;}}}

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

3.2 重启容器

还是需要重启容器

docker restart nginx_34103_entapi_realtime_api

查看日志

 docker logs nginx_34103_entapi_realtime_api --tail=100

这篇关于Python 全栈系列244 nginx upstream 负载均衡 踩坑日记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982599

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相